使用带有Bottle的Python日志记录获取类的多个实例以记录到文件

时间:2013-11-20 11:02:05

标签: python logging scope bottle python-module

我有一个瓶子网络应用程序,我试图登录到文件。

每个页面访问实例化一个新类,所以我试图将每个类的记录器链接到模块记录器,以便它们都记录到同一个文件。

两个问题:

A)如果该类的多个实例同时记录,是否会导致文件写入冲突?我认为不,因为他们通过模块级记录器。我是否正确创建了这个?

B)我的logfile.log文件中没有显示任何内容。我不确定问题出在哪里。

from bottle import route, run
import logging

logger = logging.getLogger('server')
fh = logging.FileHandler('./log/logfile.log')
fh.setLevel(logging.ERROR)
logger.addHandler(fh)

class userclass:
    def __init__(self,name):
        self.logger = logging.getLogger('server.userclass')
        self.name = name
        try:
            raise Exception("Uh oh!")
        except Exception as e:
            self.logger.error("There's a problem.")
            return

@route('/<name>')
def user(name):
    newuser = userclass(name)

run(host='localhost', port=8080, debug=True)

1 个答案:

答案 0 :(得分:0)

替换:

logger = logging.getLogger('server')
fh = logging.FileHandler('./log/logfile.log')
fh.setLevel(logging.ERROR)
logger.addHandler(fh)

使用:

logging.basicConfig(level=logging.ERROR, filename='./log/logfile.log')

您需要先使用logging.basicConfig()功能启动记录器。这将在根记录器中创建一个基本配置,通过logging.getLogger()获得的所有其他记录器将使用此基础 - 您可以随时为这些新日志添加处理程序,更改其格式,甚至他们的级别 - 但您需要先在根记录器上调用基本配置。