我有一个网络服务器的代码。我有一个问题,即在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
上答案 0 :(得分:4)
记录器可以有多个处理程序。不同的处理程序可能具有不同的日志级别记录器有自己的日志级别,不受处理程序的影响,并将具有适当日志级别的消息传递给处理程序,以便他们认为合适。
因此,当您的处理程序对INFO级别消息感兴趣时,您的记录器会忽略它们。
WARNING的默认日志级别是从根记录器继承的。
答案 1 :(得分:1)
除了致电self.logger.setLevel(logging.INFO)
fh.setLevel()
如果有人解释为什么,我会接受这个答案:)
答案 2 :(得分:-1)
open(LOGFILE, "w+").write("%s - - [%s] %s\n" % (self.address_string(), self.log_date_time_string(), format%args))
这是您可能感兴趣的内容。