【Python】logging添加filter教程

例子一

def filter(self, record):
    """Our custom record filtering logic.
    Built-in filtering logic (via logging.Filter) is too limiting.
    """
    if not self.filters:
      return True
    matched = False
    rname = record.name # shortcut
    for name in self.filters:
      if rname == name or rname.startswith(name+'.'):
        matched = True
    return matched

例子二

def _create_log_handlers(stream):
  """Create and return a default list of logging.Handler instances.
  Format WARNING messages and above to display the logging level, and
  messages strictly below WARNING not to display it.
  Args:
   stream: See the configure_logging() docstring.
  """
  # Handles logging.WARNING and above.
  error_handler = logging.StreamHandler(stream)
  error_handler.setLevel(logging.WARNING)
  formatter = logging.Formatter("%(levelname)s: %(message)s")
  error_handler.setFormatter(formatter)
 
  # Create a logging.Filter instance that only accepts messages
  # below WARNING (i.e. filters out anything WARNING or above).
  non_error_filter = logging.Filter()
  # The filter method accepts a logging.LogRecord instance.
  non_error_filter.filter = lambda record: record.levelno < logging.WARNING
 
  non_error_handler = logging.StreamHandler(stream)
  non_error_handler.addFilter(non_error_filter)
  formatter = logging.Formatter("%(message)s")
  non_error_handler.setFormatter(formatter)
 
  return [error_handler, non_error_handler]

例子三

def _default_handlers(stream):
  """Return a list of the default logging handlers to use.
  Args:
   stream: See the configure_logging() docstring.
  """
  # Create the filter.
  def should_log(record):
    """Return whether a logging.LogRecord should be logged."""
    # FIXME: Enable the logging of autoinstall messages once
    #    autoinstall is adjusted. Currently, autoinstall logs
    #    INFO messages when importing already-downloaded packages,
    #    which is too verbose.
    if record.name.startswith("webkitpy.thirdparty.autoinstall"):
      return False
    return True
 
  logging_filter = logging.Filter()
  logging_filter.filter = should_log
 
  # Create the handler.
  handler = logging.StreamHandler(stream)
  formatter = logging.Formatter("%(name)s: [%(levelname)s] %(message)s")
  handler.setFormatter(formatter)
  handler.addFilter(logging_filter)
 
  return [handler]

 

Pythonlogging模块允许你在你的应用程序中记录消息,以便在开发、测试和生产环境中进行故障排除。 下面是一个简单的入门教程来介绍如何在Python中使用logging模块。 ## 基本用法 首先,导入logging模块。 ```python import logging ``` 然后,你可以使用logging.basicConfig()函数来配置默认的日志记录器,例如: ```python logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s') ``` 这将设置默认的日志记录级别为DEBUG,并将日志消息格式设置为时间戳、日志级别和消息文本。 现在,你可以使用logging模块中的函数来记录日志消息。例如: ```python logging.debug('This is a debug message') logging.info('This is an info message') logging.warning('This is a warning message') logging.error('This is an error message') logging.critical('This is a critical message') ``` 当你运行此代码时,你将看到输出类似于以下内容的日志消息: ``` 2019-02-26 13:23:45,678 - DEBUG - This is a debug message 2019-02-26 13:23:45,678 - INFO - This is an info message 2019-02-26 13:23:45,678 - WARNING - This is a warning message 2019-02-26 13:23:45,678 - ERROR - This is an error message 2019-02-26 13:23:45,678 - CRITICAL - This is a critical message ``` 默认情况下,日志消息将发送到控制台。你也可以将其写入文件,例如: ```python logging.basicConfig(filename='example.log', level=logging.DEBUG) ``` 现在,所有日志消息都将写入example.log文件。 ## 高级用法 logging模块还提供了其他一些功能,例如: ### 调试器 logging模块还提供了一个方便的调试器,可以帮助你识别和调试代码中的错误。例如: ```python import logging logging.basicConfig(level=logging.DEBUG) def foo(x): logging.debug('x = %s' % x) return x * 2 def bar(y): z = y + 3 return foo(z) def main(): result = bar(5) logging.debug('result = %s' % result) if __name__ == '__main__': main() ``` 当你运行此代码时,你将看到输出类似于以下内容的日志消息: ``` DEBUG:root:x = 8 DEBUG:root:result = 16 ``` 这表明foo()函数接收到参数x=8,并返回结果x*2=16,而bar()函数接收到参数y=5,计算z=y+3=8,并将其传递给foo()函数。 ### 记录器 logging模块还提供了Logger类,可以让你创建自定义的日志记录器。例如: ```python import logging # create logger logger = logging.getLogger('my_logger') logger.setLevel(logging.DEBUG) # create console handler and set level to debug ch = logging.StreamHandler() ch.setLevel(logging.DEBUG) # create formatter formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') # add formatter to ch ch.setFormatter(formatter) # add ch to logger logger.addHandler(ch) # 'application' code logger.debug('debug message') logger.info('info message') logger.warning('warn message') logger.error('error message') logger.critical('critical message') ``` 这个例子创建了一个名为“my_logger”的自定义日志记录器,并将其配置为记录DEBUG级别的消息。它还创建了一个控制台处理程序,并将其添加到日志记录器中。最后,它使用Logger类中的函数来记录日志消息。 ### 过滤器 logging模块还提供了Filter类,可以让你过滤特定类型的日志消息。例如: ```python import logging class MyFilter(logging.Filter): def filter(self, record): return record.levelno == logging.WARNING # create logger logger = logging.getLogger('my_logger') logger.setLevel(logging.DEBUG) # create console handler and set level to debug ch = logging.StreamHandler() ch.setLevel(logging.DEBUG) # create formatter formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') # add formatter to ch ch.setFormatter(formatter) # add ch to logger logger.addHandler(ch) # add filter to handler ch.addFilter(MyFilter()) # 'application' code logger.debug('debug message') logger.info('info message') logger.warning('warn message') logger.error('error message') logger.critical('critical message') ``` 这个例子创建了一个名为“my_logger”的自定义日志记录器,并将其配置为记录DEBUG级别的消息。它还创建了一个控制台处理程序,并将其添加到日志记录器中。但是,它还使用自定义的MyFilter类来过滤只记录WARNING级别的消息。 当你运行此代码时,你将看到输出类似于以下内容的日志消息: ``` 2019-02-26 13:23:45,678 - my_logger - WARNING - warn message 2019-02-26 13:23:45,678 - my_logger - ERROR - error message 2019-02-26 13:23:45,678 - my_logger - CRITICAL - critical message ``` 这表明只有WARNING、ERROR和CRITICAL级别的消息被记录下来了,而DEBUG和INFO级别的消息被过滤掉了。 ## 总结 这是一个简单的Python.logging教程,介绍了如何在Python中使用logging模块来记录日志消息。logging模块提供了许多功能,例如自定义日志记录器、过滤器和调试器,可以帮助你更好地理解和调试你的代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值