背景
一些常见的跨平台日志收集平台,如阿里云日志,一般都是按一行作为一条日志记录。
python默认的输出会将消息原样输出,如果有异常的话,会将异常堆栈多行形式返回。不方便进行日志的收集分析。所以需要将其输出为一行。
解决方案
如下,直接copy到项目中使用即可
class MyFormatter(logging.Formatter):
'''将换行转义'''
def format(self, record):
msg: str = super().format(record)
return msg.replace('\r\n', '\n').replace('\r', '\n').replace('\n', '\\n')
def get_logger(logger_name=None, level=logging.INFO):
logger = logging.getLogger(logger_name)
logger.setLevel(level)
logger.propagate = False
if logger.hasHandlers():
return logger
# Warning及以下的输出到stdout
formatter = MyFormatter(fmt='%(asctime)s %(process)d %(levelname)s %(message)s')
low_handler = logging.StreamHandler(sys.stdout)
low_handler.setLevel(level)
low_handler.setFormatter(fo