对齐不同级别的日志消息

7 投票
1 回答
3406 浏览
提问于 2025-04-17 19:44

我正在使用Python的logging模块,代码是这样的:

class InitLogging():
    def LogModule(self):
        self.Logger          = logging.getLogger("_TCP_Logger")
        self.Logger.LogLevel = logging.DEBUG
        self.Logger.setLevel(self.Logger.LogLevel)
        self.fh              = logging.FileHandler("Log.txt")
        self.fh.level        = logging.DEBUG
        self.formatter       = logging.Formatter('%(asctime)s %(levelname)s %(message)8s')
        self.Logger.addHandler(self.fh)        
        self.Logger.log(logging.INFO,"=====================================")
        self.Logger.log(logging.INFO,"Start Logging Module!!")
        self.Logger.log(logging.INFO,"=====================================")
        self.fh .setFormatter(self.formatter)
        self.Logger.log(logging.INFO,"Enrty to Logging Module!!")

class LogMsg(InitLogging):
    def Logit(self):
        self.LogModule()
        self.Logger.log(logging.DEBUG,'This is Debugging Message!!')
        self.Logger.log(logging.INFO,"This is Info Message!!")
        self.Logger.log(logging.WARNING,"This is WARNING Message!!")

LoggingInstance = LogMsg()
LoggingInstance.Logit()

当我运行我的代码时,Log.txt文件里会输出以下内容:

=====================================
Start Logging Module!!
=====================================

2013-03-20 17:51:35,135 INFO Enrty to Logging Module!!
2013-03-20 17:51:35,135 DEBUG This is Debugging Message!!
2013-03-20 17:51:35,135 INFO This is Info Message!
2013-03-20 17:51:35,135 WARNING This is WARNING Message!!

但是我希望能把不同日志级别的消息对齐,输出看起来像这样:

=====================================
Start Logging Module!!
=====================================
2013-03-20 17:51:35,135 INFO       Enrty to Logging Module!!
2013-03-20 17:51:35,135 DEBUG      This is Debugging Message!!
2013-03-20 17:51:35,135 INFO       This is Info Message!
2013-03-20 17:51:35,135 WARNING    This is WARNING Message!!

我该怎么做呢?

1 个回答

16

在格式化字符串中给levelname字段添加一个宽度。

这是左对齐的:

self.formatter = logging.Formatter('%(asctime)s %(levelname)-10s %(message)s')

                         levelname
                       |----------|
2013-03-20 16:46:50,573 INFO       Enrty to Logging Module!!
2013-03-20 16:46:50,573 DEBUG      This is Debugging Message!!
2013-03-20 16:46:50,573 INFO       This is Info Message!!
2013-03-20 16:46:50,573 WARNING    This is WARNING Message!!

这是右对齐的:

self.formatter = logging.Formatter('%(asctime)s %(levelname)10s %(message)s')

                         levelname
                       |----------|
2013-03-20 16:51:04,648       INFO Enrty to Logging Module!!
2013-03-20 16:51:04,650      DEBUG This is Debugging Message!!
2013-03-20 16:51:04,650       INFO This is Info Message!!
2013-03-20 16:51:04,650    WARNING This is WARNING Message!!
                       |0123456789|
                       | width=10 |

字符串格式化文档

撰写回答