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

march_on 2013-06-20 04:29:37
我的代码如下:

#! /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")却没有写到控制台,请问问题出在哪里?
多谢
...全文
406 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
march_on 2013-06-23
  • 打赏
  • 举报
回复
引用 1 楼 panghuhu250 的回复:
你需要设定logger的level。否则,logger的level是NOTSET,根据这儿(http://docs.python.org/2/library/logging.html#logging.Logger.setLevel)的描述,logger最后起作用的level会是WARNING,info当然就给忽略了。
引用 2 楼 maniachhz 的回复:
如楼上所说, 在 self.logger = logging.getLogger(logger) 后面加上 self.logger.setLevel(logging.DEBUG) 就好.
多谢!
maniachhz 2013-06-22
  • 打赏
  • 举报
回复
如楼上所说, 在 self.logger = logging.getLogger(logger) 后面加上 self.logger.setLevel(logging.DEBUG) 就好.
panghuhu250 2013-06-20
  • 打赏
  • 举报
回复
你需要设定logger的level。否则,logger的level是NOTSET,根据这儿(http://docs.python.org/2/library/logging.html#logging.Logger.setLevel)的描述,logger最后起作用的level会是WARNING,info当然就给忽略了。

37,719

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧