
logging模块用于python的日志记录
不进行配置时,默认日志级别为warning
1 2 3 4 5 6
|
import logging logging.debug("1") logging.info("2") logging.warning("3") logging.error("4") logging.critical("5")
|
输出内容:
1 2 3
|
WARNING:root:3 ERROR:root:4 CRITICAL:root:5
|
可以通过logging.basicConfig更改配置:
- level: 日志级别(DEBUG、INFO、WARNING、ERROR、CRITICAL)
- format: 输出格式
- %(levelno)s: 日志级别数值
- %(levelname)s: 日志级别名称
- %(pathname)s: 执行的程序路径
- %(filename)s: 执行文件名
- %(funcName)s: 打印日志的函数
- %(lineno)d: 行号
- %(asctime)s: 时间
- %(thread)d: 线程ID
- %(threadName)s: 线程名称
- %(process)d: 进程ID
- %(message)s: 日志信息
- datefmt: 时间格式(%Y %b %d %a %H %M %S)(年、月、日、星期、时、分、秒)
- filename: 日志文件名
- filemode: ‘w’或者’a’
1 2 3 4 5 6 7 8
|
logging.basicConfig( level=logging.DEBUG, format='%(asctime)s.%(filename)s[line:%(lineno)d] %(levelname)s %(message)s', datefmt='%a, %d, %b, %Y, %H:%M:%S', filename=os.path.join(os.path.dirname(__file__), time.strftime('%Y-%m-%d', time.localtime())), filemode='w' )
|
输出到屏幕
定义一个StreamHandler,将日志打印到屏幕,添加到当前日志处理对象。
1 2 3 4 5
|
logging_handler = logging.StreamHandler() logging_handler.setLevel(logging.DEBUG) logging_handler.setFormatter(logging.Formatter( '%(asctime)s.%(filename)s[line:%(lineno)d] %(levelname)s %(message)s')) logging.getLogger('').addHandler(logging_handler)
|
日志回滚
限制每个日志文件大小最多1K(1024),最多备份五个日志文件,命名为my.log、my.log1~5,实际上一共6个文件,最新的为my.log,最旧的为my.log5
1 2 3 4 5 6
|
logging_handler2 = logging.handlers.RotatingFileHandler('my.log', maxBytes=1024, backupCount=5) logging_handler2.setLevel(logging.DEBUG) logging_handler2.setFormatter(logging.Formatter( '%(asctime)s.%(filename)s[line:%(lineno)d] %(levelname)s %(message)s' )) logging.getLogger('').addHandler(logging_handler2)
|
常用配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
if not os.path.exists(os.path.join(os.path.dirname(file), 'log')): os.makedirs(os.path.join(os.path.dirname(file), 'log'))
root_logger = logging.getLogger('') root_logger.setLevel(logging.INFO)
log_format = logging.Formatter('%(asctime)s.%(filename)s[line:%(lineno)d] %(levelname)s %(message)s')
stream_handler = logging.StreamHandler() stream_handler.setFormatter(log_format) root_logger.addHandler(stream_handler)
logging_handler = logging.handlers.RotatingFileHandler( os.path.join(os.path.dirname(file), 'log', 'log.txt'), maxBytes=10240000, backupCount=5, encoding='UTF-8' ) logging_handler.setLevel(logging.INFO) logging_handler.setFormatter(log_format) root_logger.addHandler(logging_handler)
|
参考
近期评论