在python日志记录中将多个处理程序移至同一日志文件

时间:2019-12-03 09:00:13

标签: python python-logging

在python日志配置中是否可能有多个日志处理程序引用同一个日志文件。我可以通过在handler_two对象中再添加一个处理程序handlers来使其工作,但这似乎是一个样板。

"handler_two": {
      "level": "DEBUG",
      "class": "logging.handlers.TimedRotatingFileHandler",
      "formatter": "verbose",
      "filename": "{}/abc.log".format(log_folder),
      "when": "midnight",
      "backupCount": 10,
      "encoding": "utf8"
    },

logging.conf-

  "version": 1,
  "disable_existing_loggers": False,
  "formatters": {
    "verbose": {
      "format": "%(asctime)s  %(name)s  %(levelname)s  (PID: %(process)d) %(message)s",
      "datefmt": "%d/%m/%Y %I:%M:%S %p %Z"
    },
    "simple": {
      "format": "%(asctime)s  %(name)s %(levelname)s >  %(message)s"
    }
  },
  "handlers": {
    "handler_one": {
      "level": "DEBUG",
      "class": "logging.handlers.TimedRotatingFileHandler",
      "formatter": "verbose",
      "filename": "{}/abc.log".format(log_folder),
      "when": "midnight",
      "backupCount": 10,
      "encoding": "utf8"
    },
    "error": {
      "level": "ERROR",
      "class": "logging.handlers.TimedRotatingFileHandler",
      "formatter": "verbose",
      "filename": "{}/error.log".format(log_folder),
      "when": "midnight",
      "backupCount": 10,
      "encoding": "utf8"
    }
  },
  "root": {
    "level": "ERROR",
    "handlers": [
      "error"
    ]
  },
  "loggers": {
    "handler_one": {
      "level": "DEBUG",
      "handlers": [
        "handler_one"
      ],
      "propagate": "false"
    },
  }
}

1 个答案:

答案 0 :(得分:2)

可以通过自己打开文件流并将其传递给流处理程序来实现,如下所示:

import logging

logger = logging.getLogger()
logger.setLevel(logging.INFO)

stream = open("test.log", "a")

handler_1 = logging.StreamHandler(stream)
logger.addHandler(handler_1)
handler_2 = logging.StreamHandler(stream)
logger.addHandler(handler_2)

logger.info("test log")

test.log文件将包含以下内容:

test log
test log