【问题标题】:Python logging levelPython 日志记录级别
【发布时间】:2013-05-31 09:45:32
【问题描述】:

在一个旧的 Zope 模块中,我在 _init_py 中找到了一个函数 add_file_logging()。

使用 logger2 我尝试记录一些 INFOS,在 add_file_logging() 中将级别设置为 DEBUG。但是 INFOS 没有记录到文件中。错误记录到文件中。但是函数 add_file_logging() 必须在记录错误时执行。但是日志级别一定是问题所在,它没有设置。

使用 logger1 我做了同样的事情 - 相同的代码 - 使用类本身中的函数 set_logger() 它工作正常。

所以我想知道,为什么相同的方法在导入时不起作用。有人可以解释一下区别吗?

那就太好了;-)

myhelper.tools/src/myhelper/tools/worker.py

import os
import sys
import logging
import logging.handlers
from myhelper.tools import add_file_logging

logger1 = logging.getLogger('myLogger1')
logger2 = logging.getLogger('myLogger2')

class Worker(object):

    def __init__(self):
        self.to_delete = False

...

    def set_logger (self, logger, logfile):
        logger.setLevel(logging.DEBUG)
        handler = logging.FileHandler(logfile)
        handler.setLevel(logging.DEBUG)
        logger.addHandler(handler)


    def run(self):
        self.set_logger(logger1, os.path.dirname(__file__) + "logger1.log")
        add_file_logging(logger2, os.path.dirname(__file__) + "logger2.log")

...

def main():
    work = XmlWorker()
    work.run() 

myhelper.tools/src/myhelper/tools/init.py

init.py 下划线会自动删除到 init.py ;-)

# -*- coding: utf-8 -*-
import logging
import logging.handlers

logging.basicConfig(level=logging.DEBUG,
            format='%(asctime)s %(levelname)-8s %(message)s',
            datefmt='%a, %d %b %Y %H:%M:%S')

class AboveInfoFilter(logging.Filter):
    def filter(self, record):
        return record.levelno > 20

def add_file_logging (logger, logfile):
    logger.setLevel(logging.DEBUG)
    handler = logging.FileHandler(logfile)
    handler.setLevel(logging.DEBUG)
    logger.addHandler(handler)

【问题讨论】:

  • 你确定AboveInfoFilter 没有被应用吗?我想这只是你myhelper/tools/__init__.py 的一部分。
  • 是的,我从 add_file_loggin() 中删除了它的集成。之前有一行 logfileHndl.addFilter(AboveInfoFilter())

标签: python logging error-logging


【解决方案1】:

我无法重现您的发现。这个脚本:

import logging
import os
import shutil
import sys
import tempfile

CONTENTS = '''
import logging

logging.basicConfig(level=logging.DEBUG,
            format='%(asctime)s %(levelname)-8s %(message)s',
            datefmt='%a, %d %b %Y %H:%M:%S')

class AboveInfoFilter(logging.Filter):
    def filter(self, record):
        return record.levelno > 20

def add_file_logging (logger, logfile):
    logger.setLevel(logging.DEBUG)
    handler = logging.FileHandler(logfile)
    handler.setLevel(logging.DEBUG)
    logger.addHandler(handler)
'''

def make_helper_module():
    tempdir = tempfile.mkdtemp()
    helper = os.path.join(tempdir, 'myhelper')
    os.mkdir(helper)
    fn = os.path.join(helper, '__init__.py')
    with open(fn, 'w') as f:
        pass    # make empty file
    tools = os.path.join(helper, 'tools')
    os.mkdir(tools)
    fn = os.path.join(tools, '__init__.py')
    with open(fn, 'w') as f:
        f.write(CONTENTS)
    return tempdir

tempdir = make_helper_module()
sys.path.insert(0, tempdir)

from myhelper.tools import add_file_logging

logger1 = logging.getLogger('myLogger1')
logger2 = logging.getLogger('myLogger2')

class Worker(object):
    def set_logger (self, logger, logfile):
        logger.setLevel(logging.DEBUG)
        handler = logging.FileHandler(logfile)
        handler.setLevel(logging.DEBUG)
        logger.addHandler(handler)

    def run(self):
        self.set_logger(logger1, os.path.dirname(__file__) + "logger1.log")
        add_file_logging(logger2, os.path.dirname(__file__) + "logger2.log")

def main():
    worker = Worker()
    worker.run()
    logger1.info('Hello, ')
    logger2.info('world!')
    td = sys.path.pop(0)
    shutil.rmtree(tempdir)
    print('logger1.log contains:')
    with open('logger1.log') as f:
        print(f.read().strip())
    print('logger2.log contains:')
    with open('logger2.log') as f:
        print(f.read().strip())

if __name__ == '__main__':
    main()

运行时,产生

Mon, 03 Jun 2013 19:29:49 INFO     Hello,
Mon, 03 Jun 2013 19:29:49 INFO     world!
logger1.log contains:
Hello,
logger2.log contains:
world!

这似乎是合理的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-20
    • 1970-01-01
    • 2011-05-06
    • 1970-01-01
    • 2020-11-19
    • 2018-04-26
    • 2012-02-08
    • 1970-01-01
    相关资源
    最近更新 更多