# -*- coding:utf-8 -*-
import logging
import datetime
from concurrent_log_handler import ConcurrentRotatingFileHandler
logger = logging.getLogger()
# 设置此logger的最低日志级别,之后添加的Handler级别如果低于这个设置,则以这个设置为最低限制
logger.setLevel(logging.INFO) # logging.INFO
# 设置日志输出字符串格式 [日志时间] [日志等级] [文件名] [函数名] [行号] [日志内容]
log_formatter = logging.Formatter(
'[%(asctime)s] [%(levelname)s] [%(filename)s] [%(funcName)s] [%(lineno)d] %(message)s')
# 创建一个FileHandler,将日志输出到文件,采用ConcurrentRotatingFileHandler 防止并行输出缺失问题
log_file = '../Log/log-%s.log' % datetime.datetime.strftime(datetime.datetime.now(), '%Y-%m-%d')
file_handler = ConcurrentRotatingFileHandler(log_file, maxBytes=1024*1024*10, backupCount=10, encoding="utf-8")
# file_handler = logging.FileHandler(log_file, encoding="utf-8")
# 创建一个StreamHandler,将日志输出到控制台,默认输出到sys.stderr
stream_handler = logging.StreamHandler()
# 设置此Handler的最低日志级别
file_handler.setLevel(logging.WARNING) # logging.WARNING
stream_handler.setLevel(logging.INFO) # logging.INFO
# 设置此Handler的日志输出字符串格式
file_handler.setFormatter(log_formatter)
stream_handler.setFormatter(log_formatter)
# 将不同的Handler添加到logger中,日志就会同时输出到不同的Handler控制的输出中
# 注意如果此logger在之前使用basicConfig进行基础配置,因为basicConfig会自动创建一个Handler,所以此logger将会有3个Handler
# 会将日志同时输出到3个Handler控制的输出中
logger.addHandler(file_handler)
logger.addHandler(stream_handler)
run_log = logger
if __name__ == '__main__':
# 文件中将会输出WARNING及以上级别的日志
# 控制台将会输出INFO及以上级别的日志
logger.debug('This is a debug message!')
logger.info('This is a info message!')
logger.warning('This is a warning message!')
logger.error('This is a error message!')
logger.critical('This is a critical message!')
其他文件引用
from Tools.MyLog import run_log as logger
logger.debug('This is a debug message!')
logger.info('This is a info message!')
logger.warning('This is a warning message!')
logger.error('This is a error message!')
logger.critical('This is a critical message!')