python项目中的单个记录器?

时间:2011-03-31 19:26:47

标签: python logging

我想为python项目创建一个记录器。我想确保我为项目中的每个模块使用相同的记录器。做这个的最好方式是什么?看来我需要一个全局日志记录对象?或者可能是每个其他模块导入的日志记录模块?我想确保我总是写入同一个日志文件。

我已经使用了python的logger和handler。问题是我必须定义记录器将在每个模块中写入哪个文件。我想定义一次日志文件路径,并将其用于每个模块。

4 个答案:

答案 0 :(得分:5)

正如你所说,看看Python的logging module

它提供了Logger和Handler之类的对象,我认为它可以为你工作。

答案 1 :(得分:3)

singleton pattern非常适合这种情况。在Python中,你实现它是这样的:

class MySingleton(object):
     __instance = None

    def __init__(self):
        if self.__class__.__instance:
            raise Exception, """
                             Tried to allocate a second instance of a singleton.
                             Use getInstance() instead.
                             """

        self.__class__.__instance = self

    @classmethod
    def getInstance(cls):
        if not cls.__instance:
            cls()

        return cls.__instance

然后您可以像往常一样导入模块,并使用MySingleton.getInstance()来获取类的实例。在给定的应用程序中,您可以保证始终获得相同的实例。

编辑:其他人已经指出了logging模块,我同意他们使用它可能比编写自己的记录器更好。但是,如果您因任何原因需要编写自己的记录器,上述模式可能就是您想要使用的。

答案 2 :(得分:0)

在__builtin__模块中定义记录器对象。这样,您可以像任何其他python全局函数一样访问它,而无需在每个文件中导入一些日志记录模块。

logmodule.py中的

import __builtin__
__builtin__.log = logging.getLogger('global')
# ... configure your logger

在“主要”文件中:

import logmodule

在其他文件中:

log.debug('blah')

答案 3 :(得分:0)

使用negar模块...

github negar module

  

安装negar ...

python3 -m pip install negar
  

代码

from negar import log

# method one

def x():
    text = 'hello world!'
    return text

log('\'x\' function return value is '+'\''+str(x())+'\'')

# method two

def y():
    text = 'hello world!'
    return text

log(text = '\'y\' function return value is '+'\''+str(x())+'\'' , save = 'function-log.txt' , size = 1)
  

结果

result