Python通过logging.config.fileConfig()配置日志

1、简介

Python添加配置的方式有好几种,这里只介绍通过config文件方式,配置log日志。相对于直接在文件中配置日志,这种配置方式可以将日志配置和代码分离,方便代码的维护和日志管理。

2、步骤

新建配置文件logging.conf,用于存放logging配置文件的信息。

[loggers]
# 配置logger信息。必须包含一个名字叫做root的logger,当使用无参函数logging.getLogger()时,默认返回root这个logger,其他自定义logger可以通过 logging.getLogger("fileAndConsole") 方式进行调用
keys=root,file,fileAndConsole
[handlers]
# 定义声明handlers信息。
keys=fileHandler,consoleHandler
[formatters]
# 设置日志格式
keys=simpleFormatter
[logger_root]
# 对loggers中声明的logger进行逐个配置,且要一一对应,在所有的logger中,必须制定lebel和handlers这两个选项,对于非roothandler,还需要添加一些额外的option,其中qualname表示它在logger层级中的名字,在应用代码中通过这个名字制定所使用的handler,即 logging.getLogger("fileAndConsole"),handlers可以指定多个,中间用逗号隔开,比如handlers=fileHandler,consoleHandler,同时制定使用控制台和文件输出日志
level=DEBUG
handlers=consoleHandler
[logger_file]
level=DEBUG
handlers=fileHandler
qualname=file
propagate=1
[logger_fileAndConsole]
level=DEBUG
handlers=fileHandler,consoleHandler
qualname=fileAndConsole
propagate=0
[handler_consoleHandler]
# 在handler中,必须指定class和args这两个option,常用的class包括 StreamHandler(仅将日志输出到控制台)、FileHandler(将日志信息输出保存到文件)、RotaRotatingFileHandler(将日志输出保存到文件中,并设置单个日志wenj文件的大小和日志文件个数),args表示传递给class所指定的handler类初始化方法参数,它必须是一个元组(tuple)的形式,即便只有一个参数值也需要是一个元组的形式;里面指定输出路径,比如输出的文件名称等。level与logger中的level一样,而formatter指定的是该处理器所使用的格式器,这里指定的格式器名称必须出现在formatters这个section中,且在配置文件中必须要有这个formatter的section定义;如果不指定formatter则该handler将会以消息本身作为日志消息进行记录,而不添加额外的时间、日志器名称等信息;
class=StreamHandler
args=(sys.stdout,)
level=DEBUG
formatter=simpleFormatter
[handler_fileHandler]
class=FileHandler
args=('dialog-analysis.log', 'a')
level=DEBUG
formatter=simpleFormatter
[formatter_simpleFormatter]
format=%(asctime)s - %(module)s - %(thread)d - %(levelname)s : %(message)s
datefmt=%Y-%m-%d %H:%M:%S

说明,为了方便注释之间的对应,已在配置文件中添加了注释,在实际使用时,需要将里面的注释给删除,不然,可能由于中文的存在,引起异常。

  1. 在配置文件中,首先包含了三大主要模块,loggers, handlers,
    formatters。对于三个主要模块其包含的内容都是通过keys进行指定,然后通过logger_ke/handler_key/formatter_key对里面的key进行具体的设置。
  2. loggers配置logger的模块,其中必须包含一个名字叫做root的logger,当在应用程序中,使用无参函数logging.getLogger()时,默认返回root这个logger,其他自定义logger可以通过 logging.getLogger(“name”) 方式进行调用。
  3. handlers定义handlers的信息,通过keys进行指定。里面可以指定我们日志的输出方式、日志的级别、日志的格式等。
  4. formatters表示设置日志的格式。
  5. logger-XXX对loggers中声明的logger进行逐个配置,且要一一对应,在所有的logger中,必须制定lebel和handlers这两个选项,对于非roothandler,还需要添加一些额外的option,其中qualname表示它在logger层级中的名字,在应用代码中通过这个名字制定所使用的handler,即 logging.getLogger(“fileAndConsole”),handlers可以指定多个,中间用逗号隔开,比如handlers=fileHandler,consoleHandler,同时制定使用控制台和文件输出日志。propagate通常设为零,这样,当我们在handlers中设置多个处理器时,不会多次打印日志信息。
  6. handler_xxx在handler中,必须指定class和args这两个option,常用的class包括 StreamHandler(仅将日志输出到控制台)、FileHandler(将日志信息输出保存到文件)、RotaRotatingFileHandler(将日志输出保存到文件中,并设置单个日志wenj文件的大小和日志文件个数),args表示传递给class所指定的handler类初始化方法参数,它必须是一个元组(tuple)的形式,即便只有一个参数值也需要是一个元组的形式;里面指定输出路径,比如输出的文件名称等。level与logger中的level一样,而formatter指定的是该处理器所使用的格式器,这里指定的格式器名称必须出现在formatters这个section中,且在配置文件中必须要有这个formatter的section定义;如果不指定formatter则该handler将会以消息本身作为日志消息进行记录,而不添加额外的时间、日志器名称等信息;
  7. 在这个配置文件中设置了三种日志的输出方式,root对应控制台输出、file对应配置文件输出、fileAndConsole对应着文件和控制台同时输出

log日志文件的使用

import logging.config
# '读取日志配置文件'
logging.config.fileConfig('logging.conf')
 
# 创建一个日志器logger
logger = logging.getLogger('fileAndConsole')
logger.debug('debug')
logger.info('info')
logger.warning('warn')
logger.error('error')
logger.critical('critical')

问题

1、module ‘logging’ has no attribute 'config

1、检查import logging.config 而不是import logging. 2、如果使用pycharm或者idea,通过file-invalid caches/restart试试

3、参考资料

python之配置日志的几种方式

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要将自定义的CustomTimedRotatingFileHandler类与logging.config.fileConfig()一起使用,需要进行以下步骤: 1. 创建一个配置文件,例如`logging.conf`,使用INI格式,并在其中定义你的日志配置。在配置文件中,使用`handler_class`参数来指定自定义的处理器类。 ```ini [loggers] keys=root [handlers] keys=custom_handler [formatters] keys=custom_formatter [logger_root] level=DEBUG handlers=custom_handler [handler_custom_handler] class=path.to.CustomTimedRotatingFileHandler level=DEBUG formatter=custom_formatter args=('example.log', 'midnight', 1, 0) [formatter_custom_formatter] format=%(asctime)s - %(levelname)s - %(message)s ``` 2. 在Python代码中,使用`logging.config.fileConfig()`函数加载配置文件: ```python import logging import logging.config logging.config.fileConfig('logging.conf') logger = logging.getLogger('root') logger.debug('This is a debug message') logger.info('This is an info message') logger.warning('This is a warning message') logger.error('This is an error message') logger.critical('This is a critical message') ``` 在上述代码中,`logging.config.fileConfig()`函数会读取指定的配置文件,并根据配置文件中的内容进行日志配置配置文件中的`handler_custom_handler`部分定义了使用自定义的处理器类`CustomTimedRotatingFileHandler`,并将其应用于根日志记录器(`logger_root`)。 确保将`path.to.CustomTimedRotatingFileHandler`替换为实际的自定义处理器类的路径。同时,根据你的需求,可以在配置文件中调整处理器类的参数。 通过这种方式,你可以将自定义的处理器类与logging模块的配置机制相结合,灵活地配置和管理日志记录。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值