Align logging messages of different levels

logging, module, python

Solution

Add a width to the `levelname` field in the formatter's format string.

This is left-aligned:

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!!

This is right-aligned:

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 |

String formatting documentation

Problem

I'm using Python's `logging` module like this: ``` 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() ``` When I run my code I get the output below in `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!! ``` But I'd like to align messages of different log levels together, producing output like below: ``` ===================================== 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!! ``` How can I do this?

Original source