logging模块的配置文件内容[1]
#logger.conf
#至少要有个root的logger
[loggers]
keys=root
[logger_root]
level=DEBUG
handlers=console,logfile
[handlers]
keys=console,logfile
#输出日志到控制台的类
[handler_console]
class=StreamHandler
level=DEBUG
formatter=normal
args=(sys.stderr,)
#设置单个日志文件的大小限制和日志文件个数限制,超过限制删掉老的日志文件,另有一个TimedRotatingFileHandler根据时间间隔设置文件和删掉老的文件
[handler_logfile]
class=handlers.RotatingFileHandler
level=DEBUG
formatter=normal
args=('logger.log','a',100*1024*1024,5)
[formatters]
keys=normal
[formatter_normal]
format=%(asctime)s - %(name)s - %(levelname)-9s - %(filename)-8s : %(lineno)s line - %(message)s
datefmt=%Y-%m-%d %H:%M:%S,注意,注释单独写一行,注释和root写一行,logging解析配置文件的时候会带root和注释一起读进去,认为不存在root的logger,报错:ValueError: list.remove(x): x not in list,在python文件里面这样调用配置
import logging.config as lc
import logging
lc.fileConfig('/home/tree/common/logger.conf')
logging.info('nihao')
日志等级可以分为5个,从低到高分别是:
1. DEBUG
2. INFO
3. WARNING
4. ERROR
5. CRITICAL
日志等级说明:
DEBUG:程序调试bug时使用
INFO:程序正常运行时使用
WARNING:程序未按预期运行时使用,但并不是错误,如:用户登录密码错误
ERROR:程序出错误时使用,如:IO操作失败
CRITICAL:特别严重的问题,导致程序不能再继续运行时使用,如:磁盘空间为空,一般很少使 用
默认的是WARNING等级,当在WARNING或WARNING之上等级的才记录日志信息。
跟上述相当功能效果的直接代码构造:
def init_log(log_path='logger.log'):
logging.getLogger('').setLevel(logging.INFO)
console=logging.StreamHandler(sys.stdout)
formatter=logging.Formatter('%(levelname)s %(asctime)s %(thread)d %(filename)s[line:%(lineno)d]: %(message)s')
console.setFormatter(formatter)
logging.getLogger('').addHandler(console)
rotating_file=RotatingFileHandler(log_path,'a',100*1024*1024,5)
rotating_file.setFormatter(formatter)
logging.getLogger('').addHandler(rotating_file)
logging的一些用法:增加logging的输出处理器,则输出会汇往所有创造的输出处理器,比如先是logging的输出记录文件有test.log,logging.info('1'),之后再创建logging内容输出到test1.log,logging.info('2'),则test.log里有1,2,test1.log有2。logging会登记本模块以及外部模块的函数的logging内容,不会管另一进程的logging的事情,我还没验证多线程下logging的登记规则。
参考链接:[1].python 的logging日志模块配合配置文件使用
Python logging 使用时报错:AttributeError: module ‘logging‘ has no attribute ‘config‘
logging日志的四个等级和使用
python logging 日志名称以及切割处理