首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > perl python >

python 与此同时向控制台和文件输出日志

2013-07-04 
python 同时向控制台和文件输出日志本帖最后由 march_on 于 2013-06-20 16:30:22 编辑我的代码如下:#! /us

python 同时向控制台和文件输出日志
本帖最后由 march_on 于 2013-06-20 16:30:22 编辑 我的代码如下:


#! /usr/bin/env python
#coding=utf-8
import logging
import traceback
import os
class Log(object):
    def __init__(self, logger, file_handler_name):
        self.loggerName = logger
        self.logger = logging.getLogger(logger)
        self.formatter = logging.Formatter( ("================================\n"
                                    "time:%(asctime)s\nlogger:%(name)s\nlevel:%(levelname)s\n"
                                     "file:%(filename)s\nfun:%(funcName)s\nlineno:%(lineno)d\n"
                                    "message:%(message)s" ))
        
        log_file_path = os.path.abspath(os.path.dirname(__file__)) + '/log/'
        if os.path.isdir(log_file_path) == False:#如果log_file_path应该存在,则返回true
            os.makedirs(log_file_path)
        file_handler = logging.FileHandler(log_file_path + file_handler_name)
        file_handler.setLevel(logging.ERROR)
        file_handler.setFormatter(self.formatter)
        self.logger.addHandler(file_handler)
        
        console_handler = logging.StreamHandler()
        console_handler.setLevel(logging.INFO)
        console_handler.setFormatter(self.formatter)
        self.logger.addHandler(console_handler)
        
    def info(self, *msg):
        try:
            tmp = [msg[0]]
            tmp.append(traceback.format_exc())
            self.logger.info("\n****************\n".join(tmp))
        except Exception, e:
            print e
        
    def error(self, *msg):
        try:
            tmp = [msg[0]]
            tmp.append(traceback.format_exc())
            self.logger.error("\n****************\n".join(tmp))
        except Exception, e:


            print e
        
        
if __name__ == "__main__":
    test_log = Log('test', 'test.log')
    test_log.info("this is a test log")
    try:
        print 1/0
    except Exception, e:
        msg = 'my message'
        test_log.error(msg)



运行时发现只有test_log.error(msg)这个函数的日志分别写到文件和控制台了,这条日志 test_log.info("this is a test log")却没有写到控制台,请问问题出在哪里?
多谢
[解决办法]
你需要设定logger的level。否则,logger的level是NOTSET,根据这儿(http://docs.python.org/2/library/logging.html#logging.Logger.setLevel)的描述,logger最后起作用的level会是WARNING,info当然就给忽略了。
[解决办法]
如楼上所说,

self.logger = logging.getLogger(logger)
后面加上
self.logger.setLevel(logging.DEBUG)
就好.

热点排行