python 日志记录控制台和文件输出包含重复消息
python Logging console and file output contains repeated message
我已经为 python-flask 项目实现了日志记录,为此我用代码创建了一个模块 logging_manager -
file_formatter = logging.Formatter(
'%(asctime)s - %(filename)s - %(funcName)s - %(lineno)i - %(levelname)s - %(message)s')
console_formatter = logging.Formatter(
'%(asctime)s - %(filename)s - %(funcName)s - %(lineno)i - %(levelname)s - %(message)s')
file_log_level = logging.DEBUG
console_log_level = logging.WARNING
root_logging_level = logging.INFO
logName = "main.log"
fileNamePrefix = settings.ROOT_DIR + '/logs/'
fileMaxBytes = 4e+6
backUpCount = 1
encoding = 'utf8'
def get_logger():
logger = logging.getLogger(logName)
filehandler = handlers.RotatingFileHandler(fileNamePrefix + logName,
maxBytes=fileMaxBytes, backupCount=backUpCount,
encoding=encoding)
filehandler.setFormatter(file_formatter)
filehandler.setLevel(file_log_level)
logger.addHandler(filehandler)
consolehandler = logging.StreamHandler(stream=sys.stdout)
consolehandler.setFormatter(console_formatter)
consolehandler.setLevel(console_log_level)
logger.addHandler(consolehandler)
logger.setLevel(root_logging_level)
return logger
并通过从 logging_manager 导入记录器在我的 python 脚本中使用它。
from logging_manager import get_logger
get_logger().error("wrong file type provided")
每次调用 get_logger 时都会向其添加一条额外的消息。
我的输出是(你可以看到重复)-
2019-10-09 13:42:35,591 - fabric_api.py - post - 32 - INFO - Fabric classification Model Triggered
2019-10-09 13:42:35,605 - fabric_api.py - post - 38 - INFO - Started processing file - 7c6d4400-e002-11e9-984e-a86daadb0edd.png
2019-10-09 13:42:35,605 - fabric_api.py - post - 38 - INFO - Started processing file - 7c6d4400-e002-11e9-984e-a86daadb0edd.png
2019-10-09 13:42:35,606 - fabric_api.py - post - 45 - INFO - saved image to location - E:70608755.6064117c6d4400-e002-11e9-984e-a86daadb0edd.png
2019-10-09 13:42:35,606 - fabric_api.py - post - 45 - INFO - saved image to location - E:70608755.6064117c6d4400-e002-11e9-984e-a86daadb0edd.png
2019-10-09 13:42:35,606 - fabric_api.py - post - 45 - INFO - saved image to location - E:70608755.6064117c6d4400-e002-11e9-984e-a86daadb0edd.png
2019-10-09 13:42:46,167 - fabric_api.py - post - 54 - INFO - Completed fabric detection with result - {'image': '7c6d4400-e002-11e9-984e-a86daadb0edd.png', 'confidence_score': '0.9986871', 'predicted_class': 'Cotton'}
2019-10-09 13:42:46,167 - fabric_api.py - post - 54 - INFO - Completed fabric detection with result - {'image': '7c6d4400-e002-11e9-984e-a86daadb0edd.png', 'confidence_score': '0.9986871', 'predicted_class': 'Cotton'}
2019-10-09 13:42:46,167 - fabric_api.py - post - 54 - INFO - Completed fabric detection with result - {'image': '7c6d4400-e002-11e9-984e-a86daadb0edd.png', 'confidence_score': '0.9986871', 'predicted_class': 'Cotton'}
2019-10-09 13:42:46,167 - fabric_api.py - post - 54 - INFO - Completed fabric detection with result - {'image': '7c6d4400-e002-11e9-984e-a86daadb0edd.png', 'confidence_score': '0.9986871', 'predicted_class': 'Cotton'}
我正在为这个项目使用 pycharm。
我在我的代码中发现了错误,我在 get_logger() 中初始化了记录器。因此,每次我调用此函数时,它都会一次又一次地创建一个新的记录器实例,并且我的消息会传递给每个记录器。
以下修改解决了我的问题-
logName = "main.log"
fileNamePrefix = settings.ROOT_DIR + '/logs/'
fileMaxBytes = 4e+6
backUpCount = 1
encoding = 'utf8'
logger = logging.getLogger(logName)
filehandler = handlers.RotatingFileHandler(fileNamePrefix + logName,
maxBytes=fileMaxBytes, backupCount=backUpCount,
encoding=encoding)
filehandler.setFormatter(file_formatter)
filehandler.setLevel(file_log_level)
logger.addHandler(filehandler)
consolehandler = logging.StreamHandler(stream=sys.stdout)
consolehandler.setFormatter(console_formatter)
consolehandler.setLevel(console_log_level)
logger.addHandler(consolehandler)
logger.setLevel(root_logging_level)
def get_logger():
return logger
我已经为 python-flask 项目实现了日志记录,为此我用代码创建了一个模块 logging_manager -
file_formatter = logging.Formatter(
'%(asctime)s - %(filename)s - %(funcName)s - %(lineno)i - %(levelname)s - %(message)s')
console_formatter = logging.Formatter(
'%(asctime)s - %(filename)s - %(funcName)s - %(lineno)i - %(levelname)s - %(message)s')
file_log_level = logging.DEBUG
console_log_level = logging.WARNING
root_logging_level = logging.INFO
logName = "main.log"
fileNamePrefix = settings.ROOT_DIR + '/logs/'
fileMaxBytes = 4e+6
backUpCount = 1
encoding = 'utf8'
def get_logger():
logger = logging.getLogger(logName)
filehandler = handlers.RotatingFileHandler(fileNamePrefix + logName,
maxBytes=fileMaxBytes, backupCount=backUpCount,
encoding=encoding)
filehandler.setFormatter(file_formatter)
filehandler.setLevel(file_log_level)
logger.addHandler(filehandler)
consolehandler = logging.StreamHandler(stream=sys.stdout)
consolehandler.setFormatter(console_formatter)
consolehandler.setLevel(console_log_level)
logger.addHandler(consolehandler)
logger.setLevel(root_logging_level)
return logger
并通过从 logging_manager 导入记录器在我的 python 脚本中使用它。
from logging_manager import get_logger
get_logger().error("wrong file type provided")
每次调用 get_logger 时都会向其添加一条额外的消息。
我的输出是(你可以看到重复)-
2019-10-09 13:42:35,591 - fabric_api.py - post - 32 - INFO - Fabric classification Model Triggered
2019-10-09 13:42:35,605 - fabric_api.py - post - 38 - INFO - Started processing file - 7c6d4400-e002-11e9-984e-a86daadb0edd.png
2019-10-09 13:42:35,605 - fabric_api.py - post - 38 - INFO - Started processing file - 7c6d4400-e002-11e9-984e-a86daadb0edd.png
2019-10-09 13:42:35,606 - fabric_api.py - post - 45 - INFO - saved image to location - E:70608755.6064117c6d4400-e002-11e9-984e-a86daadb0edd.png
2019-10-09 13:42:35,606 - fabric_api.py - post - 45 - INFO - saved image to location - E:70608755.6064117c6d4400-e002-11e9-984e-a86daadb0edd.png
2019-10-09 13:42:35,606 - fabric_api.py - post - 45 - INFO - saved image to location - E:70608755.6064117c6d4400-e002-11e9-984e-a86daadb0edd.png
2019-10-09 13:42:46,167 - fabric_api.py - post - 54 - INFO - Completed fabric detection with result - {'image': '7c6d4400-e002-11e9-984e-a86daadb0edd.png', 'confidence_score': '0.9986871', 'predicted_class': 'Cotton'}
2019-10-09 13:42:46,167 - fabric_api.py - post - 54 - INFO - Completed fabric detection with result - {'image': '7c6d4400-e002-11e9-984e-a86daadb0edd.png', 'confidence_score': '0.9986871', 'predicted_class': 'Cotton'}
2019-10-09 13:42:46,167 - fabric_api.py - post - 54 - INFO - Completed fabric detection with result - {'image': '7c6d4400-e002-11e9-984e-a86daadb0edd.png', 'confidence_score': '0.9986871', 'predicted_class': 'Cotton'}
2019-10-09 13:42:46,167 - fabric_api.py - post - 54 - INFO - Completed fabric detection with result - {'image': '7c6d4400-e002-11e9-984e-a86daadb0edd.png', 'confidence_score': '0.9986871', 'predicted_class': 'Cotton'}
我正在为这个项目使用 pycharm。
我在我的代码中发现了错误,我在 get_logger() 中初始化了记录器。因此,每次我调用此函数时,它都会一次又一次地创建一个新的记录器实例,并且我的消息会传递给每个记录器。
以下修改解决了我的问题-
logName = "main.log"
fileNamePrefix = settings.ROOT_DIR + '/logs/'
fileMaxBytes = 4e+6
backUpCount = 1
encoding = 'utf8'
logger = logging.getLogger(logName)
filehandler = handlers.RotatingFileHandler(fileNamePrefix + logName,
maxBytes=fileMaxBytes, backupCount=backUpCount,
encoding=encoding)
filehandler.setFormatter(file_formatter)
filehandler.setLevel(file_log_level)
logger.addHandler(filehandler)
consolehandler = logging.StreamHandler(stream=sys.stdout)
consolehandler.setFormatter(console_formatter)
consolehandler.setLevel(console_log_level)
logger.addHandler(consolehandler)
logger.setLevel(root_logging_level)
def get_logger():
return logger