2017-10-22 54 views
0

我试图导入一个函数,它初始化两个不同级别的日志处理程序。问题是,对于下面的选项1,我得到根记录器,对于选项2,我无法获取任何要打印到屏幕的日志。从模块导入日志记录功能

有没有人有任何想法或建议可能有帮助?

选项1 TestModule:

def set_logger(
    app_name=argv[0][:-3]): 
    logging.basicConfig(
    level=logging.DEBUG, 
    format='[%(levelname)s][%(module)s][%(asctime)s] - %(message)s', 
    filename="test.log" 
    ) 
    console = logging.StreamHandler() 
    console.setLevel(logging.INFO) 
    formatter = logging.Formatter('[%(levelname)s][%(module)s][%(asctime)s] - %(message)s') 
    console.setFormatter(formatter) 
    logging.getLogger('').addHandler(console) 

选项2 TestModule:

def set_logger(
    app_name=argv[0][:-3]): 

    formatter = logging.Formatter('[%(levelname)s][%(module)s][%(asctime)s] - %(message)s') 
    logger = logging.getLogger(app_name) 
    stream_log = logging.StreamHandler() 
    stream_log.setLevel(logging.INFO) 
    stream_log.setFormatter(formatter) 
    file_log = logging.FileHandler("test.log") 
    file_log.setLevel(logging.DEBUG) 
    file_log.setFormatter(formatter) 
    logger.addHandler(stream_log) 
    logger.addHandler(file_log) 
在脚本

from Module import set_logger 
import logging 

if __name__ == "__main__" 
    set_logger() 
    logging.info("start_app") 

缺少什么我在这里?

+0

你叫'getLogger(“” )',所以你得到根,对吧? –

+0

这是正确的 - 但是当我传递sys.argv [0]时,它只是不打印任何东西。或者即使我要通过__name__,它也会停止生成日志到流 – user3166881

回答

0

在选项2,要初始化通过logging.getLogger() 记录仪,您需要返回记录仪在功能和使用返回的记录器调用它,

if __name__ == "__main__" 
    logger = set_logger() 
    logger.info("start_app") 
+0

我非常确定,当我尝试这个时,它并没有真正改变 - 让我回到你的@micebrain。这是可能的我错过了什么 – user3166881

+0

不记录到文件 – user3166881