gpt4 book ai didi

python - 如何为不同的 python 日志处理程序设置不同的级别

转载 作者:IT老高 更新时间:2023-10-28 20:27:37 25 4
gpt4 key购买 nike

我已经阅读了一些关于此的帖子,但我仍然感到困惑。我有这个日志记录设置:

import logging

class MongoHandler(logging.Handler):
def __init__(self):
logging.Handler.__init__(self)
from pymongo import Connection
self.db = Connection('db_server').db_name

def emit(self, record):
try:
self.db.Logging.save(record.__dict__)
except:
print 'Logging Error: Unable to save log entry to db'

mh = MongoHandler()
sh = logging.StreamHandler()
formatter = logging.Formatter('%(asctime)s - %(threadName)s - %(levelname)s - %(message)s')
sh.setFormatter(formatter)
log = logging.getLogger('DeviceMonitor_%s' % hostname)
log.addHandler(mh)
log.addHandler(sh)
log.setLevel(logging.INFO)

我希望能够为 StreamHandler 和 MongoHandler 设置不同的级别。这是可能的还是我需要第二个 Logger obj?

最佳答案

您可以为每个日志记录处理程序设置不同的日志记录级别,但您似乎必须将记录器的级别设置为“最低”。在下面的示例中,我将记录器设置为 DEBUG,将流处理程序设置为 INFO,将 TimedRotatingFileHandler 设置为 DEBUG。所以该文件有 DEBUG 条目,并且流只输出 INFO。您不能仅将 DEBUG 定向到一个处理程序,而仅将 INFO 定向到另一个处理程序。为此,您需要另一个记录器。

logger = logging.getLogger("mylog")
formatter = logging.Formatter(
'%(asctime)s | %(name)s | %(levelname)s: %(message)s')
logger.setLevel(logging.DEBUG)

stream_handler = logging.StreamHandler()
stream_handler.setLevel(logging.INFO)
stream_handler.setFormatter(formatter)

logFilePath = "my.log"
file_handler = logging.handlers.TimedRotatingFileHandler(
filename=logFilePath, when='midnight', backupCount=30)
file_handler.setFormatter(formatter)
file_handler.setLevel(logging.DEBUG)

logger.addHandler(file_handler)
logger.addHandler(stream_handler)

logger.info("Started");
try:
x = 14
y = 0
z = x / y
except Exception as ex:
logger.error("Operation failed.")
logger.debug(
"Encountered {0} when trying to perform calculation.".format(ex))

logger.info("Ended");

关于python - 如何为不同的 python 日志处理程序设置不同的级别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11111064/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com