【问题标题】:Get multiple instances of a class to log to a file using Python logging with Bottle使用带有 Bottle 的 Python 日志记录获取类的多个实例以记录到文件
【发布时间】:2013-11-20 11:02:05
【问题描述】:

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

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

两个问题:

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)

【问题讨论】:

  • Python 可能对日志文件很懒惰并且没有刷新它。尝试优雅地关闭进程并然后检查日志文件
  • 尝试停止进程然后检查文件...仍然没有。
  • 我在我的系统上进行了尝试,它按预期工作:日志包含一个“有问题”。对于每个匹配的请求。我复制并粘贴了问题中的代码,然后创建了一个log 子目录,然后运行了脚本。 (Python 2.7,Ubuntu)。我不得不将使用的端口更改为 8000,但我没有进行其他更改。
  • 好的,很好。我在带有 Python 2.7 的 Windows 7 上。它正在创建文件,但是当我在记事本中打开它时,里面什么都没有。
  • 刚刚将其克隆到 Linux AWS 实例,您是对的……完美运行。知道 Windows 上的问题是什么吗?

标签: python logging scope bottle python-module


【解决方案1】:

替换:

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() 获得的所有其他记录器都将使用此基础 - 您始终可以将处理程序添加到这些新日志,更改它们的格式,甚至它们的级别 - 但您需要先调用根记录器的基本配置。

【讨论】:

  • basicConfig 的调用不应该是必需的 - OP 的代码看起来不错,除了记录器上没有设置级别(因此它将默认为 @ 987654326@,但这也应该捕获ERROR 事件。)
  • 谢谢。只是为了确认一下,它设置了baseConfig,然后按该顺序调用getLogger? logging.basicConfig(level=logging.ERROR, filename='./log/logfile.log') logger = logging.getLogger('server')
  • 问题不在于代码。您还有其他问题 - 您确定您使用的用户具有写入文件的能力吗?目录可以访问吗?尝试使用一个变量作为文件名,并打印它的位置,你永远不知道你会学到什么。无论如何 - 我提供的上述代码是启动根记录器的正确方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-12
  • 2015-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-17
相关资源
最近更新 更多