簡體   English   中英

Python中的日志模塊可以注銷沒有格式字符串的數據

[英]Can logging module in Python log out data without the format string

使用日志記錄模塊時,我有時想打印一個簡單的行,而不將格式字符串(打印日期)應用於 output。

我可能想記錄一個沒有由格式字符串設置的時間戳的分隔線。 或者,我的代碼可能會在日志事件之間執行多個操作並導致另一個字符串被記錄。 這可能嗎? 例子:

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

output 看起來像:

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

我在 Macintosh 上的 Python 3.7 中。 我的記錄器 class 沒有直接打開文件,只是使用 logging.BasicConfig() 來讓事情滾動。

我已修改您的代碼以執行您的要求。 想法是將格式化程序設置為 output 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM