Python logging日志模块
程序员文章站
2022-07-14 23:20:29
...
1.日志的级别
日志一共分成5个等级, 从低到高分别是:
1. DEBUG
2. INFO
3. WARNING
4. ERROR
5. CRITICAL
说明:
- DEBUG: 详细的信息,通常只出现在诊断问题上
- INFO: 确认一切按预期运行
- WARNING: 一个迹象表明,一些意想不到的事情发生了,或表明一些问题在不久的将来(例如。 磁盘空间低”)。 这个软件还能按预期工作。
- ERROR: 更严重的问题,软件没能执行一些功能
- CRITICAL: 一个严重的错误,这表明程序本身可能无法继续运行
这5个等级, 也分别对应5种打日志的方法: debug 、 info 、 warning 、 error 、 critical。 默认的是 WARNING, 当在WARNING或之上时才被跟踪。
2.日志的输出
2.1将日志输出到控制台
import logging
logging.basicConfig(level=logging.WARNING,format='%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s')
# 开始使用log功能
logging.info('这是 loggging info message')
logging.debug('这是 loggging debug message')
logging.warning('这是 loggging a warning message')
logging.error('这是 an loggging error message')
logging.critical('这是 loggging critical message')
输出结果:
2018-11-03 08:42:59,353 - 004-日志.py[line:6] - WARNING: 这是 loggging a warning message
2018-11-03 08:42:59,353 - 004-日志.py[line:7] - ERROR: 这是 an loggging error message
2018-11-03 08:42:59,353 - 004-日志.py[line:8] - CRITICAL: 这是 loggging critical message
2.2将日志输出到文件
import logging
logging.basicConfig(level=logging.WARNING,
filename='./log.txt', # 文件路径及文件名
filemode='w',
format='%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s')
# use logging
logging.info('这是 loggging info message')
logging.debug('这是 loggging debug message')
logging.warning('这是 loggging a warning message')
logging.error('这是 an loggging error message')
logging.critical('这是 loggging critical message')
输出结果:
在文件名下生成log.txt,内容与上面相同
2.3将日志输出到控制台和文件(重点)
需要用到Logger 的对象 ,具体代码如下:
import logging
# 第一步, 创建一个logger
logger = logging.getLogger()
logger.setLevel(logging.INFO) # Log等级总开关
# 第二步, 创建一个handler, 用于写入日志文件
logfile = './log.txt'
fh = logging.FileHandler(logfile, mode='a') # open的打开模式这里可以进行参考
fh.setLevel(logging.DEBUG) # 输出到file的log等级的开关
# 第三步, 再创建一个handler, 用于输出到控制台
ch = logging.StreamHandler()
ch.setLevel(logging.WARNING) # 输出到console的log等级的开关
# 第四步, 定义handler的输出格式
formatter = logging.Formatter("%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s")
fh.setFormatter(formatter) # 文件
ch.setFormatter(formatter) # 控制台
# 第五步, 将logger添加到handler里面
logger.addHandler(fh)
logger.addHandler(ch)
# 日志
logger.debug('这是 logger debug message')
logger.info('这是 logger info message')
logger.warning('这是 logger warning message')
logger.error('这是 logger error message')
logger.critical('这是 logger critical message')
输出结果
""""控制台""""
2018-11-03 14:25:53,887 - 004-日志.py[line:53] - WARNING: 这是 logger warning message
2018-11-03 14:25:53,887 - 004-日志.py[line:54] - ERROR: 这是 logger error message
2018-11-03 14:25:53,887 - 004-日志.py[line:55] - CRITICAL: 这是 logger critical message
""" 文件 """
2018-11-03 14:25:53,887 - 004-日志.py[line:52] - INFO: 这是 logger info message
2018-11-03 14:25:53,887 - 004-日志.py[line:53] - WARNING: 这是 logger warning message
2018-11-03 14:25:53,887 - 004-日志.py[line:54] - ERROR: 这是 logger error message
2018-11-03 14:25:53,887 - 004-日志.py[line:55] - CRITICAL: 这是 logger critical message
3. 日志格式说明
logging.basicConfig函数中, 可以指定日志的输出格式format, 这个参数可以输出很多有用的信 息, 如下:
- %(levelno)s: 打印日志级别的数值
- %(levelname)s: 打印日志级别名称
- %(pathname)s: 打印当前执行程序的路径, 其实就是sys.argv[0]
- %(filename)s: 打印当前执行程序名
- %(funcName)s: 打印日志的当前函数
- %(lineno)d: 打印日志的当前行号
- %(asctime)s: 打印日志的时间
- %(thread)d: 打印线程ID
- %(threadName)s: 打印线程名称
- %(process)d: 打印进程ID
- %(message)s: 打印日志信息
在工作中给的常用格式如下: (重点)
format='%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s'
这个格式可以输出日志的打印时间, 是哪个模块输出的, 输出的日志级别是什么, 以及输入的日志 内容。