Python的记录模块能否在没有格式字符串的情况下记录数据?

2024-10-03 09:09:20 发布

您现在位置:Python中文网/ 问答频道 /正文

当使用日志模块时,我有时希望打印一个简单的行,而不将格式字符串(Prints Date)应用于输出

我可能想记录一个没有时间戳的分隔行,该时间戳是由set by format字符串创建的。或者,我的代码可能在日志事件之间执行多个操作,并导致记录另一个字符串。这可能吗?示例:

class Logger( ):
    def __init__( self, path ):
        msgFormat   = '%(asctime)s.%(msecs)d\t%(message)s'
        dateFormat  = '%m/%d/%Y %H:%M:%S'
        logging.basicConfig( format=msgFormat, datefmt=dateFormat, filename=path, level=logging.INFO )

    def Log ( self, theStr ):
        logging.info( str( theStr ))


log = Logger( validPath )
log.SimpleLog( '-' * 4 )
log.Log( 'Some message' )
# Do some more stuff here
log.SimpleLog( '    Write some more stuff here' )
# Do some more stuff here

输出如下所示:

----
11/13/2019 Some Message
    Write some more stuff here

我使用的是Macintosh上的Python3.7。我的logger类不直接打开文件,只是使用logging.BasicConfig()来启动


Tags: path字符串selflogformathereloggingdef
1条回答
网友
1楼 · 发布于 2024-10-03 09:09:20

我已经修改了你的代码来满足你的要求。其思想是将格式化程序设置为只在SimpleLog中输出消息,并在日志完成后将其恢复为以前的格式。这是一个快速而肮脏的解决方案,如果您想在更大的代码库中获得更可持续的东西,最好的方法是使用一个定制的格式化程序来检查extra并根据某个键添加时间

import logging

class Logger( ):
    msgFormat   = '%(asctime)s.%(msecs)d\t%(message)s'
    simpleFormat = '%(message)s'
    dateFormat  = '%m/%d/%Y %H:%M:%S'

    def __init__( self, path ):
        logging.basicConfig( format=self.msgFormat, datefmt=self.dateFormat, filename=path, level=logging.INFO )

    def Log ( self, theStr ):
        logging.info( str( theStr ))

    def SimpleLog( self, theStr ):
        for handler in logging.getLogger().handlers:
            handler.setFormatter(logging.Formatter(self.simpleFormat, self.dateFormat))
        logging.info( str( theStr ))

        for handler in logging.getLogger().handlers:
            handler.setFormatter(logging.Formatter(self.msgFormat, self.dateFormat))

validPath='logs.txt'

log = Logger( validPath )
log.SimpleLog( '-' * 4 )
log.Log( 'Some message' )
# Do some more stuff here
log.SimpleLog( '    Write some more stuff here' )
# Do some more stuff here

相关问题 更多 >