Tom*_*ock 3 python logging python-3.x
我有用四个处理程序定义的根记录器;
现在我有一个模块,它通过侦听队列从多进程收集日志。我希望这个模块只记录到 FileHandlers。我尝试使用以下代码来实现这一点;
class ModuleLogger(Singleton):
def __init__(self):
# Create a queue to stash the messages
self.queue = Queue(-1)
# Start thread
thread = Thread(target=self.__receive)
thread.daemon = True
thread.start()
def __receive(self):
# Keep checking the queue for new logging messages
while 1:
try:
record = self.queue.get()
# Exit on None value
if record is None:
break
logger = logging.getLogger(record.name)
logger.setLevel(logging.DEBUG)
for handler in logging.getLogger().handlers:
if type(handler) != type(logging.StreamHandler()):
logger.addHandler(handler)
logger.handle(record)
except Exception:
...
...
Run Code Online (Sandbox Code Playgroud)
但是,消息仍然会记录到标准输出。不过,当我打印 logger.handlers 时,它仅显示 FileHandlers。这就引出了这篇SO帖子的问题;如何确保记录器不使用其父处理程序?
propagate我认为这只是在您的子记录器上设置属性的情况。
https://docs.python.org/3/library/logging.html#logging.Logger.propagate
logger = logging.getLogger("my.sub.logger")
logger.propagate = False
Run Code Online (Sandbox Code Playgroud)
您只需要对专门命名的子记录器执行一次此操作,甚至可以使用预先的日志记录配置来设置它: https: //docs.python.org/3/library/logging.config.html#module-logging。配置
| 归档时间: |
|
| 查看次数: |
2403 次 |
| 最近记录: |