简介
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 当前时区的名称
- %% %号本身