python 日志记录中同一日志文件的多个处理程序

Pro*_*Pro 3 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"
    },
Run Code Online (Sandbox Code Playgroud)

日志记录.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"
    },
  }
}
Run Code Online (Sandbox Code Playgroud)

cic*_*lus 5

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

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")
Run Code Online (Sandbox Code Playgroud)

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

test log
test log
Run Code Online (Sandbox Code Playgroud)