日志记录的丑陋——Python示例
所以我正在做一个有一些日志设置的项目。我们设计了一种日志记录方式,以便在发生异常时记录该点的所有信息。这与一些传统方法不同,在这些方法中,不管过程中的结果如何,都会记录事情。我编写了下面的示例来简单地解释我们正在使用的模式。简而言之,创建了一个全局字典,用于在程序运行时存储信息。这本字典在程序中的不同点被清除和初始化(我不喜欢,但这是一个“不必要的邪恶”)。需要清除字典,因为循环操作只更新某些信息。无论如何,下面的例子已经够多了:日志记录的丑陋——Python示例,python,python-2.7,logging,Python,Python 2.7,Logging,所以我正在做一个有一些日志设置的项目。我们设计了一种日志记录方式,以便在发生异常时记录该点的所有信息。这与一些传统方法不同,在这些方法中,不管过程中的结果如何,都会记录事情。我编写了下面的示例来简单地解释我们正在使用的模式。简而言之,创建了一个全局字典,用于在程序运行时存储信息。这本字典在程序中的不同点被清除和初始化(我不喜欢,但这是一个“不必要的邪恶”)。需要清除字典,因为循环操作只更新某些信息。无论如何,下面的例子已经够多了: import logging import sys import
import logging
import sys
import logmatic
l = logging.getLogger(__name__)
l.setLevel(logging.DEBUG)
sh = logging.StreamHandler(sys.stdout)
sh.setFormatter(logmatic.JsonFormatter())
l.addHandler(sh)
logging_dict = {}
def some_method(default_logging):
some_loopable_data_structure = [1, 2, 3]
for loop in some_loopable_data_structure:
default_logging.clear()
logging_dict.update(default_logging)
logging_dict.update({'loop_count': loop})
if loop == 2:
logging_dict.update({'some_condition_triggered': 'stores a value which we need to clear each loop'})
l.info('current logged message, loop {}'.format(loop), extra=logging_dict)
def main():
default_logging = {'first_var': 'some initial var', 'second_var': 'another initial var'}
some_method(default_logging)
main()
示例输出:
{
"asctime" : "2018-02-06T13:47:38ZE. Australia Standard Time",
"name" : "__main__",
"processName" : "MainProcess",
"filename" : "ugly_logging.py",
"funcName" : "some_method",
"levelname" : "INFO",
"lineno" : 20,
"module" : "ugly_logging",
"threadName" : "MainThread",
"message" : "current logged message, loop 3",
"loop_count" : 3,
"timestamp" : "2018-02-06T13:47:38ZE. Australia Standard Time"
}
如果我删除
default_logging.clear()
输出(包含来自循环2的日志记录&这是不正确的):
在这个小例子中,解决方案似乎并不坏。随着python模块的规模和复杂性的增加,我现在将“默认日志记录”的dict传递给各种方法,以便在我清除它的某些地方初始化日志记录&这一切都开始变得混乱起来。我不喜欢这种方法的一些地方
- 将dict传递给具有“默认日志记录”信息的所有方法
- 每次我循环都要查字典
- 以上内容似乎容易出错,而且扩展性不好
{
"asctime" : "2018-02-06T13:58:50ZE. Australia Standard Time",
"name" : "__main__",
"processName" : "MainProcess",
"filename" : "ugly_logging.py",
"funcName" : "some_method",
"levelname" : "INFO",
"lineno" : 22,
"module" : "ugly_logging",
"threadName" : "MainThread",
"message" : "current logged message, loop 3",
"some_condition_triggered" : "stores a value which we need to clear each loop",
"second_var" : "another initial var",
"first_var" : "some initial var",
"loop_count" : 3,
"timestamp" : "2018-02-06T13:58:50ZE. Australia Standard Time"
}