有时会看到巨大的日志消息,并且不总是能够(轻松地)翻阅自动换行。
有没有办法通过%message
将logback.xml
截断为80个字符?
答案 0 :(得分:6)
查看格式修饰符部分:
来自http://logback.qos.ch/manual/layouts.html#formatModifiers:
格式修饰符
默认情况下,相关信息按原样输出。但是,借助格式修饰符,可以更改每个数据字段的最小和最大宽度以及理由。
...
可以通过在句点之后添加减号字符来结束截断。在这种情况下,如果最大字段宽度为8且数据项长度为10个字符,则数据项的最后两个字符将被删除。
答案 1 :(得分:1)
如果您只需要截断消息,Adrian的答案就很棒。但是在我的情况下,我想在真正截断的消息的情况下添加“... [truncated]”。
我为此目的使用a custom convertors机制 - 执行以下步骤:
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();
}
}
<conversionRule conversionWord="boundedMsg" converterClass="your.package.LongMessagesConverter"/>