【问题标题】:Python logging: logging config file with changing save locationPython 日志记录:使用更改保存位置记录配置文件
【发布时间】:2012-10-21 04:34:26
【问题描述】:

假设我有以下配置日志文件:

[loggers]
keys=root,seeker,event

[handlers]
keys=consoleHandler,seekerFileHandler,eventFileHandler

[formatters]
keys=consoleFormatter,logFormatter

[logger_root]
level=DEBUG
handlers=consoleHandler,seekerFileHandler,eventFileHandler

[logger_seeker]
level=DEBUG
handlers=consoleHandler,seekerFileHandler
qualname=seeker
propagate=0

[logger_event]
level=DEBUG
handlers=consoleHandler,eventFileHandler
qualname=event
propagate=0

[handler_consoleHandler]
class=StreamHandler
level=INFO
formatter=consoleFormatter
args=(sys.stdout,)

[handler_seekerFileHandler]
class=FileHandler
level=DEBUG
formatter=logFormatter
args=('seeker.log','a')

[handler_eventFileHandler]
class=FileHandler
level=DEBUG
formatter=logFormatter
args=('event.log','a')

[formatter_consoleFormatter]
format=%(asctime)s - thread:%(thread)d - %(name)s - %(levelname)s | %(message)s
datefmt=%m/%d/%Y %X

[formatter_logFormatter]
format=%(asctime)s | %(message)s
datefmt=%m/%d/%Y %X

通常我会:

import logging
from logging.config import fileConfig
from os import getcwd

fileConfig(''.join([getcwd(),'/logging.conf']))
event_logger = logging.getLogger("event")
seeker_logger = logging.getLogger("seeker")

处理每个记录器。但是,我倾向于在两个不同的平台上运行该软件:Windows 和 Linux,因此如果它们各自将其保存在“公共”位置会更好。我正在寻找的是这样的:

from sys import platform
if 'win' in platform:
    #alter the save path to this location
if 'linux' in platform:
    #alter save path to this location

但我不知道如何使用配置文件来实现这一点,有什么想法吗?

【问题讨论】:

  • 顺便说一句,为什么不直接使用fileConfig('logging.conf')
  • 我不认为您可以使用配置文件以声明方式执行此操作,因此您可以为每个平台拥有两个大部分相似的配置文件并根据平台选择要加载的配置文件,或者您在加载通用配置以设置正确的目标文件后,猴子修补文件处理程序对象。
  • ...getcwd 是当前目录;真的没有意义(你获得零额外安全)。
  • @nneonneo 嘿,你赢了,你进来了,在帮助论坛上制造了一个离题的谴责,干得好。

标签: python logging python-2.7 config


【解决方案1】:

你有两个选择。

  1. logging-linux.conffile 和logging-win.conffile 与您的不同路径一起使用,并将它们加载到您的平台测试中。

  2. 不要使用配置文件,而是将记录器的创建委托给您自己的模块,并在创建FileHandler 实例时进行平台测试。

要采用的解决方案取决于代码的复杂性。如果您正在构建库,请查看此页面:http://docs.python.org/howto/logging.html#configuring-logging-for-a-library

【讨论】:

  • 嗯,所以没有办法融合2?要么我保留两个配置文件,要么通过代码做所有事情,这将使我失去运行时级别改变拥有配置文件的好处......哦,谢谢。
  • 我不这么认为...我遇到过类似的问题,但从未找到适当混合这两种方法的解决方案。
猜你喜欢
  • 1970-01-01
  • 2018-10-12
  • 2013-01-02
  • 2018-03-14
  • 1970-01-01
  • 2020-01-03
  • 1970-01-01
  • 2010-09-30
  • 1970-01-01
相关资源
最近更新 更多