我有一个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__)
由于我已经更改了日志记录方法,使用配置文件进行日志记录,因此我的.log文件中有很多日志行,因为我的类中的所有导入模块(例如:apscheduler,werkzeug,...)都使用此配置文件在我的日志文件中记录他们的消息,这以前没有发生过。
以前:
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)
我只想编写自己的日志消息。我该如何解决它?
多谢!
首先(稍微不相关,但无论如何......)您的配置中有一个错误:您的根记录器是在顶层定义的,而不是在loggers
键下。
然后,您可能希望将根记录器的级别设置得更高(警告或错误 - 警告是默认设置和明智的级别),以便您只从其他库的记录器获得最重要的消息。
完成后,您还可以使用两个不同的处理程序 - 一个用于根记录器,另一个用于您自己的库 - 因此您可以获得一个日志,其中包含来自所有库(包括您的库)的重要消息,另一个日志包含来自您自己的库的所有消息,而没有来自其他库的任何消息。
在logging.json
中disable_existing_loggers
设置为true
。