import os
import logging
log_level = {
0: logging.DEBUG,
1: logging.INFO,
2: logging.WARNING,
3: logging.ERROR
}
def logger_config(log_path, logging_name, handler_level=1, console_level=3):
"""
配置log
:param _log_path:
:param console_level: 写入文件级别
:param handler_level: 输出级别
:param log_path: 输出log路径
:param logging_name: 记录中name,可随意
:return:
"""
"""
logger是日志对象,handler是流处理器,console是控制台输出(没有console也可以,将不会在控制台输出,会在日志文件中输出)
"""
handler_level = log_level[handler_level]
console_level = log_level[console_level]
# 获取logger对象,取名
logger = logging.getLogger(logging_name)
# 输出DEBUG及以上级别的信息,针对所有输出的第一层过滤
logger.setLevel(level=logging.DEBUG)
# 获取文件日志句柄并设置日志级别,第二层过滤
handler = logging.FileHandler(log_path, encoding='UTF-8')
handler.setLevel(handler_level)
# 生成并设置文件日志格式
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
# console相当于控制台输出,handler文件输出。获取流句柄并设置日志级别,第二层过滤
console = logging.StreamHandler()
console.setLevel(console_level)
# 为logger对象添加句柄
logger.addHandler(handler)
logger.addHandler(console)
return logger
class Logger:
def __init__(self, log_path, logging_name, handler_level=1, console_level=3):
handler_level = log_level[handler_level]
console_level = log_level[console_level]
# 获取logger对象,取名
self.logger = logging.getLogger(logging_name)
# 输出DEBUG及以上级别的信息,针对所有输出的第一层过滤
self.logger.setLevel(level=logging.DEBUG)
# 获取文件日志句柄并设置日志级别,第二层过滤
self.handler = logging.FileHandler(log_path, encoding='UTF-8')
self.handler.setLevel(handler_level)
# 生成并设置文件日志格式
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
self.handler.setFormatter(formatter)
# console相当于控制台输出,handler文件输出。获取流句柄并设置日志级别,第二层过滤
self.console = logging.StreamHandler()
self.console.setLevel(console_level)
def info(self, msg):
self.logger.addHandler(self.handler)
self.logger.addHandler(self.console)
self.logger.info(msg)
self.logger.removeHandler(self.handler)
self.logger.removeHandler(self.console)
def error(self, msg):
self.logger.addHandler(self.handler)
self.logger.addHandler(self.console)
self.logger.error(msg)
self.logger.removeHandler(self.handler)
self.logger.removeHandler(self.console)
if __name__ == '__main__':
# fun1
logger = logger_config(log_path="log.txt", logging_name='test')
logger.info('hjjhjhh')
logger = logger_config(log_path="log.txt", logging_name='test')
logger.info('hjjhjhh')
# fun2
# logger = Logger(log_path='test.log',logging_name='test')
# logger.info('mmjj')
#
# logger = Logger(log_path='test.log', logging_name='test')
# logger.info('mmjj')
第一种方式适合单进程,但是多开容易多次写入重复数据
第二种可以多开