我们说我有一个依赖于两个模块的脚本:
只会执行Main.py,但在Main的执行中,有几次调用Module1.py和Module2.py中的方法。
更常见的是......
1)将所有内容记录到Main.py的日志中?
或
2)将所有内容记录到每个操作的相应模块的日志中?
(如果您理解我的问题,那么博士,那么就没有必要继续阅读。否则,这是一个例子):
示例(使用非常简短的代码):
案例#1 只有一个日志文件,我们称之为Main.log。假设记录器名称没有硬编码(虽然在这个例子中),所以我应该以AnotherMain.py为例,所有日志条目都将进入AnotherMain.log
Main.py:
some_value = Module1.get_value("abc")
some_other_value = Module2.get_value("def")
some_result = some_value + some_other_value
log("main", "some_result evaluated successfully")
Module1.py:
def get_value(key):
...
log("main", "returning value for key from Module1")
Module2.py:
def get_value(key):
...
log("main", "returning value for key from Module2")
这将导致Main.log读取:
some_result evaluated successfully
returning value for key from Module1
returning value for key from Module2
案例#2 有三个日志文件,每个模块一个:Main.log,Module1.log,Module2.log。
Main.py:
some_value = Module1.get_value("abc")
some_other_value = Module2.get_value("def")
some_result = some_value + some_other_value
log("main", "some_result evaluated successfully")
Module1.py:
def get_value(key):
...
log("Module1", "returning value for key")
Module2.py:
def get_value(key):
...
log("Module2", "returning value for key")
这将导致三个日志,每个日志只有一行说明该模块中发生的事情。
我没有问,"你更喜欢哪个,"但更确切地说,这是更标准和更常见的?一旦我走了,我的继任者会更快乐地处理和维护吗?
答案 0 :(得分:2)
最佳做法是使用logging
library,并将所有内容保留到该库中。
每个模块都使用自己的记录器:
import logging
log = logging.getLogger(__name__)
# ...
log.warn('Do not fnord the frazzle, faf the frobnir instead')
并在主模块中配置日志记录;您可以配置一个日志文件,或者根据需要将特定模块的输出直接发送到特定文件。
默认情况下,记录程序会将所有内容传播到根记录程序,但是如果要设置更复杂的日志记录配置,则每个模块使用单独的记录程序可以在将来提供灵活性。
您可以根据需要调整格式并将日志记录到其他后端。格式化程序有lot of options来调整生成的消息,请确保包含记录器名称。 configuration options for formatting, filtering and handling几乎无穷无尽。
关键是你拥有多少个日志文件以及这些文件的内容是配置的问题。根据需求的变化调整配置。从简单的事情开始;将所有内容记录到一个文件,然后从那里开始。通过为每个模块提供自己的日志记录对象,您可以单独配置每个记录器,或保持默认值,并将所有内容传播到根处理程序。