Python 日志(logging)

参考:
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的日志时还是需要该方法来完成。

猜你喜欢

转载自blog.csdn.net/weixin_43650411/article/details/89103590
今日推荐