Python 如何格式化日志,使其以列形式打印?
我有一个项目,其中不同的线程和函数使用不同的日志级别登录到控制台中相同的Python 如何格式化日志,使其以列形式打印?,python,logging,string-formatting,Python,Logging,String Formatting,我有一个项目,其中不同的线程和函数使用不同的日志级别登录到控制台中相同的StreamHandler() 我的日志格式化为: streamformatter = logging.Formatter(fmt='%(levelname)s:\t%(threadName)s:\t%(funcName)s:\t\t%(message)s', datefmt='%H:%M:%S') 这使得我的日志在默认情况下看起来像这样乱七八糟,在什么时候调用什么函数以及从哪个线程调用函数都不容易看到 INFO: C
StreamHandler()
我的日志格式化为:
streamformatter = logging.Formatter(fmt='%(levelname)s:\t%(threadName)s:\t%(funcName)s:\t\t%(message)s', datefmt='%H:%M:%S')
这使得我的日志在默认情况下看起来像这样乱七八糟,在什么时候调用什么函数以及从哪个线程调用函数都不容易看到
INFO: COM14-fwcif-listener : _receive_v32: my_success: Sending 24 lines to formatter
DB_TRACE: COM14-fwcif-listener : _format_and_log_v32: {"prompt": "undef-COM14", "x_type": "tracelogentry", "y_time": 1392695506.044583, "z_msg": "...."}
INFO: COM13-fwutil-listener: _receive_v32: my_success: Sending 10 lines to formatter
DB_TRACE: COM13-fwutil-listener: _format_and_log_v32: {"prompt": "undef-COM13", "x_type": "tracelogentry", "y_time": 1392695507.356714, "z_msg": "...."}
INFO: MainThread: _parse: my_resolve after 4.9784979820251465 seconds and 29 vs 8 attempts
MY_INFO: MainThread: _parse: my_success for cmd "trig" =>> "not ready". COM12.ISREADY now set to True
INFO: MainThread: send: my_success. Lock being released: <_thread.RLock owner=7512 count=1> with cmd "format c:" and state COM12.ISREADY = False
INFO: COM12-fwmain-listener: _receive_v32: my_success: Number of lines split by S65 is 2 of 16 total lines
INFO: COM12-fwmain-listener: _format_and_log_v32: my_resolve "S65>" added as COM12.lastlinefragment
INFO: COM12-fwmain-listener: _format_and_log_v32: my_success: 575 chars written to log. Prompt and type detected is "S65>" and "replylogentry: format"
DB_REPLY: COM12-fwmain-listener: _format_and_log_v32: {"prompt": "S65>", "x_type": "replylogentry: format", "y_time": 1392695510.41302, "z_msg": "..."}
INFO: MainThread: _parse: my_resolve searching for "format"=>"Unknown command" in string "..."
INFO:COM14 fwcif侦听器:_receive_v32:my_success:向格式化程序发送24行
DB_TRACE:COM14 fwcif侦听器:_格式_和_日志_v32:{“提示符”:“undf-COM14”,“x_类型”:“TraceGentry”,“y_时间”:1392695506.044583,“z_消息”:“…”}
信息:COM13 fwutil侦听器:_receive_v32:my_success:向格式化程序发送10行
DB_TRACE:COM13 fwutil侦听器:_格式_和_日志_v32:{“提示符”:“undef-COM13”,“x_类型”:“TraceGentry”,“y_时间”:1392695507.356714,“z_消息”:“…”}
信息:主线程:_解析:在4.9784979820251465秒和29次对8次尝试后我的_解析
MY_INFO:main thread:_parse:MY_cmd“trig”=>>“not ready”成功。COM12.i现在已设置为True
信息:主线程:发送:我的成功。正在释放的锁:使用cmd“format c:”和状态COM12.ISREADY=False
信息:COM12 fwmain侦听器:_receive_v32:my_success:S65拆分的行数是16行总数的2行
信息:COM12 fwmain侦听器:_format_和_log_v32:my_resolve“S65>”添加为COM12.lastlinefragment
信息:COM12 fwmain侦听器:_format_和_log_v32:my_success:575个字符写入日志。检测到的提示和类型为“S65>”和“ReplyGentry:格式”
DB_REPLY:COM12 fwmain listener:_format_和_log_v32:{“prompt”:“S65>”,“x_type”:“replygentry:format”,“y_time”:1392695510.41302,“z_msg”:“…”}
信息:主线程:_解析:我的解析搜索字符串“…”中的“格式”=>“未知命令”
每个令牌的宽度可以在streamformatter
中指定,以这种方式生成固定冒号的日志输出:
streamformatter = logging.Formatter(fmt='%(levelname)-10s: %(threadName)-20s: %(funcName)-20s: %(message)s', datefmt='%H:%M:%S')