我想写一个可以在多个模块中使用的记录器。我必须能够从一个地方启用和禁用它。它必须是可重复使用的。
以下是该方案。 switch_module.py
class Brocade(object):
def __init__(self, ip, username, password):
...
def connect(self):
...
def disconnect(self):
...
def switch_show(self):
...
switch_module_library.py
import switch_module
class Keyword_Mapper(object):
def __init__(self, keyword_to_execute):
self._brocade_object = switch_module.Brocade(ip, username, password)
...
def map_keyword_to_command(self)
...
application_gui.py
class GUI:
# I can open a file containing keyword for brocade switch
# in this GUI in a tab and tree widget(it uses PyQt which I don't know)
# Each tab is a QThread and there could be multiple tabs
# Each tab is accompanied by an execute button.
# On pressing exeute it will read the string/keywords from the file
# and create an object of keyword_Mapper class and call
# map_key_word_to_command method, execute the command on brocade
# switch and log the results. Current I am logging the result
# only from the Keyword_Mapper class.
我遇到的问题是如何编写可以随意启用和禁用的记录器 它必须从所有三个模块登录到一个文件以及控制台。
我尝试在 int .py中编写全局记录器,然后在所有三个模块中导入它 并且必须给出一个通用名称,以便它们登录到同一个文件,但随后 由于存在多线程并且后来创建了记录器,因此遇到了麻烦 登录到其名称中包含thread-id的文件,以便我可以拥有每个日志 每个帖子。
如果我需要登录到不同的文件而不是同一个文件怎么办?
我已经浏览了python日志文档,但无法获得清晰的图片 关于编写一个可以重用的适当的日志系统。
我已经通过了这个链接 Is it better to use root logger or named logger in Python
但是由于我使用PyQt和多线程之外的其他人创建的GUI,我无法理解这里的日志。
答案 0 :(得分:1)
我的项目我只使用根记录器(我没有时间创建命名记录器,即使它很好)。因此,如果您不想使用命名记录器,这是一个快速解决方案:
我创建了一个快速设置记录器的功能:
import logging
def initLogger(level=logging.DEBUG):
if level == logging.DEBUG:
# Display more stuff when in a debug mode
logging.basicConfig(
format='%(levelname)s-%(module)s:%(lineno)d-%(funcName)s: %(message)s',
level=level)
else:
# Display less stuff for info mode
logging.basicConfig(format='%(levelname)s: %(message)s', level=level)
我为它创建了一个包,以便我可以将它导入任何地方。
然后,在我的顶级我有:
import LoggingTools
if __name__ == '__main__':
# Configure logger
LoggingTools.initLogger(logging.DEBUG)
#LoggingTools.initLogger(logging.INFO)
根据我是否正在调试,我使用相应的声明。
然后在每个其他文件中,我只使用日志记录:
import logging
class MyClass():
def __init__(self):
logging.debug("Debug message")
logging.info("Info message")