diff options
author | Anton Tananaev <anton@traccar.org> | 2024-06-09 13:37:45 -0700 |
---|---|---|
committer | Anton Tananaev <anton@traccar.org> | 2024-06-09 13:37:45 -0700 |
commit | e92dea78ebad3f921c031a974378a218c6bd90b1 (patch) | |
tree | 4e9f39855c9137fb203dde85ec16535ee0cdce10 /src/main/java/org/traccar | |
parent | 2147ecb2d9fe0fb49b3f03dc650bc363e72e3fd2 (diff) | |
download | trackermap-server-e92dea78ebad3f921c031a974378a218c6bd90b1.tar.gz trackermap-server-e92dea78ebad3f921c031a974378a218c6bd90b1.tar.bz2 trackermap-server-e92dea78ebad3f921c031a974378a218c6bd90b1.zip |
Decode text data in logs (fix #5336)
Diffstat (limited to 'src/main/java/org/traccar')
-rw-r--r-- | src/main/java/org/traccar/config/Keys.java | 8 | ||||
-rw-r--r-- | src/main/java/org/traccar/handler/network/StandardLoggingHandler.java | 20 |
2 files changed, 27 insertions, 1 deletions
diff --git a/src/main/java/org/traccar/config/Keys.java b/src/main/java/org/traccar/config/Keys.java index 91d5dac5d..e51ba07c4 100644 --- a/src/main/java/org/traccar/config/Keys.java +++ b/src/main/java/org/traccar/config/Keys.java @@ -1902,6 +1902,14 @@ public final class Keys { true); /** + * If all bytes are printable characters, log network data as text instead of HEX. + */ + public static final ConfigKey<Boolean> LOGGER_TEXT_PROTOCOL = new BooleanConfigKey( + "logger.decodeTextData", + List.of(KeyType.CONFIG), + true); + + /** * Log file rotation interval, the default rotation interval is once a day. * This option is ignored if 'logger.rotate' = false * Available options: day, hour diff --git a/src/main/java/org/traccar/handler/network/StandardLoggingHandler.java b/src/main/java/org/traccar/handler/network/StandardLoggingHandler.java index dae93655d..f6ee08756 100644 --- a/src/main/java/org/traccar/handler/network/StandardLoggingHandler.java +++ b/src/main/java/org/traccar/handler/network/StandardLoggingHandler.java @@ -24,22 +24,33 @@ import jakarta.inject.Inject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.traccar.NetworkMessage; +import org.traccar.config.Config; +import org.traccar.config.Keys; +import org.traccar.helper.BufferUtil; import org.traccar.helper.NetworkUtil; import org.traccar.model.LogRecord; import org.traccar.session.ConnectionManager; +import java.nio.charset.StandardCharsets; + public class StandardLoggingHandler extends ChannelDuplexHandler { private static final Logger LOGGER = LoggerFactory.getLogger(StandardLoggingHandler.class); private final String protocol; private ConnectionManager connectionManager; + private boolean decodeTextData; public StandardLoggingHandler(String protocol) { this.protocol = protocol; } @Inject + public void setConfig(Config config) { + decodeTextData = config.getBoolean(Keys.LOGGER_TEXT_PROTOCOL); + } + + @Inject public void setConnectionManager(ConnectionManager connectionManager) { this.connectionManager = connectionManager; } @@ -66,7 +77,14 @@ public class StandardLoggingHandler extends ChannelDuplexHandler { if (networkMessage.getMessage() instanceof ByteBuf) { LogRecord record = new LogRecord(ctx.channel().localAddress(), networkMessage.getRemoteAddress()); record.setProtocol(protocol); - record.setData(ByteBufUtil.hexDump((ByteBuf) networkMessage.getMessage())); + ByteBuf data = (ByteBuf) networkMessage.getMessage(); + if (decodeTextData && BufferUtil.isPrintable(data, data.readableBytes())) { + record.setData(data.getCharSequence( + data.readerIndex(), data.readableBytes(), StandardCharsets.US_ASCII).toString() + .replace("\r", "\\r").replace("\n", "\\n")); + } else { + record.setData(ByteBufUtil.hexDump(data)); + } return record; } } |