log4j中限制日志消息最大长度设置无效问题求助
Log4j2日志消息长度限制失效问题
我尝试用%.-1000m语法限制Log4j2日志事件的消息字符数,但该设置完全没有效果。我已经查阅过相关问题,调整过%m的各种参数值,问题依旧存在。
我的Log4j2配置代码如下:
<?xml version="1.0" encoding="UTF-8"?> <Configuration status="WARN"> <Properties> <Property name="log-path">${sys:root}/var/output/logs</Property> </Properties> <Appenders> <Socket name="ApplicationTcp" host="localhost" port="5170" ignoreExceptions="false"> <!-- to reduce logging volume. --> <PatternLayout> <Pattern>{ "timestamp": "%d{ISO8601}", "logger": "%c","threadName": "%t"%notEmpty{, "requestId": "%X{RequestId}"}%notEmpty{, "message": "%enc{%.-1000m{nolookups}}{JSON}"}%notEmpty{, "exception": "%enc{%ex{full}}{JSON}"} }%n</Pattern> </PatternLayout> </Socket> <!-- 其他Appender配置 --> ... </PatternLayout> </Socket> </Appenders> </Configuration>
可行的解决思路
- 确认Log4j2版本:
%.lengthm的截断语法从Log4j2 2.4版本开始支持,若你使用的版本低于这个,直接升级到最新稳定版即可。 - 修正截断语法:去掉
%m前的减号,改为%.1000m{nolookups}。Log4j2中,%.Nm表示将消息截断至N个字符,减号属于无效语法,会导致规则不生效。 - 排除编码嵌套干扰:先单独使用
%.1000m{nolookups}测试消息截断是否生效,确认后再重新添加%enc{}{JSON}编码包装,避免编码逻辑覆盖截断规则。 - 备选方案:如果上述方法都无效,可以使用Log4j2的
MessagePatternSelector组件,或者编写自定义消息过滤器来实现日志消息的长度限制。
内容的提问来源于stack exchange,提问作者Rob
相关产品推荐
相关产品推荐

