logging
最近想要自己写点小工具,用python中的logging模块来记录下日志,这里自己做下记录。
记录到日志文件
1 | import logging |
2 | |
3 | # 获取logger实例,如果没参数则返回root |
4 | logger = logging.getLogger('App') |
5 | |
6 | # 指定logger输出格式 |
7 | formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s: %(message)s') |
8 | |
9 | # 文件日志 |
10 | file_handler = logging.FileHandler('example.log') |
11 | file_handler.setFormatter(formatter) |
12 | |
13 | # 为logger添加日志处理器 |
14 | logger.addHandler(file_handler) |
15 | |
16 | # 指定日志的最低输出级别,默认为WARNING级别 |
17 | logger.setLevel(logging.INFO) |
18 | |
19 | # 输出日志 |
20 | logger.info('info message') |
终端日志输出
1 | import logging |
2 | |
3 | # 获取logger实例,如果没参数则返回root |
4 | logger = logging.getLogger('App') |
5 | |
6 | # 指定logger输出格式 |
7 | formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s: %(message)s') |
8 | |
9 | # 终端日志 |
10 | console_handler = logging.StreamHandler() |
11 | console_handler.setFormatter(formatter) |
12 | |
13 | # 为logger添加日志处理器 |
14 | logger.addHandler(console_handler) |
15 | |
16 | # 指定日志的最低输出级别,默认为WARNING级别 |
17 | logger.setLevel(logging.INFO) |
18 | |
19 | # 输出日志 |
20 | logger.info('info message') |
logging 配置
getlogger()
这是基本的入口,该方法参数为空,默认的logger名称为root,我们可以通过日志的名称命名来区分同一个程序的不同模块。
Formatter 日志格式
Formatter对象定义了log信息的结构和内容,构造时需要两个参数:
- 一个是默认的模版fmt,默认会包含最基本的level和message信息
- 一个是格式化的时间样式datefmt,默认%Y-m%-%d %H:%M:%S
fmt中允许使用的变量可以参考:
- %(name)s Logger的名字
- %(levelno)s 数字形式的日志级别
- %(levelname)s 文本形式的日志级别
- %(pathname)s 调用日志输出函数的模块的完整路径名
- %(filename)s 调用日志输出函数的模块的文件名
- %(modules)s 调用日志输出函数的模块名
- %(funcname)s 调用日志输出函数的函数名
- %(lineno)d 调用日志输出函数的语句所在的代码行
- %(create)f 当前时间,用UNIX标准的表示时间的浮点数表示
- %(relativeCreated)d 输出日志信息时的,自logger创建以来的毫秒数
- %(asctime)s 字符形式的当前时间
- %(thread)d 线程id
- %(threadName)s 线程名
- %(process)d 进程id
- %(message)s 用户输出的消息
setLevel 日志级别
logging有如下级别:DEBUG,INFO,WARNING,ERROR,CRITICAL
默认级别是WARNING,logging模块只会输出指定level以上的log。
Handler 日志处理器
最常用的是StreamHandler和FileHandler,Handler还有很多应用于不同端的log。
- StreamHandler instances send error messages to streams (file-like objects).
- FileHandler instances send error messages to disk files.
- RotatingFileHandler instances send error messages to disk files, with support for maximum log file sizes and log file rotation.
- TimedRotatingFileHandler instances send error messages to disk files, rotating the log file at certain timed intervals.
- SocketHandler instances send error messages to TCP/IP sockets.
- DatagramHandler instances send error messages to UDP sockets.
- SMTPHandler instances send error messages to a designated email address.
Configuration 配置方法
logging.basicConfig
basicConfig()提供非常便捷的方式可以让logging模块马上开始使用
1 | import logging |
2 | |
3 | logging.basicConfig(filename='example.log',level=logging.DEBUG) |
4 | logging.debug('debug message') |
5 | |
6 | logging.basicConfig(format='%(levelname)s:%(message)s',level=logging.DEBUG) |
7 | logging.debug('debug message') |