自定义外部/第三方库的日志记录

gue*_*tli 12 python django logging

我遵循了django文档的建议,并使用这样的日志记录:

import logging
logger = logging.getLogger(__name__)

def today(...):
    logger.info('Sun is shining, the weather is sweet')
Run Code Online (Sandbox Code Playgroud)

使用我当前的配置,输出如下所示:

2016-08-11 14:54:06 mylib.foo.today: INFO Sun is shining, the weather is sweet
Run Code Online (Sandbox Code Playgroud)

不幸的是,我无法修改的一些库使用这样的日志记录:

import logging

def third_party(...):
    logging.info('Make you want to move your dancing feet')
Run Code Online (Sandbox Code Playgroud)

不幸的是,输出看起来像这样:

2016-08-09 08:28:04 root.third_party: INFO Make you want to move your dancing feet
Run Code Online (Sandbox Code Playgroud)

我想看到这个:

2016-08-09 08:28:04 other_lib.some_file.third_party: INFO Make you want to move your dancing feet
Run Code Online (Sandbox Code Playgroud)

区别:

root.third_party ==> other_lib.some_file.third_party

root如果代码使用logging.info()而不是,我希望看到长版本(不是)logger.info()

更新

这不是Django中Python登录优雅设置的重复,因为它的解决方案是:

开始报价

在每个模块中,我使用定义记录器

logger = logging.getLogger(__name__)
Run Code Online (Sandbox Code Playgroud)

报价结束.

不,我不会修改使用的第三方代码而logging.info()不是logger.info().

跟进问题

避免logger=logging.getLogger(__name__)不用丢失过滤日志的方法

小智 4

正如 Wayne Werner 所建议的,我将使用日志记录格式选项。这是一个例子。

文件一:external_module

import logging
def third_party():
    logging.basicConfig(level=logging.DEBUG)
    logger = logging.getLogger()

    logger.info("Hello from %s!"%__name__)
Run Code Online (Sandbox Code Playgroud)

文件2:main

import external_module
import logging

logging.basicConfig(level=logging.DEBUG,
                    format='%(asctime)s %(module)s.%(funcName)s: %(levelname)s %(message)s')
logger = logging.getLogger(__name__)

def cmd():
    logger.info("Hello from %s!"%__name__)
    external_module.third_party()
cmd()
Run Code Online (Sandbox Code Playgroud)

输出:

2016-08-11 09:18:17,993 main.cmd: INFO Hello from __main__!
2016-08-11 09:18:17,993 external_module.third_party(): INFO Hello from external_module!
Run Code Online (Sandbox Code Playgroud)