2013-05-31 40 views
0

在舊的Zope模塊中,我在_ init _py中找到了函數add_file_logging()。Python日誌記錄級別

With logger2我試着記錄一些INFOS,關卡在add_file_logging()中設置爲DEBUG。但是INFOS沒有記錄到文件中。錯誤記錄到文件中。但函數add_file_logging()必須在記錄錯誤時執行。但日誌記錄級別必須是問題,而不是設置。

logger1我做了同樣的 - 相同的代碼 - 與類本身的函數set_logger()它只是工作正常。

所以我想知道,爲什麼同樣的方法不能正常工作時,它被導入。有人可以解釋我的區別嗎?

那將是非常好的;-)

myhelper.tools/src/myhelper/tools/worker.py

import os 
import sys 
import logging 
import logging.handlers 
from myhelper.tools import add_file_logging 

logger1 = logging.getLogger('myLogger1') 
logger2 = logging.getLogger('myLogger2') 

class Worker(object): 

    def __init__(self): 
     self.to_delete = False 

... 

    def set_logger (self, logger, logfile): 
     logger.setLevel(logging.DEBUG) 
     handler = logging.FileHandler(logfile) 
     handler.setLevel(logging.DEBUG) 
     logger.addHandler(handler) 


    def run(self): 
     self.set_logger(logger1, os.path.dirname(__file__) + "logger1.log") 
     add_file_logging(logger2, os.path.dirname(__file__) + "logger2.log") 

... 

def main(): 
    work = XmlWorker() 
    work.run() 

myhelper.tools/src/myhelper/tools/ 初始化。 PY

初始化的.py下劃線刪除,自動向init.py ;-)

# -*- coding: utf-8 -*- 
import logging 
import logging.handlers 

logging.basicConfig(level=logging.DEBUG, 
      format='%(asctime)s %(levelname)-8s %(message)s', 
      datefmt='%a, %d %b %Y %H:%M:%S') 

class AboveInfoFilter(logging.Filter): 
    def filter(self, record): 
     return record.levelno > 20 

def add_file_logging (logger, logfile): 
    logger.setLevel(logging.DEBUG) 
    handler = logging.FileHandler(logfile) 
    handler.setLevel(logging.DEBUG) 
    logger.addHandler(handler) 
+0

你確定'AboveInfoFilter'沒有被應用嗎?我認爲這只是你的'myhelper/tools/__ init __。py'的一部分。 –

+0

是的,我從add_file_loggin()中刪除了它的集成。之前有一行logfileHndl.addFilter(AboveInfoFilter()) – surfi

回答

0

我無法重現您的發現。這個腳本:

import logging 
import os 
import shutil 
import sys 
import tempfile 

CONTENTS = ''' 
import logging 

logging.basicConfig(level=logging.DEBUG, 
      format='%(asctime)s %(levelname)-8s %(message)s', 
      datefmt='%a, %d %b %Y %H:%M:%S') 

class AboveInfoFilter(logging.Filter): 
    def filter(self, record): 
     return record.levelno > 20 

def add_file_logging (logger, logfile): 
    logger.setLevel(logging.DEBUG) 
    handler = logging.FileHandler(logfile) 
    handler.setLevel(logging.DEBUG) 
    logger.addHandler(handler) 
''' 

def make_helper_module(): 
    tempdir = tempfile.mkdtemp() 
    helper = os.path.join(tempdir, 'myhelper') 
    os.mkdir(helper) 
    fn = os.path.join(helper, '__init__.py') 
    with open(fn, 'w') as f: 
     pass # make empty file 
    tools = os.path.join(helper, 'tools') 
    os.mkdir(tools) 
    fn = os.path.join(tools, '__init__.py') 
    with open(fn, 'w') as f: 
     f.write(CONTENTS) 
    return tempdir 

tempdir = make_helper_module() 
sys.path.insert(0, tempdir) 

from myhelper.tools import add_file_logging 

logger1 = logging.getLogger('myLogger1') 
logger2 = logging.getLogger('myLogger2') 

class Worker(object): 
    def set_logger (self, logger, logfile): 
     logger.setLevel(logging.DEBUG) 
     handler = logging.FileHandler(logfile) 
     handler.setLevel(logging.DEBUG) 
     logger.addHandler(handler) 

    def run(self): 
     self.set_logger(logger1, os.path.dirname(__file__) + "logger1.log") 
     add_file_logging(logger2, os.path.dirname(__file__) + "logger2.log") 

def main(): 
    worker = Worker() 
    worker.run() 
    logger1.info('Hello, ') 
    logger2.info('world!') 
    td = sys.path.pop(0) 
    shutil.rmtree(tempdir) 
    print('logger1.log contains:') 
    with open('logger1.log') as f: 
     print(f.read().strip()) 
    print('logger2.log contains:') 
    with open('logger2.log') as f: 
     print(f.read().strip()) 

if __name__ == '__main__': 
    main() 

運行時,產生

Mon, 03 Jun 2013 19:29:49 INFO  Hello, 
Mon, 03 Jun 2013 19:29:49 INFO  world! 
logger1.log contains: 
Hello, 
logger2.log contains: 
world! 

這似乎是合理的。