参考:
1.logging 基础
2.logging 初始化小坑
logging日志默认等级为warning,调用时一次性初始化配置,后续修改无效;
3.logging 配置日志
- 初始化及使用logging提供的模块级函数记录日志
– 1.
– 2.
# '%(levelname)s:%(name)s:%(message)s'
LOG_FORMAT = "%(asctime)s - %(levelname)s - %(message)s"
logging.basicConfig(filename='fergus.log', level=logging.DEBUG,
format=LOG_FORMAT)
logging.debug('debug')
logging.info('info')
logging.warning('warning')
logging.error('error')
logging.critical('critical')
# 控制台无输出,代码所在目录下生成相应日志文件;
# 代码运行日志会给持续追加写入
#
2019-04-12 12:08:53,306 - DEBUG - debug
2019-04-12 12:08:53,308 - INFO - info
2019-04-12 12:08:53,308 - WARNING - warning
2019-04-12 12:08:53,308 - ERROR - error
2019-04-12 12:08:53,308 - CRITICAL - critical
– 3
import logging
LOG_FORMAT = '%(asctime)s - %(levelname)s - %(message)s'
DATE_FORMAT = '%m-%d-%Y %H:%M:%S %p'
logging.basicConfig(filename='fergus.log', level=logging.DEBUG,
format=LOG_FORMAT, datefmt=DATE_FORMAT)
# logging.debug(msg, *args, **kws)
# msg
#
logging.debug('debug')
logging.info('info')
logging.warning('warning')
logging.error('error')
logging.critical('critical')
# 如需包含变量数据
# *args
#
logging.debug('%s is %s years old.', 'Tom', 10)
# **kw
# 由于版本原因,version 0.5.1.2 logging.debug的参数中无参考1中参数(stack_info)
# exc_info:异常写入日志;无则 NONE TYPE;
# extra;
#
import logging
LOG_FORMAT = '%(asctime)s - %(levelname)s - %(user)s[%(ip)s] - %(message)s'
DATE_FORMAT = '%m-%d-%Y %H:%M:%S %p'
logging.basicConfig(filename='fergus.log', format=LOG_FORMAT,
datefmt=DATE_FORMAT)
logging.warning('some on delete the log file.', exc_info=True,
extra={'user':'Tom', 'ip':'47.98.53.222'})
# OUTPUT
04-12-2019 13:42:24 PM - DEBUG - debug
04-12-2019 13:42:24 PM - INFO - info
04-12-2019 13:42:24 PM - WARNING - warning
04-12-2019 13:42:24 PM - ERROR - error
04-12-2019 13:42:24 PM - CRITICAL - critical
04-12-2019 13:44:59 PM - DEBUG - Tom is 10 years old.
04-12-2019 14:29:35 PM - WARNING - Tom[47.98.53.222] - some on delete the log file.
NoneType: None
– 4. version 0.5.1.2 日志级别参数截图
- 使用logging四大组件记录/处理日志
– 详细解析见参考1
'日志模块 logging'
import logging
import logging.handlers
import datetime
logger = logging.getLogger('mylogger')
logger.setLevel(logging.DEBUG)
rf_handler = logging.handlers.TimedRotatingFileHandler(
'all.log', when='midnight', interval=1,
backupCount=7, atTime=datetime.time(0, 0, 0, 0))
rf_handler.setFormatter(logging.Formatter(
'%(asctime)s - %(levelname)s - %(message)s'))
f_handler = logging.FileHandler('error.log')
f_handler.setLevel(logging.ERROR)
f_handler.setFormatter(logging.Formatter(
'''%(asctime)s - %(levelname)s -
%(filename)s[:%(lineno)d] - %(message)s'''))
logger.addHandler(rf_handler)
logger.addHandler(f_handler)
logger.debug('debug')
logger.info('info')
logger.warning('warning')
logger.error('error')
logger.critical('critical')
logger.exception('exception')
- Tips:
– 1.日志级别的指定通常都是在应用程序的配置文件中进行指定的;
– 2.输出一条日志时,日志内容和日志级别是需要明确指定。其它字段信息,只需要是否显示在日志中即可;
– 3.Logger.exception()与Logger.error()的区别在于:Logger.exception()将会输出堆栈追踪信息,另外通常只是在一个exception handler中调用该方法。
– 4.Logger.log()与Logger.debug()等方法相比,虽然需要多传一个level参数,显得不是那么方便,但是当需要记录自定义level的日志时还是需要该方法来完成。