簡體   English   中英

如果我調用logging.config.dictConfig,記錄器將在初始化后發生更改

[英]logger is changing after init if I call 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耦合,但由於它是一個復雜的對象而會出錯。

想法?

您應該在單個 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文檔中對庫的建議,那么其維護者應提出問題以糾正此問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM