[英]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.