简介
Logging是python自带的模块,这个模块支持输出不同级别的日志,可以输出到控制台和写入文件,支持TCP、HTTP、GET/POST、SMTP、Socket等协议,将日志信息发送到网络等等。
Logging提供5个等级的输出,CRITICAL > ERROR > WARNING > INFO > DEBUG > NOTSET,如果把looger的级别设置为INFO, 那么小于INFO级别的日志都不输出, 大于等于INFO级别的日志都输出
logging库提供了多个组件:Logger、Handler、Filter、Formatter:
Logger 对象提供应用程序可直接使用的接口,供应用代码使用;
Handler 发送日志到适当的目的地;
Filter 提供了过滤日志信息的方法,控制输出;
Formatter 指定日志输出和显示的具体格式。
将日志同时输出到控制台和文件
添加彩色日志输出 pip3 install colorlog
添加日志滚动输出按天数切割
TimedRotatingFileHandler
代码
1 | import os |
控制台输出
文件输出
多进程python日志输出
上面代码logging是单进程 线程安全输出 如果在多进程情况下日志滚动切割日期会存在竞争问题
重写系统自带滚动日志doRollover 模块
fork : https://gist.github.com/tawateer/b33ff85bdcbe9cf1bcb1#file-parallel_timed_rotating_handler-py
1 |
|
logging.basicConfig()函数中的具体参数
- filename: 指定的文件名创建FiledHandler,这样日志会被存储在指定的文件中;
- filemode: 文件打开方式,在指定了filename时使用这个参数,默认值为“w”还可指定为“a”;
- format: 指定handler使用的日志显示格式;
- datefmt: 指定日期时间格式。, 格式参考strftime时间格式化,同time.strftime()
- level: 设置rootlogger的日志级别
- stream: 用指定的stream创建StreamHandler。可以指定输出到sys.stderr,
- sys.stdout或者文件,默认为sys.stderr。若同时列出了filename和stream两个参数,则stream参数会被忽略。
level: 设置日志级别,默认为logging.WARNING
级别|对应的值
-|-
CRITICAL|50
ERROR |40
WARNING |30
INFO |20
DEBUG |10
NOTSET |0
可以给日志对象(Logger Instance)设置日志级别,低于该级别的日志消息将会被忽略,也可以给Hanlder设置日志级别,对于低于该级别的日志消息, Handler也会忽略。
format参数中可能用到的格式化信息:
- | - |
---|---|
%(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 | 用户输出的消息 |
python中时间日期格式化符号:
- %y 两位数的年份表示(00-99)
- %Y 四位数的年份表示(000-9999)
- %m 月份(01-12)
- %d 月内中的一天(0-31)
- %H 24小时制小时数(0-23)
- %I 12小时制小时数(01-12)
- %M 分钟数(00=59)
- %S 秒(00-59)
- %a 本地简化星期名称
- %A 本地完整星期名称
- %b 本地简化的月份名称
- %B 本地完整的月份名称
- %c 本地相应的日期表示和时间表示
- %j 年内的一天(001-366)
- %p 本地A.M.或P.M.的等价符
- %U 一年中的星期数(00-53)星期天为星期的开始
- %w 星期(0-6),星期天为星期的开始
- %W 一年中的星期数(00-53)星期一为星期的开始
- %x 本地相应的日期表示
- %X 本地相应的时间表示
- %Z 当前时区的名称
- %% %号本身