如果我调用logging.config.dictconfig,则在初始化后正在更改记录器



我有2个记录器

logger = logger_setup.get_logger_setup(env, logger_name = 'root',  report_to_logging_service=report_to_logging_service)
print len(logger.handlers) # =3
auditor = logger_setup.get_logger_setup(env, logger_name = 'audit')
print len(logger.handlers) # =2

get_logger_setup内有

logging.config.dictConfig(my_logging_configs)

,如果我第二次不称呼它,则len(logger.handlers)仍然存在3.

在不同设置的情况下,我必须每次启动新的记录器时都会称呼它。

尝试深入复制copy.deepcopy(logger)以创建一个不会耦合到logging.config.dictConfig的单独对象,但由于它是一个复杂的对象,因此它错误。

想法?

您应该在A single dictConfig()调用中配置所有记录仪,处理程序,过滤器等。此页面具有许多示例配置,您可以用作起点。一个这样的(比您可能需要的还要复杂,但链接页面的示例更简单):

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'verbose': {
            'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s'
        },
        'simple': {
            'format': '%(levelname)s %(message)s'
        },
    },
    'filters': {
        'special': {
            '()': 'project.logging.SpecialFilter',
            'foo': 'bar',
        },
        'require_debug_true': {
            '()': 'django.utils.log.RequireDebugTrue',
        },
    },
    'handlers': {
        'console': {
            'level': 'INFO',
            'filters': ['require_debug_true'],
            'class': 'logging.StreamHandler',
            'formatter': 'simple'
        },
        'mail_admins': {
            'level': 'ERROR',
            'class': 'django.utils.log.AdminEmailHandler',
            'filters': ['special']
        }
    },
    'loggers': {
        'django': {
            'handlers': ['console'],
        },
        'django.request': {
            'handlers': ['mail_admins'],
            'level': 'ERROR',
            'propagate': False,
        },
        'myproject.custom': {
            'handlers': ['console', 'mail_admins'],
            'level': 'INFO',
            'filters': ['special']
        }
    }
}

在应用程序(即您的)代码中对dictConfig()进行调用 - 不应在您使用的任何库的代码中。如果他们中的任何一个正在进行日志记录配置之外,超出了Python文档中库的建议,则应与维护者提出问题以纠正此。

最新更新