Jusene's Blog

Python logging日志模块

字数统计: 748阅读时长: 3 min
2018/04/23 Share

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')

参考: http://python.jobbole.com/86887/

CATALOG
  1. 1. logging
  2. 2. 记录到日志文件
  3. 3. 终端日志输出
  4. 4. logging 配置
    1. 4.1. getlogger()
    2. 4.2. Formatter 日志格式
    3. 4.3. setLevel 日志级别
    4. 4.4. Handler 日志处理器
  5. 5. Configuration 配置方法
    1. 5.1. logging.basicConfig