我有一段代码正在初始化一个记录器,如下所示.
logger = logging.getLogger()
hdlr = logging.FileHandler('logfile.log')
formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s')
hdlr.setFormatter(formatter)
logger.addHandler(hdlr)
logger.setLevel(logging.DEBUG)
Run Code Online (Sandbox Code Playgroud)
不幸的是这个代码被多次调用,有什么方法可以检查处理程序是否已经存在 - 我更愿意实现它而不必使用Singleton.
编辑:对不起,忘了提到这是在python 2.5 - 干杯,理查德
我想知道如何实现一个可以在任何地方使用您自己的设置的全局记录器:
我目前有一个自定义记录器类:
class customLogger(logging.Logger):
...
Run Code Online (Sandbox Code Playgroud)
该类位于一个单独的文件中,包含一些格式化程序和其他内容.记录仪可以完美地完成.
我在我的主python文件中导入这个模块并创建一个这样的对象:
self.log = logModule.customLogger(arguments)
Run Code Online (Sandbox Code Playgroud)
但显然,我无法从代码的其他部分访问此对象.我使用了错误的方法吗?有一个更好的方法吗?
我有3个python模块。
LogManager.py
Runner.py
Other.py
Run Code Online (Sandbox Code Playgroud)
Runner.py是事件链中的第一个主要模块,并且从该模块内部Other.py调用函数。
因此,在内部,Runner.py我有一个函数调用LogManager.py
logger = LogManager.get_log()
Run Code Online (Sandbox Code Playgroud)
从那里,我可以制作简单的日志,例如 logger.critical("OHNOES")
我想要执行的get_log功能类似于单例模式,如果未设置记录器,它将设置记录器并返回它。否则,它将仅返回记录器。
LogManager.py的内容:
import logging
def get_log():
logger = logging.getLogger('PyPro')
logger.setLevel(logging.DEBUG)
# create file handler which logs even debug messages
fh = logging.FileHandler('pypro.log')
fh.setLevel(logging.DEBUG)
# create console handler with a higher log level
ch = logging.StreamHandler()
ch.setLevel(logging.WARNING)
# create formatter and add it to the handlers
fhFormatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
chFormatter = logging.Formatter('%(levelname)s - %(filename)s - Line: %(lineno)d - …Run Code Online (Sandbox Code Playgroud)