在我的骆驼路线中,我使用骆驼的日志eip作为:
from("direct:someSourceWithBodyOfTypeMap")
.marshal().json(JsonLibrary.Jackson)
.to("direct:logHandler");
// on a separate route builder
from("direct:logForFilebeat")
.convertBodyTo(String.class, "UTF-8")
.log(LoggingLevel.INFO, "jsonLogger","${body}");
此路由的目的是将Map类型的源封送至json,并记录稍后由日志聚合器获取的主体。我在日志中使用logback。logback-spring.xml的一部分如下所示:
<appender name="JSON_TX" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${BASE_LOG_PATH}/json.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${BASE_LOG_PATH}/json.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder>
<charset>UTF-8</charset>
<pattern>%msg%n</pattern>
</encoder>
</appender>
<appender name="ASYNC_JSON_TX" class="ch.qos.logback.classic.AsyncAppender">
<appender-ref ref="JSON_TX" />
</appender>
<logger name="jsonLogger" level="INFO">
<appender-ref ref="ASYNC_FILEBEAT_TX" />
</logger>
在正常流中,它被正确地记录为json字符串,如下所示:
{"id":2456,"name":"foo","gender":"MALE"}
但也有一些实例将其记录为:
123 34 105 100 34 58 50 52 53 54 44 34 110 97 109 101 34 58 34 102 111 111 34 44 34 103 101 110 100 101 114 34 58 34 77 65 76 69 34 125
这个小数日志是在路由处理消息时生成的,并且在关闭时触发了弹簧引导。(我能够在本地复制此功能,方法是在源路由之前在处理器中放置一个断点,然后在消息被路由到“someSourceWithBodyOfTypeMap”时关闭spring引导应用程序。)
如何执行附加到日志文件的内容应该是ASCII文本格式,而不是十进制?是什么触发了日志在小数点中的位置?
发布于 2017-11-16 00:39:51
它不小数它,因为您的消息体被编组成一个字节流。您可以首先通过在.convertBodyTo(String)
之后添加marshal
将消息体转换为字符串,或者指定记录器应该通过${bodyAs(String)}
转换为String。
https://stackoverflow.com/questions/47320759
复制相似问题