Python 其中是logging.config.dictConfig的完整示例?
我想使用,但文档有点抽象。我在哪里可以找到一个具体的、可复制+粘贴的、与dictConfig一起使用的词典示例?在这里如何!相应的文档参考是 用法:Python 其中是logging.config.dictConfig的完整示例?,python,logging,python-logging,Python,Logging,Python Logging,我想使用,但文档有点抽象。我在哪里可以找到一个具体的、可复制+粘贴的、与dictConfig一起使用的词典示例?在这里如何!相应的文档参考是 用法: import logging.config # Run once at startup: logging.config.dictConfig(LOGGING_CONFIG) # Include in each module: log = logging.getLogger(__name__) log.debug("Logging is
import logging.config
# Run once at startup:
logging.config.dictConfig(LOGGING_CONFIG)
# Include in each module:
log = logging.getLogger(__name__)
log.debug("Logging is configured.")
如果您看到来自第三方软件包的日志过多,请确保在导入第三方软件包之前使用logging.config.dictConfig(logging\u config)
运行此配置
< >使用日志过滤器添加每个自定义消息到每个日志消息中,考虑.< /P> < P>所接受的答案是好的!但如果一个人可以从不那么复杂的事情开始呢?日志模块是非常强大的东西,文档有点难以理解,特别是对于新手来说。但在开始时,您不需要配置格式化程序和处理程序。当你弄清楚你想要什么时,你可以添加它 例如:
import logging.config
DEFAULT_LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'loggers': {
'': {
'level': 'INFO',
},
'another.module': {
'level': 'DEBUG',
},
}
}
logging.config.dictConfig(DEFAULT_LOGGING)
logging.info('Hello, log')
我在下面找到了默认配置,希望能有所帮助
DEFAULT_LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'filters': {
'require_debug_false': {
'()': 'django.utils.log.RequireDebugFalse',
},
'require_debug_true': {
'()': 'django.utils.log.RequireDebugTrue',
},
},
'formatters': {
'django.server': {
'()': 'django.utils.log.ServerFormatter',
'format': '[%(server_time)s] %(message)s',
}
},
'handlers': {
'console': {
'level': 'INFO',
'filters': ['require_debug_true'],
'class': 'logging.StreamHandler',
},
'django.server': {
'level': 'INFO',
'class': 'logging.StreamHandler',
'formatter': 'django.server',
},
'mail_admins': {
'level': 'ERROR',
'filters': ['require_debug_false'],
'class': 'django.utils.log.AdminEmailHandler'
}
},
'loggers': {
'django': {
'handlers': ['console', 'mail_admins'],
'level': 'INFO',
},
'django.server': {
'handlers': ['django.server'],
'level': 'INFO',
'propagate': False,
},
}
}
流处理程序、文件处理程序、旋转文件处理程序和SMTP处理程序的示例
from logging.config import dictConfig
LOGGING_CONFIG = {
'version': 1,
'loggers': {
'': { # root logger
'level': 'NOTSET',
'handlers': ['debug_console_handler', 'info_rotating_file_handler', 'error_file_handler', 'critical_mail_handler'],
},
'my.package': {
'level': 'WARNING',
'propagate': False,
'handlers': ['info_rotating_file_handler', 'error_file_handler' ],
},
},
'handlers': {
'debug_console_handler': {
'level': 'DEBUG',
'formatter': 'info',
'class': 'logging.StreamHandler',
'stream': 'ext://sys.stdout',
},
'info_rotating_file_handler': {
'level': 'INFO',
'formatter': 'info',
'class': 'logging.handlers.RotatingFileHandler',
'filename': 'info.log',
'mode': 'a',
'maxBytes': 1048576,
'backupCount': 10
},
'error_file_handler': {
'level': 'WARNING',
'formatter': 'error',
'class': 'logging.FileHandler',
'filename': 'error.log',
'mode': 'a',
},
'critical_mail_handler': {
'level': 'CRITICAL',
'formatter': 'error',
'class': 'logging.handlers.SMTPHandler',
'mailhost' : 'localhost',
'fromaddr': 'monitoring@domain.com',
'toaddrs': ['dev@domain.com', 'qa@domain.com'],
'subject': 'Critical error with application name'
}
},
'formatters': {
'info': {
'format': '%(asctime)s-%(levelname)s-%(name)s::%(module)s|%(lineno)s:: %(message)s'
},
'error': {
'format': '%(asctime)s-%(levelname)s-%(name)s-%(process)d::%(module)s|%(lineno)s:: %(message)s'
},
},
}
dictConfig(LOGGING_CONFIG)
这里有一个更新的示例,说明如何在中声明logging.config.dictConfig()。从该cookbook链接向上滚动查看dictConfig()的用法 下面是一个使用StreamHandler和定制的and来记录stdout和“logs”子目录的示例用例
从os.path导入abspath、dirname、join
导入日志记录
从logging.config导入dictConfig
base_dir=abspath(dirname(_文件__;))
logs\u target=join(base\u dir+“\logs”,“python\u logs.log”)
日志记录\u模式={
#始终为1。模式版本控制可能会添加到日志记录的未来版本中
“版本”:1,
#“格式化程序名称”:{formatter Config Dict}
“格式化程序”:{
#格式化程序名称
“标准”:{
#类始终为“logging.Formatter”
“类”:“logging.Formatter”,
#可选:日志输出格式
“格式”:“%(asctime)s\t%(levelname)s\t%(文件名)s\t%(消息)s”,
#可选:asctime格式
datefmt:“%d%b%y%H:%M:%S”
}
},
#处理程序使用上面声明的格式化程序名称
“处理程序”:{
#处理程序名称
“控制台”:{
#logger.config()和logging.config.dictConfig()的混合类
#记录器类特定的关键字参数(KWARG)在此处传递。
“类”:“logging.StreamHandler”,
#这是上面声明的格式化程序名称
“格式化程序”:“标准”,
“级别”:“信息”,
#默认值是stderr
“流”:ext://sys.stdout"
},
#与上面的StreamHandler示例相同,但具有不同的
#特定于处理程序的KWARG。
“文件”:{
“类”:“logging.handlers.RotatingFileHandler”,
“格式化程序”:“标准”,
“级别”:“信息”,
“文件名”:日志\u目标,
“模式”:“a”,
“编码”:“utf-8”,
“最大字节数”:500000,
“备份数量”:4
}
},
#记录器使用上面声明的处理程序名称
“伐木工人”:{
“uuu main”:{#如果uuuu name_uuuuu==”uuuuu main_uuuuu“
#即使使用了一个处理程序,也要使用列表
“处理程序”:[“控制台”,“文件”],
“级别”:“信息”,
“传播”:假
}
},
#只是根记录器的独立kwarg
“根”:{
“级别”:“信息”,
“处理程序”:[“文件”]
}
}
日志记录
dictConfig(日志记录模式)
如果名称=“\uuuuu main\uuuuuuuu”:
logging.info(“测试信息日志条目”)
logging.warning(“测试警告日志条目”)
在字典的顶层有一个指定
根记录器的替代位置。如中所述,当两者都存在时,它优先于['loggers'][''']
,但在我看来,['loggers']['']
更符合逻辑。另请参见讨论python logging.config文档中所有这些简洁、漂亮的YAML代码片段都无法直接读取。真糟糕,这不是django特有的吗?如果我正在使用一个不同的框架(烧瓶、瓶子等),或者甚至没有在web应用程序上工作,那该怎么办?使用'disable\u existing\u loggers'(禁用现有的\u loggers):False
感觉像是一个骗局,因为您可能没有对它进行整体配置,但可能会重用已有的东西。。如果将其设置为True
,则我似乎没有得到任何输出。可恢复的错误如何?错误不应出现在标准输出中。它只用于程序输出。至少在我的例子中,这是一个更相关/有用的例子。正是最后一次logging.info('Hello,log')
让我觉得很顺心。文档中的混乱之处在于,使用dictConfig,我们不再需要执行getLogger
或任何这些操作。@Theothe您能解释一下空键'':{'level':'INFO'…
,以及为什么没有它它它就不能工作吗(例如,当将空白值更改为一个有效值,如<代码>标准<代码> @ MikWielsMs:尽管如此,仍然可以调用<代码> GETROGGER()。
如果需要多个具有不同名称的记录器。这些记录器中的每一个都从根记录器继承配置。@MikeWilliamsongetLogger
始终是可选的。当直接使用logging.info()方法时,使用根记录器,而使用getLogger()
您可以有不同的记录器,具有不同的名称和级别。这个示例很好,但我认为,为了突出公认的答案,需要进行一些解释
from logging.config import dictConfig
LOGGING_CONFIG = {
'version': 1,
'loggers': {
'': { # root logger
'level': 'NOTSET',
'handlers': ['debug_console_handler', 'info_rotating_file_handler', 'error_file_handler', 'critical_mail_handler'],
},
'my.package': {
'level': 'WARNING',
'propagate': False,
'handlers': ['info_rotating_file_handler', 'error_file_handler' ],
},
},
'handlers': {
'debug_console_handler': {
'level': 'DEBUG',
'formatter': 'info',
'class': 'logging.StreamHandler',
'stream': 'ext://sys.stdout',
},
'info_rotating_file_handler': {
'level': 'INFO',
'formatter': 'info',
'class': 'logging.handlers.RotatingFileHandler',
'filename': 'info.log',
'mode': 'a',
'maxBytes': 1048576,
'backupCount': 10
},
'error_file_handler': {
'level': 'WARNING',
'formatter': 'error',
'class': 'logging.FileHandler',
'filename': 'error.log',
'mode': 'a',
},
'critical_mail_handler': {
'level': 'CRITICAL',
'formatter': 'error',
'class': 'logging.handlers.SMTPHandler',
'mailhost' : 'localhost',
'fromaddr': 'monitoring@domain.com',
'toaddrs': ['dev@domain.com', 'qa@domain.com'],
'subject': 'Critical error with application name'
}
},
'formatters': {
'info': {
'format': '%(asctime)s-%(levelname)s-%(name)s::%(module)s|%(lineno)s:: %(message)s'
},
'error': {
'format': '%(asctime)s-%(levelname)s-%(name)s-%(process)d::%(module)s|%(lineno)s:: %(message)s'
},
},
}
dictConfig(LOGGING_CONFIG)