我有以下用于网络服务器的代码。我遇到一个问题,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/