简体   繁体   English

基于某些条件的python日志记录

[英]python logging based on some condition

i am using python logging module to perfrom lots of logging in my application. 我正在使用python日志记录模块在我的应用程序中执行大量日志记录。 it works fine when i use different handlers to log to stdout and file . 当我使用其他处理程序登录到stdoutfile时,它工作正常。 my usecase is: on local testing log to stdout while on production deployment log to file insted of stdout. 我的用例是:将本地测试日志记录到标准输出,而将生产部署日志记录到标准输出的文件。

so i was lokking for some condition based log (ex; based on some environment variable value) if its local log to stdout otherwise file. 所以我在找一些基于条件的日志(例如,基于某些环境变量值),如果它的本地日志到stdout则另存为文件。

here is how i can achieve using two handlers: 这是我可以使用两个处理程序实现的方法:

logger = logging.getLogger("logging")
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)

I'm going to add some code to my initial commment: 我将在初始注释中添加一些代码:

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

if os.getenv("ENV_VAR_YOU_WANT"):
    handler = logging.StreamHandler()
    handler.setLevel(logging.INFO)
    handler.setFormatter(formatter)

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

logger.addHandler(handler)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM