簡體   English   中英

如何使用Python的Logging模塊寫入日志文件中的上一行?

[英]How can I write to the previous line in a log file using Python's Logging module?

這里的長期潛伏者,終於擺脫了木制品。

基本上,我正在嘗試做的是讓我的記錄器將這樣的數據寫入日志文件:

Connecting to database . . . Done.

我想要'連接數據庫'。 '在調用函數時寫入,並在函數成功執行后寫入'完成'。

我正在使用Python 2.6和日志記錄模塊。 另外,我真的很想避免使用裝飾器。 非常感激任何的幫助!

寫入日志是,而且必須是原子操作 - 這是至關重要的,也是任何日志包(包括Python標准庫中的日志包)的關鍵特性,它將日志記錄與簡單的信息附加區分為文件(其中位)由不同的進程和線程寫的東西可能很好地“交錯” - 其中一個寫一行的一部分而不是行尾,就像你想要的那樣,然后可能是另一個在之后插入一些東西,在第一個之前任務寫出它認為將是該行的最后部分,但實際上最終在另一條線上...通常導致混亂;-)。

原子單元是“一條線”並不是不可避免的(當然,日志可以記錄在文本文件的其他地方,而日志中可接受的一些“下沉”甚至沒有“a”的概念行“!”,但是,對於日志記錄, 必須有原子單位。 如果你想要一些非原子的東西,那么你真的不想要記錄,而是簡單地附加到文件或其他流(並注意第一段中提到的可能的混淆;-)。

對於關於你的任務正在做什么的瞬態更新(在X中間,X完成,開始Y等),你可以想到一個專門的日志處理程序(例如)通過將第一個單詞作為第一個單詞來解釋這樣的更新流。一個子任務標識符(逐步建立並顯示有關“當前子任務”的復合消息的某處),識別子任務標識符何時更改前一個子任務完成或采用顯式“子任務完成”消息,並且僅寫入持久性日志條目子任務完成事件)。

這是一個非常專業的要求,所以你不太可能找到一個預先制作的工具,而是你必須自己動手。 為了幫助您,確切了解您要完成的任務至關重要(為什么您需要非原子日志記錄條目,如果這樣的概念甚至沒有任何意義 - 您試圖改進哪些部署或系統管理任務通過使用這樣一個假設的工具?),以便專門的子系統可以根據您的實際需要量身定制。 那么,請你擴展一下嗎?

我不相信Python的記錄器支持這一點。

但是,對於日志格式進行聚合會不會更好,這樣當您想要分析數據時,可以很容易地解析日志文件; 是你想要的任何分歧者:

DateTime;LogType;string

這可以通過腳本輕松解析,然后您可以對日志進行分析

如果您使用:

      Connecting to database . . . Done.

然后,您將無法分析交易所花費的時間

我認為你不應該走這條路。 帶有條目的日志記錄方法:

  Time;functionName()->

退出日志記錄對於故障排除更有用:

  Time;functionName()<-

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM