使用python中的json配置文件修复太多日志

时间:2015-04-10 14:50:46

标签: python json python-3.x logging

我有一个python应用程序,它每天都在变大,现在我正在尝试更改其日志系统。因此,我为记录属性准备了一个json配置文件。像这样:

{
    "version": 1,
    "disable_existing_loggers": false,
    "formatters": {
        "simple": {
            "format": "%(asctime)s - %(name)s - %(levelname)s - %(message)s",
            "datefmt": "%Y-%m-%d %H:%M:%S"
        }
    },

    "handlers": {
        "rotate_timed": {
            "level": "DEBUG",
            "class": "logging.handlers.TimedRotatingFileHandler",
            "formatter": "simple",
            "when": "midnight",
            "backupCount": 5,
            "filename": "/var/log/v4m_agentd.log",
            "encoding": "utf8"
        }
    },

    "loggers": {
        "my_module": {
            "level": "DEBUG",
            "handlers": ["rotate_timed"]
        }
    },

    "root": {
        "level": "DEBUG",
        "handlers": ["rotate_timed"],
        "propagate": false
    }
}

我的主程序使用以下方式获取记录器属性:

logging_config_json_file = open(os.path.join(os.path.dirname(os.path.realpath(__file__)), "logging.json"))
parsed_logging_data = json.load(logging_config_json_file)
logging.config.dictConfig(parsed_logging_data)

我的模块调用记录器,如:

class StoreData(object):
    def __init__(self):
        self.logger = logging.getLogger(__name__)

由于我已经更改了日志记录方法,使用配置文件进行记录,因为我的类中的所有导入模块(例如:apscheduler,werkzeug,...),我的.log文件中有很多日志行。 )正在使用此配置文件在我的日志文件中登录他们的消息,这在以前不会发生。

在:

2015-04-09 10:29:18 - Agent Get Data - DEBUG - GETTING DATA
2015-04-09 10:29:18 - Prepare DB Data - DEBUG - -----Init prepare data for DB-----
2015-04-09 10:29:21 - Jobs Listener - INFO - The job 'Get Data' worked :)       Next run at: 2015-04-09 10:29:23

后:

2015-04-10 10:27:59 - Agent Get Data - DEBUG - GETTING DATA
2015-04-10 10:27:59 - Prepare DB Data - DEBUG - -----Init prepare data for DB-----
2015-04-10 10:28:02 - apscheduler.executors.default - INFO - Job "Get Data (trigger: interval[0:00:05], next run at: 2015-04-10 10:28:04 CEST)" executed successfully
2015-04-10 10:28:02 - Jobs Listener - INFO - The job 'Get Data' worked :)       Next run at: 2015-04-10 10:28:04
2015-04-10 10:28:04 - apscheduler.scheduler - DEBUG - Looking for jobs to run
2015-04-10 10:28:04 - apscheduler.scheduler - DEBUG - Next wakeup is due at 2015-04-10 10:28:09.847414+02:00 (in 4.998605 seconds)
2015-04-10 10:28:04 - apscheduler.executors.default - INFO - Running job "Get Data (trigger: interval[0:00:05], next run at: 2015-04-10 10:28:09 CEST)" (scheduled at 2015-04-10 10:28:04.847414+02:00)

我只想写自己的日志消息。我怎么能解决它?

非常感谢!

2 个答案:

答案 0 :(得分:1)

首先(有点不相关,但无论如何...),您的配置中有一个错误:您的根记录器是在顶层定义的,而不是在loggers键下。

然后,您可能希望将根记录器的级别设置得更高(“警告”或“错误-警告”是默认值,并且是明智的选择),因此您只能从其他lib记录器中获取最重要的消息。

完成后,您还可以使用两个不同的处理程序-一个用于root记录程序,一个专用于您自己的lib的处理程序-这样,您将获得一条包含所有libs(包括您自己的)的重要消息的日志,并获得包含所有libs的另一个日志来自您自己的库的消息,而没有来自其他库的消息。

答案 1 :(得分:0)

您必须在disable_existing_loggers中将true设置为logging.json