我想编写一个函数来获取用户请求的日志记录级别,例如:
import logging
logger = logging.getLogger()
def func(log_level: <Type?>):
logger.log_level("everything is bad")
这可以做到吗?
我想编写一个函数来获取用户请求的日志记录级别,例如:
import logging
logger = logging.getLogger()
def func(log_level: <Type?>):
logger.log_level("everything is bad")
这可以做到吗?
只需使用记录器的log()
方法,它需要一个级别以及一个格式字符串和参数。
import logging
logger = logging.getLogger()
def func(log_level: int, message: str):
logger.log(log_level, message)
logging.basicConfig(level=logging.DEBUG, format='%(levelname)-8s %(message)s')
func(logging.DEBUG, 'message at DEBUG level')
func(logging.INFO, 'message at INFO level')
func(logging.CRITICAL, 'message at CRITICAL level')
哪个打印
DEBUG message at DEBUG level
INFO message at INFO level
CRITICAL message at CRITICAL level
运行时。
你可以用这个。它首先看起来有点冗长,但您可以轻松添加额外的处理程序(也许一些记录到文件中......)
import logging
logger = logging.getLogger()
handler = logging.StreamHandler() #you can also use FileHandler here, but then you need to specify a path
handler.setLevel(logging.NOTSET)
LOG_FORMAT = "%(levelname)s: %(message)s"
formatter = logging.Formatter(LOG_FORMAT)
handler.setFormatter(formatter)
logger.addHandler(handler)
logger.log(logging.CRITICAL, "your logging message 1") #==> CRITICAL: your logging message 1
logger.log(logging.WARN, "your logging message 2") #==> WARN: your logging message 2
注1:LOG_FORMAT
根据logging-documentation定义
注意 2:日志记录级别 ( logging.DEBUG
, logging.INFO
...) 在这里解释。您也可以相应地使用整数值:
日志记录.XX | 价值 |
---|---|
没有设置 | 0 |
调试 | 10 |
信息 | 20 |
警告 | 30 |
错误 | 40 |
批判的 | 50 |
您可以使用上下文管理器,我在文档中引用“有时临时更改日志记录配置并在执行某些操作后将其恢复回来会很有用。为此,上下文管理器是保存和恢复的最明显方式“
import logging
import sys
class LoggingContext:
def __init__(self, logger, level=None, handler=None, close=True):
self.logger = logger
self.level = level
self.handler = handler
self.close = close
def __enter__(self):
if self.level is not None:
self.old_level = self.logger.level
self.logger.setLevel(self.level)
if self.handler:
self.logger.addHandler(self.handler)
def __exit__(self, et, ev, tb):
if self.level is not None:
self.logger.setLevel(self.old_level)
if self.handler:
self.logger.removeHandler(self.handler)
if self.handler and self.close:
self.handler.close()
# implicit return of None => don't swallow exceptions
正是在文档中,它在这里:https ://docs.python.org/3/howto/logging-cookbook.html#using-a-context-manager-for-selective-logging 。您还可以重写以下任何示例代码片段:https ://docs.python.org/3/howto/logging-cookbook.html#using-logging-in-multiple-modules 。