2012-02-02 23 views
1

我對Web服務器有以下代碼。我有一個問題,httpd.log沒有打印任何東西 - 我無能爲力。該文件被創建,如果我將一個print()語句添加到log_message()它將被打印出來,但是沒有任何內容被寫入該文件。當我在`SimpleHTTPRequestHandler`中重寫`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

回答

4

記錄器可以有多個處理程序。不同的處理程序可能有不同的日誌級別。記錄器有自己的日誌級別,不受處理程序的影響,並將具有適當日誌級別的消息傳遞給處理程序,以便他們認爲合適。

因此,儘管您的處理程序對INFO級別消息感興趣,但您的記錄器忽略了它們。

WARNING的缺省日誌級別是從根記錄器繼承的。

+0

您可以通過調用logger.getEffectiveLevel()來找出記錄器正在使用的級別。 – 2012-02-02 13:42:32

1

我需要調用除了self.logger.setLevel(logging.INFO)調用fh.setLevel()

如果有人解釋爲什麼,我會接受這個答案:)

-1
open(LOGFILE, "w+").write("%s - - [%s] %s\n" % (self.address_string(), self.log_date_time_string(), format%args)) 

這是你可能感興趣的東西。

相關問題