python - 当我在 `log_message()` 中覆盖 `SimpleHTTPRequestHandler` 时,没有任何内容写入文件

标签 python logging

我有以下用于网络服务器的代码。我遇到一个问题,httpd.log 中没有打印任何内容 - 我不知道为什么。文件已创建,如果我将 print() 语句添加到 log_message() 中,它会被打印出来,但不会将任何内容写入文件。

from http.server import HTTPServer
from http.server import SimpleHTTPRequestHandler
import logging
from logging.handlers import RotatingFileHandler

class MyHandler(SimpleHTTPRequestHandler):
    def __init__(self, *args):
        self.logger = logging.getLogger("httpd")
        formatter = logging.Formatter(
        '%(asctime)s - %(name)s - %(levelname)s - %(message)s')
        fh = RotatingFileHandler("httpd.log", mode='wa',
                maxBytes=1 << 20, backupCount=2)
        fh.setFormatter(formatter)
        fh.setLevel(logging.INFO)
        self.logger.addHandler(fh)
        self.logger.info("Creating HTTP Request Handler")
        super(SimpleHTTPRequestHandler, self).__init__(*args)

    def log_message(self, format, *args):
        self.logger.info("%s - - [%s] %s\n" %
                         (self.address_string(),
                          self.log_date_time_string(),
                          format%args))

def main():
  server = HTTPServer(('', 80), MyHandler)
  server.serve_forever()

if __name__ == '__main__':
  main()

这是在 Python 3.1.3 上

最佳答案

一个记录器可以有多个处理程序。不同的处理程序可能具有不同的日志级别。记录器有自己的日志级别,它不受处理程序的影响,并将具有适当日志级别的消息传递给处理程序,以便处理程序根据需要进行处理。

因此,当您的处理程序对 INFO 级别的消息感兴趣时,您的记录器却忽略了它们。

WARNING 的默认日志级别继承自根记录器。

关于python - 当我在 `log_message()` 中覆盖 `SimpleHTTPRequestHandler` 时,没有任何内容写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9110506/

相关文章:

debugging - 如何重现偶尔发生的错误?

python - 绘图平滑 matplotlib 和 seaborn

c# - 以数据库为存储介质在.NET中实现日志记录库

python - 动态地打印到同一控制台行

python - matplotlib 子图中的行和列标题

java - 如何将类名和函数名自动添加到我的日志中

SQLite 的 SQL 查询日志记录?

python - 数组中的圆形对?

python - Numpy——二维数组中某个索引后每行的最大值

python - 解析 bit.ly 的 XML 响应