2024-04-20 07:23:25 发布
网友
我正在尝试使用Python的logging模块,并对使用它的最佳方式有疑问。
logging
我定义了几个类,想要编写日志,并且能够同时设置所有类的级别。我试过:
谢谢你的提示。我发现了很多关于使用日志的基本方法的文档,但是关于如何在类中使用它的文档并不多。
编辑:我不认为这是下面链接的副本。接受的答案解释了如何在主程序中加载配置,然后在所有模块中使用它。但是如果我没有主程序呢?我在哪里定义它?
如果在单独的文件中创建logger对象,但名称相同。他们将共享所有的属性。事实上,他们是同一个伐木工人。logging模块还允许按层次顺序创建记录器对象。例如,名为spam.mod2的记录器是spam的子记录器,其中它具有spam的所有属性,但也可以自定义。
把它具体化。我将创建一个简单的项目,它有两个模块:mod1和mod2。公共模块setup_logger用于创建单个记录器。最后,我有一个main模块,它驱动整个系统。
mod1
mod2
setup_logger
main
setup_logger模块将创建一个新的logger对象,并将其命名为spam。代码可以是简单的列表,也可以是复杂的。
# setup_logger.py import logging logging.basicConfig(level=logging.DEBUG) logger = logging.getLogger('spam')
接下来,mod1由于懒惰,只需重用日志对象:
# mod1.py from setup_logger import logger class Class1(object): def do_something(self): logger.info('Class1: doing something')
mod2创建自己的logger对象,但仍需要导入setup_logger,以便创建spam记录器。mod2通过将其命名为spam.mod2来创建子记录器:
# mod2.py import logging import setup_logger # mod2 creates its own logger, as a sub logger to 'spam' logger = logging.getLogger('spam.mod2') class Class2: def do_something(self): logger.info('Class2: doing something')
最后,main将把它们放在一起:
# main.py import mod1 import mod2 if __name__ == '__main__': object1 = mod1.Class1() object1.do_something() object2 = mod2.Class2() object2.do_something()
输出:
INFO:spam:Class1: doing something INFO:spam.mod2:Class2: doing something
如果在单独的文件中创建logger对象,但名称相同。他们将共享所有的属性。事实上,他们是同一个伐木工人。
logging
模块还允许按层次顺序创建记录器对象。例如,名为spam.mod2的记录器是spam的子记录器,其中它具有spam的所有属性,但也可以自定义。把它具体化。我将创建一个简单的项目,它有两个模块:
mod1
和mod2
。公共模块setup_logger
用于创建单个记录器。最后,我有一个main
模块,它驱动整个系统。setup_logger
模块将创建一个新的logger对象,并将其命名为spam。代码可以是简单的列表,也可以是复杂的。接下来,
mod1
由于懒惰,只需重用日志对象:mod2
创建自己的logger对象,但仍需要导入setup_logger
,以便创建spam记录器。mod2
通过将其命名为spam.mod2来创建子记录器:最后,
main
将把它们放在一起:输出:
相关问题 更多 >
编程相关推荐