目录
日志级别
四个组件
记录器
处理器
处理器
格式化器
格式
用法1:小项目可以采用编程的方法
用法2:建议采用配置文件的方式
用法3: 字典配置
日志级别
#默认的日志输出为warning
# 使用baseConfig() 来指定日志输出级别
# 同时,是可以存入log文件 默认追加模式
# filemode='w' 每次重写日志文件
logging.basicConfig(filename='demo.log', filemode='w', level=logging.DEBUG)
logging.debug("")
logging.info("")
logging.waring("")
logging.error("")
logging.critical("")
定义日志输出的格式
场景:输出格式和添加一些公共信息
# message为原本要输出的信息
# asctime 时间
# levelname 日志等级
# filename 文件名
# lineno 行号
# datefmt 时间格式
logging.basicConfig(format="%(asctime)s|%(levelname)s|%(filename)s:%(lineno)s|%(message)s",
datefmt="%Y-%m-%d %H:%M:%S",
, level=logging.DEBUG)
四个组件
记录器
处理器
处理器
格式化器
格式
用法1:小项目可以采用编程的方法
# 记录器
logger = logging.getLogger()
# 默认为root
logger = logging.getLogger('applog') #设置一个名为applog的记录器
logger.setLevel(logging.DEBUG)
# 处理器
consoleHandler = logging.StreamHandler()
consoleHandler.setLevel(logging.DEBUG)
# 不指定Handler的日志级别,默认使用记录器的
# 记录器里面的日志级别优先级最高,如想要不同Handler里面的日志级别不一样,就要将记录器的日志级别设置成Handler里面的最低的等级
fileHandle = logging.FileHandler(filename='addDemo.log')
# 格式化器
formatter = logging.Formatter("%(asctime)s|%(levelname)-8s|%(filename)10s:%(lineno)4s|%(message)s")
# 给处理器设置格式
consoleHandler.setFormatter(formatter)
fileHandler.setFormatter(formatter)
# 记录器要设置处理器
logger.addHandler(consoleHandler)
logger.addHandler(fileHandler)
# 设置过滤器
# 命名空间以cn.guitu开头的才符合要求
flt = logging.Filter("cn.guitu")
# 关联过滤器
logger.addFilter(flt)
fileHandler.addFilter(flt)
# 打印日志代码 用记录器
logger.debug("")
logger.info("")
用法2:建议采用配置文件的方式
logging.conf
[loggers]
keys=root,applog
[handlers]
keys=fileHandler, consoleHandler
[formatter]
keys=simpleFormatter
[logger_root]
level=DEBUG
handlers=consoleHandler
[logger_applog]
level=DEBUG
handlers=fileHander, consoleHandler
qualname=applog #
propagate=0
[handler_consoleHandler]
class=StreamHandler
args=(sys.stdout,)
level=DEBUG
formatter=simpleFormatter
[handler_fileHandler]
class=handlers.TimeRotatingFileHandler
arg=('applog.log', 'midnight', 1,0) #每天午夜十二点生成新的日志文件
# 1 是午夜十二点向后延时1秒后开始备份,0代表不被删除 可设置保留时间 单位为s
level=DEBUG
formatter=simpleFormatter
[formatter_simpleFormatter]
format=format=%(asctime)s|%(levelname)s|%(filename)s:%(lineno)s|%(message)s
datefmt=%Y-%m-%d %H:%M:%S
使用配置文件
import logging
import logging.config
logging.config.fileConfig('logging.conf')
rootLogger = logging.getLogger()
logger = logging.getLogger('applog')
rootLogger.info("")
logger.debug("")
a = 'abc'
try:
int(a)
except Exception as e:
# logger.error(e)
logger.exception(e)
用法3: 字典配置
可以从数据库,配置文件读入,只要将输出接口的格式变成字典(json,xml)
来源:
Python基础之标准库logging 你还在用print来调试程序吗,OUT啦_哔哩哔哩_bilibili