如何在Python中一处定义日志记录?

2024-06-02 11:24:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我是新Python,我想在一个地方用Python定义以下日志代码,以便它可以在其他Python文件(类或非类)中使用。对于Java,我们使用log4j或slf4j作为jar文件的一部分,我们只需定义为Logger logger = Logger.getLogger("class name"),我希望实现与此完全相同的效果,以便我可以在任何python模块中使用loger。目前,我在所有类中定义了配置

import logging
logging.basicConfig(
    level=logging.INFO,
    format="%(asctime)s [%(levelname)s] %(message)s",
    handlers=[
        logging.FileHandler("debug.log"),
        logging.StreamHandler()
    ]
)

我也通过了这个SO链接Using logging in multiple modules

另外,请为具有更多python文件的中大型项目推荐最推荐的方法


Tags: 文件代码name定义logging地方javalogger
2条回答

根据这个链接,作者提到了一个更好的做法。可能有更好的推荐方法。 你必须按以下方式做

  1. 定义链接中提到的logging.json文件
  2. 定义一个名为LogSetup.py的python文件,并在代码下面添加
def setup_logging(default_path='logging.json', default_level=logging.DEBUG, env_key='LOG_CFG'):
    """Setup logging configuration"""
    path = default_path
    value = os.getenv(env_key, None)
    if value:
        path = value
    if os.path.exists(path):
        with open(path, 'rt') as f:
            config = json.load(f)
        logging.config.dictConfig(config)
    else:
        logging.basicConfig(level=default_level)
  1. 在main方法中像这样调用上面的文件LogSetup.setup_logging()。 我在下面提供代码片段

logger=logging.getLogger(name

if __name__ == '__main__':
    LogSetup.setup_logging()
    logger.debug("This is a debug message ...")

这对我来说很好,其他人可能会推荐更好的方法

使日志处理程序在任何地方都可用的一个选项是将其设置为built-in identifier

a.py:

import logging
import builtins
logging.basicConfig(
    level=logging.INFO,
    format="%(asctime)s %(filename)s [%(levelname)s] %(message)s",
    handlers=[
        logging.FileHandler("/tmp/debug.log"),
        logging.StreamHandler()
    ]
)

builtins.logger = logging.getLogger(__name__)
logger.info("module a!")
import b

b.py:

logger.info(msg='This is from module b.py')

def foo():
    logger.info('Log message from b.foo()')

foo()

输出:

2020-02-14 20:18:17,549 a.py [INFO] module a!
2020-02-14 20:18:17,550 b.py [INFO] This is from module b.py
2020-02-14 20:18:17,550 b.py [INFO] Log message from b.foo()

相关问题 更多 >