Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何获取当前日志格式化程序?_Python_Logging - Fatal编程技术网

Python 如何获取当前日志格式化程序?

Python 如何获取当前日志格式化程序?,python,logging,Python,Logging,我正在使用python标准库中的日志模块,希望获得当前的格式化程序。原因是我使用的是多处理模块,对于每个进程,我希望为其记录器分配另一个文件处理程序,以便将其日志记录到自己的日志文件中。当我用下面的方法做这件事的时候 logger=logging.getLogger('subprocess')) 日志路径='log.txt' 打开(日志路径“a”)作为输出文件: handler=logging.StreamHandler(outfile) logger.addHandler(处理程序) log

我正在使用python标准库中的日志模块,希望获得当前的
格式化程序。原因是我使用的是
多处理
模块,对于每个进程,我希望为其记录器分配另一个文件处理程序,以便将其日志记录到自己的日志文件中。当我用下面的方法做这件事的时候

logger=logging.getLogger('subprocess'))
日志路径='log.txt'
打开(日志路径“a”)作为输出文件:
handler=logging.StreamHandler(outfile)
logger.addHandler(处理程序)
log.txt
中的消息根本没有格式,但我希望消息的格式与我的典型日志格式相同。我的典型日志设置如下所示

logging.basicConfig(
格式='%(asctime)s |%(levelname)s |%(name)s-%(进程)d |%(消息)s',
datefmt=“%Y-%m-%d%H:%m:%S”,
level=os.environ.get('LOGLEVEL','INFO').upper(),
)
logger=logging.getLogger(_名称__)
由于
格式化程序
对象似乎与
处理程序
对象关联,因此我尝试从具有正确格式的主
记录器
对象获取处理程序。所以我打了电话

logger.handlers
但是我得到了一个空列表
[]

所以我的问题是,我从哪里获得与我的主记录器具有相同格式的
Formatter
对象


作为记录,我在macOS上使用python 3.8,但代码将部署到Linux(但仍然是python 3.8)。

根据
logging.basicConfig
上的
cpython
源代码判断,似乎包含格式化字符串的格式化程序对象最终被添加到传递给根记录器的处理程序中(请参阅:)。因此,您可以通过执行以下操作从根记录器对象获取处理程序(以及格式化程序)

logging.root.handlers[0]。格式化程序
特别是,要实现问题中的子流程日志记录处理程序,您可以这样做

handler=logging.StreamHandler(outfile)
handler.setFormatter(logging.root.handlers[0].formatter)
handler.setLevel(logging.root.level)
logger.addHandler(处理程序)
这会将处理程序设置为与常用记录器对象相同的日志记录格式(以及级别!)