Python logging入门

Python 内置的日志记录工具

配置

  • Level 日志级别
    • DEBUG
    • INFO
    • WARNING
    • ERROR
    • CRITICAL

基本使用

1
2
3
4
5
6
import logging

# 日志记录到./demo.log文件中,format指定日志格式
logging.basicConfig(filename='./demo.log', format='%(asctime)s %(message)s')

logging.warning('hello')

格式化

1
2
3
4
5
# 基础使用
logging.basicConfig(filename='./demo.log', format='%(asctime)s %(message)s')
# 记录器使用,配合Handler
formatter = logging.Formatter('%(asctime)s %(message)s')
handler.setFormatter(formaater)
格式 描述
%(asctime)s 表示人类易读的 LogRecord 生成时间。 默认形式为 ‘2003-07-08 16:49:45,896’ (逗号之后的数字为时间的毫秒部分)。
%(created)f LogRecord 被创建的时间(即 time.time() 的返回值)。
%(filename)s pathname 的文件名部分。
%(funcName)s 函数名包括调用日志记录.
%(levelname)s 消息文本记录级别('DEBUG''INFO''WARNING''ERROR''CRITICAL')。
%(levelno)s 消息数字的记录级别 (DEBUG, INFO, WARNING, ERROR, CRITICAL).
%(lineno)d 发出日志记录调用所在的源行号(如果可用)。
%(message)s 记入日志的消息,即 msg % args 的结果。 这是在发起调用 Formatter.format() 时设置的。
%(module)s 模块 (filename 的名称部分)。
%(msecs)d LogRecord 被创建的时间的毫秒部分。
%(name)s 用于记录调用的日志记录器名称。
%(pathname)s 发出日志记录调用的源文件的完整路径名(如果可用)。
%(process)d 进程ID(如果可用)
%(processName)s 进程名(如果可用)
%(relativeCreated)d 以毫秒数表示的 LogRecord 被创建的时间,即相对于 logging 模块被加载时间的差值。
%(thread)d 线程ID(如果可用)
%(threadName)s 线程名(如果可用)

文件日志

1
2
3
4
5
6
7
8
9
10
11
12
13
import logging

# 创建记录器对象
logger = logging.getLogger('log1')
# 创建文件处理器,指定日志文件
handler = logging.FileHandler('./demo.log')
# 格式器
formatter = logging.Formatter('%(asctime)s %(message)s')
handler.setFormatter(formatter)
logger.addHandler(handler)

logger.setLevel('INFO')
logger.error('hello error')

轮换日志(基于文件大小)

1
2
3
4
5
6
7
8
9
10
from logging.handlers import RotatingFileHandler
import logging

logger = logging.getLogger('log1')
# maxBytes 设置单个文件的最大值(单位:字节)
# backupCount 设置最多保留多少个备份文件
# maxBytes 和 backupCount 都必须同时设置才生效
# 以下配置会最多生成 demo.log demo.log.1 demo.log2 demo.log3 4个文件
handler = RotatingFileHandler('./demo.log', maxBytes=1024, backupCount=3)
logger.addHandler(handler)

轮换日志(基于日期)

1
2
3
4
5
6
7
8
9
from logging.handlers import TimedRotatingFileHandler
import logging

logger = logging.getLogger('log1')
# when 设置轮换间隔时间(midnight:午夜0点)
# backupCount 设置最多保留多少个备份文件
# 以下配置会每天生成新文件最多保留7天历史文件
handler = TimedRotatingFileHandler('./demo.log', when='midnight', backupCount=7)
logger.addHandler(handler)