logback 消息字段可以是 truncated/trimmed 到 n 个字符吗?
Can a logback message field be truncated/trimmed to n characters?
有时会看到巨大的日志消息,但并不总是能够(轻松)关闭自动换行。
有没有办法通过 logback.xml
将 %message
截断为 80 个字符?
查看格式修饰符部分:
来自http://logback.qos.ch/manual/layouts.html#formatModifiers:
格式修饰符
默认情况下,相关信息按原样输出。但是,在格式修饰符的帮助下,可以更改最小和最大宽度以及每个数据字段的对齐方式。
...
可以通过在句点后紧跟一个负号来截断末尾。在那种情况下,如果最大字段宽度为八,数据项长度为十个字符,则数据项的最后两个字符将被删除。
如果您只需要截断消息,Adrian 的回答就很好。但是在我的例子中,我想在消息真正被截断的情况下添加“... [截断]”。
我为此使用了 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();
}
}
- 将以下定义添加到您的 logback.xml 中:
<conversionRule conversionWord="boundedMsg" converterClass="your.package.LongMessagesConverter"/>
- 用 %boundedMsg 替换消息格式模式中的 %msg 标记
有时会看到巨大的日志消息,但并不总是能够(轻松)关闭自动换行。
有没有办法通过 logback.xml
将 %message
截断为 80 个字符?
查看格式修饰符部分:
来自http://logback.qos.ch/manual/layouts.html#formatModifiers:
格式修饰符
默认情况下,相关信息按原样输出。但是,在格式修饰符的帮助下,可以更改最小和最大宽度以及每个数据字段的对齐方式。
...
可以通过在句点后紧跟一个负号来截断末尾。在那种情况下,如果最大字段宽度为八,数据项长度为十个字符,则数据项的最后两个字符将被删除。
如果您只需要截断消息,Adrian 的回答就很好。但是在我的例子中,我想在消息真正被截断的情况下添加“... [截断]”。
我为此使用了 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();
}
}
- 将以下定义添加到您的 logback.xml 中:
<conversionRule conversionWord="boundedMsg" converterClass="your.package.LongMessagesConverter"/>
- 用 %boundedMsg 替换消息格式模式中的 %msg 标记