读书人

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

发布时间: 2013-07-04 11:45:44 作者: rapoo

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)
就好.

读书人网 >perl python

热点推荐