Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 当我重写`SimpleHTTPRequestHandler`中的`log_message()`时,不会向文件写入任何内容`_Python_Logging - Fatal编程技术网

Python 当我重写`SimpleHTTPRequestHandler`中的`log_message()`时,不会向文件写入任何内容`

Python 当我重写`SimpleHTTPRequestHandler`中的`log_message()`时,不会向文件写入任何内容`,python,logging,Python,Logging,我有以下Web服务器代码。我有一个问题,就是在httpd.log中没有打印任何内容,我不知道为什么。文件被创建,如果我将print()语句添加到log\u message()中,它会被打印出来,但不会写入文件 from http.server import HTTPServer from http.server import SimpleHTTPRequestHandler import logging from logging.handlers import RotatingFileHandl

我有以下Web服务器代码。我有一个问题,就是在
httpd.log
中没有打印任何内容,我不知道为什么。文件被创建,如果我将
print()
语句添加到
log\u 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()
从http.server导入HTTPServer
从http.server导入SimpleHTTPRequestHandler
导入日志记录
从logging.handlers导入RotatingFileHandler
类MyHandler(SimpleHTTPRequestHandler):
定义初始化(self,*args):
self.logger=logging.getLogger(“httpd”)
格式化程序=日志记录。格式化程序(
“%(asctime)s-%(name)s-%(levelname)s-%(message)s')
fh=RotatingFileHandler(“httpd.log”,mode='wa',

maxBytes=1除了调用
fh.setLevel()


如果有人解释原因,我会接受这个答案:)

除了调用
fh.setLevel()之外,我还需要调用
self.logger.setLevel(logging.INFO)


如果有人解释原因,我会接受这个答案:)

一个记录器可以有多个处理程序。不同的处理程序可能具有不同的日志级别。记录器有自己的日志级别,不受处理程序的影响,并将具有适当日志级别的消息传递给处理程序,以便处理它们认为合适的事务

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


默认日志级别的警告是从根记录器继承的。

记录器可以有多个处理程序。不同的处理程序可能具有不同的日志级别。记录器有自己的日志级别,不受处理程序的影响,并将具有适当日志级别的消息传递给处理程序,以便处理它们认为合适的事务

 open(LOGFILE, "w+").write("%s - - [%s] %s\n" % (self.address_string(), self.log_date_time_string(), format%args)) 
因此,当处理程序对信息级别的消息感兴趣时,记录器却忽略了它们

默认日志级别的警告是从根日志记录器继承的

 open(LOGFILE, "w+").write("%s - - [%s] %s\n" % (self.address_string(), self.log_date_time_string(), format%args)) 
这是你可能感兴趣的东西


这是你可能感兴趣的东西

您可以通过调用logger.getEffectiveLevel()找到记录器正在使用的级别您可以通过调用logger.getEffectiveLevel()找到记录器正在使用的级别