可以将回溯消息字段截断/修剪为n个字符吗?

时间:2015-09-21 20:59:45

标签: logback

有时会看到巨大的日志消息,并且不总是能够(轻松地)翻阅自动换行。

有没有办法通过%messagelogback.xml截断为80个字符?

2 个答案:

答案 0 :(得分:6)

查看格式修饰符部分:

来自http://logback.qos.ch/manual/layouts.html#formatModifiers

格式修饰符

默认情况下,相关信息按原样输出。但是,借助格式修饰符,可以更改每个数据字段的最小和最大宽度以及理由。

...

可以通过在句点之后添加减号字符来结束截断。在这种情况下,如果最大字段宽度为8且数据项长度为10个字符,则数据项的最后两个字符将被删除。

答案 1 :(得分:1)

如果您只需要截断消息,Adrian的答案就很棒。但是在我的情况下,我想在真正截断的消息的情况下添加“... [truncated]”。

我为此目的使用a custom convertors机制 - 执行以下步骤:

  1. 定义自定义转换器:
  2. public class LongMessagesConverter extends ClassicConverter {
        private static final int MAX_FORMATTED_MESSAGE_LENGTH = 25600;
        private static final String TRUNCATION_SUFFIX = "... [truncated]";
        private static final int TRUNCATED_MESSAGE_SIZE =
                TRUNCATION_SUFFIX.length() + MAX_FORMATTED_MESSAGE_LENGTH;
    
    @Override
    public String convert(ILoggingEvent event) {
        String formattedMessage = event.getFormattedMessage();
        if (formattedMessage == null || 
                     formattedMessage.length() < MAX_FORMATTED_MESSAGE_LENGTH) {
            return formattedMessage;
        }
        return new StringBuilder(TRUNCATED_MESSAGE_SIZE)
                .append(formattedMessage.substring(0, MAX_FORMATTED_MESSAGE_LENGTH))
                .append(TRUNCATION_SUFFIX)
                .toString();
        }
    }
    
    1. 将以下定义添加到logback.xml中:
    2. <conversionRule conversionWord="boundedMsg" converterClass="your.package.LongMessagesConverter"/>
      
      1. 用消息格式模式中的%boundedMsg 替换%msg 令牌