使用python logging`%(funcName)s`时,你能缩短日志标题吗?

时间:2016-09-22 16:22:47

标签: python logging instrumentation

有时我使用%(funcName)s配置python日志格式化程序。但是当函数名称很长时,我不喜欢这个。

使用python logging %(funcName)s时,是否可以缩短日志标头?如果是,怎么做?

你能说...将字符总数限制为10个字符吗?

2 个答案:

答案 0 :(得分:2)

日志记录格式字符串中的%(...)s项是%替换项,您可以通过执行%(funcName).10s

之类的操作来限制字符串替换的长度

e.g。

import logging

logging.basicConfig(
    format='%(funcName).10s %(message)s',
    level=logging.INFO,
)

logger = logging.getLogger()

def short():
    logger.info("I'm only little!")

def really_really_really_really_long():
    logger.info("I'm really long")

short()
really_really_really_really_long()

给出

andy@batman[17:54:01]:~$ p tmp_x.py 
short I'm only little!
really_rea I'm really long

答案 1 :(得分:0)

您可以扩展logging.formatter类以获得所需的格式,如下所示。

这只是一个例子。你应该根据你的要求修改它 class MyFormatter(logging.Formatter):     in_console = False     def init (个体经营):         self.mod_width = 30         self.datefmt ='%H:%M:%S'

def format(self, record):
    s = []
    cmodule = record.module + ":" + str(record.lineno)
    cmodule = cmodule[-self.mod_width:].ljust(self.mod_width)
    format_str = ("%-7s %s %s" % (record.levelname, self.formatTime(record, self.datefmt), cmodule))
    pad_len = len(format_str)
    for line in record_msg[1:]:
        line =  " " * pad_len + " : " + line
        s.append(line)

    s = "%s : %s" % (format_str, "\n".join(s))
    return s

my_formatter = MyFormatter()
log.setFormatter(my_formatter)