Logging日志模块
版本
Python 2.7
Logging 0.5.1.2
简要介绍
Logging日志模块主要有这四部分组成
部分 |
描述 |
logger |
提供日志接口,在python代码中嵌入,进行配置或发送日志信息 |
handler |
将日志记录按照代码进行存储,如存入文件或者socket中 |
filter |
过滤日志记录后交给handler |
formatter |
指定日志记录的输出格式 |
日志输出屏幕
1 2 3 4 5 6
| import logging logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s: - %(message)s', datefmt='%Y-%m-%d %H:%M:%S', level=logging.DEBUG) logging.debug('debug msg') logging.info('info msg')
|
直接嵌入在目标代码中,将日志消息发送至屏幕,无需配置handler
日志输出文件
python代码实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| import logging import logging.handlers LOG_FILE = 'xxxx.log' handler = logging.handlers.RotatingFileHandler(LOG_FILE, maxBytes = 1024*1024) formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s: - %(message)s', datefmt='%Y-%m-%d %H:%M:%S') handler.setFormatter(formatter) logger = logging.getLogger('example') logger.addHandler(handler) logger.setLevel(logging.DEBUG) sh = logging.StreamHandler() sh.setLevel(logging.DEBUG) sh.setFormatter(formatter) logger.addHandler(sh) logger.info('test')
|
配置文件实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
| ### logger部分 # 如果name为loggers里面keys的值,则调用对应的配置,如果name没有则调用默认(root)的配置 # name 中用点 . 表示继承关系 # 可以有多个,以逗号隔开 [loggers] keys=root,xxxlogger # 实现logger对应的配置信息 # 必须是 logger_name name为loggers中key的值 # level 日志级别,级别有 DEBUG,INFO,WARNING,ERROR,CRITICAL # handlers 日志处理器,可以有多个 以逗号隔开 # qualname logger的名称,通过logging.getLogger(name)获取,这里的name便是qualname # 如果获取的logger 名称不存在,则调用默认(root)logger # propagate 是否继承符类的配置信息,0:否 1:是 [logger_root] level=debug handlers=consoleHandler qualname=root [logger_xxxlogger] level=INFO handlers=consoleHandler,fHandler qualname=xxxlogger propagete=0 ### handler部分 # 定义handler [handlers] keys=consoleHandler,fHandler # handlers的具体配置实现 # 必须是 handler_name name为handlers中key的值 # class为logging包里面的handler处理器,如果调用其他包的记得补全名字 # formatter 日志输入格式 # args handler相关参数 [handler_consoleHandler] class=StreamHandler level=INFO formatter=simpleFormatter args=(sys.stdout,) # 此处务必有','不然会炸 [handler_fHandler] class=FileHandler level=INFO formatter=simpleFormatter args=('xxxxError.txt','a') ### formatter部分 # 定义日志输出格式 [formatters] keys=simpleFormatter [formatter_simpleFormatter] format=%(levelname)s - %(name)s - %(asctime)s - %(module)s.%(funcName)s - %(message)s datefmt=%Y-%m-%d %H:%M:%S
|
日志的配置通常使用配置文件实现。
1 2 3 4 5 6 7 8
| import logging import logging.config logging.config.fileConfig('./logging.conf') logger = logging.getLogger('xxxlogger') logger.info('hello')
|
通过fileConfig读取文件配置即可,当然也可以使用 logging.config.dictConfig() ,可以以字典形式读取,十分适合json格式配置的文件.
日志级别
CRITICAL > ERROR > WARNING > INFO > DEBUG > NOTSET
如果设定了日志级别时,输出消息会输出大于等于该级别的日志,小于的级别会省略
常用的Handlers
名称 |
参数列表 |
描述 |
logging.StreamHandler |
StreamHandler([strm]) |
strm参数是一个文件对象。使用这个Handler可以向类似与sys.stdout或者sys.stderr的任何文件对象输出信息。 |
logging.FileHandler |
FileHandler(filename[,mode]) |
和StreamHandler类似,用于向一个文件输出日志信息。不过FileHandler会帮你打开这个文件。filename是文件名,必须指定一个文件名。mode是文件的打开方式。默认是’a’,即追加。 |
logging.handlers.RotatingFileHandler |
RotatingFileHandler(filename[, mode[, maxBytes[, backupCount]]]) |
这个Handler类似于上面的FileHandler,但是它可以管理文件大小。当文件达到一定大小之后,它会自动将当前日志文件改名,然后创建一个新的同名日志文件继续输出。maxBytes用于指定日志文件的最大文件大小。如果maxBytes为0,意味着日志文件可以无限大。backupCount用于指定保留的备份文件的个数,如果超出个数会删除旧文件。 |
logging.handlers.TimedRotatingFileHandler |
TimedRotatingFileHandler( filename [,when [,interval [,backupCount]]]) |
这个Handler和RotatingFileHandler类似,不过,它没有通过判断文件大小来决定何时重新创建日志文件,而是间隔一定时间就 自动创建新的日志文件。重命名的过程与RotatingFileHandler类似,不过新的文件不是附加数字,而是当前时间。 |
logging.handlers.SocketHandler |
|
TCP协议发送日志 |
logging.handlers.DatagramHandler |
|
UDP协议发送日志 |
logging.handlers.HTTPHandler |
|
HTTP协议发送日志 |
logging.handlers.SMTPHandler |
|
将日志通过SMTP协议发送邮件 |
常用的Forrmatters
参数 |
含义 |
%(name)s |
Logger的名字 |
%(levelno)s |
数字形式的日志级别 |
%(levelname)s |
文本形式的日志级别 |
%(pathname)s |
调用日志输出函数的模块的完整路径名,可能没有 |
%(filename)s |
调用日志输出函数的模块的文件名 |
%(module)s |
调用日志输出函数的模块名 |
%(funcName)s |
调用日志输出函数的函数名 |
%(lineno)d |
调用日志输出函数的语句所在的代码行 |
%(created)f |
当前时间,用UNIX标准的表示时间的浮点数表示 |
%(relativeCreated)d |
输出日志信息时的,自Logger创建以 来的毫秒数 |
%(asctime)s |
字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒 |
%(thread)d |
线程ID。可能没有 |
%(threadName)s |
线程名。可能没有 |
%(process)d |
进程ID。可能没有 |
%(message)s |
用户输出的消息 |
最后更新时间:
对本文内容有任何意见,建议,疑问etc,均可通过邮箱联系我,逗比博主尽最大努力回复O(∩_∩)O,如需转载(tan90°,不存在的(°Д°)),注明出处即可!