簡體   English   中英

跨多個文件共享 Python 記錄器

[英]Share Python logger across multiple files

我有一個 python 應用程序,其文件結構類似於以下內容:

/Project
    file1.py
    file2.py
    file3.py
    ...

該應用程序使用 Python 2.6,因為它在 CentOS 6 環境中運行。

我有興趣建立一個通用的日志記錄機制,其中每個文件的日志語句寫入磁盤上的同一個日志文件。 這些 python 文件通常從命令行執行,彼此之間有些獨立。 文檔( 此處鏈接)中的一項建議是我測試過的以下內容:

log = logging.getLogger(__name__)

我發現所有日志行都將被列為來自__main__ ,無論日志語句來自哪個文件。 換句話說,我無法判斷給定的日志行來自哪個文件。

我希望能夠得到一個包含類似於以下內容的日志文件:

2017-01-17 10:48:47,446 - file1 - DEBUG - this is from file1
2017-01-17 10:48:47,447 - file2 - DEBUG - this is from file2
2017-01-17 10:48:47,447 - fiel3 - DEBUG - this is from file3

在上面,我會執行:

log.debug("this is from file1")

file1.py和其他文件中的類似日志行中,根據需要替換日志語句中的文本。

我目前正在使用以下內容來設置日志記錄:

########################################
# Setup Logging
########################################
LOG_FILENAME = 'app.log'
# Set up a specific logger with our desired output level
log = logging.getLogger('Logger')
log.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

# Add the log message handler to the logger
handler = logging.handlers.RotatingFileHandler(
              LOG_FILENAME, maxBytes=200000000, backupCount=5)
handler.setFormatter(formatter)
log.addHandler(handler)
########################################

這種設置非常適合從一個 python 源進行日志記錄,但不太有用,因為我現在正在嘗試從多個 python 源進行日志記錄

我已閱讀在多個模塊中使用 Python 日志記錄 它有很好的答案,但由於我項目中文件的獨立性,使用__name__並沒有像描述的那樣工作。

最佳方法

與其嘗試將記錄器名稱設置為文件名,不如指定%(module)s

formatter = logging.Formatter('%(asctime)s - %(module)s - %(levelname)s - %(message)s')
                                             ^^^^^^^^^^

這將避免打印__main__並很好地為您提供:

2020-11-06 23:19:03,827 - file2 - INFO - This is from file2
2020-11-06 23:19:03,827 - file3 - INFO - This is from file3
2020-11-06 23:19:03,827 - file1 - INFO - This is from file1

享受!



PS:我有點擔心您將同一文件RotatingFileHandler附加到每個記錄器,而不是一次附加到根記錄器。 一般來說,我不建議將日志設置代碼復制到每個源代碼文件和記錄器,而是在單獨的文件中配置一次根記錄器。

暫無
暫無

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

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