我想将apache camel路由消息(HL7
格式)记录到与标准日志文件不同的特定文件中。如何从.to(log:
路由识别日志追加器?
也就是说,我知道在java中你可以调用LoggerFactory.getLogger("hl7Logger");
这样的东西并以这种方式登录到特定的日志,但是我无法想象如何在驼峰路径中这样做。
这就是我所拥有的:
的logback-spring.xml
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>logFile.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>90</maxHistory>
</rollingPolicy>
<encoder>
<charset>utf-8</charset>
<Pattern>%d %-5level [%thread] %logger{0}: %msg%n</Pattern>
</encoder>
</appender>
<appender name="HL7-FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>hl7_messages_logFile.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>90</maxHistory>
</rollingPolicy>
<encoder>
<charset>utf-8</charset>
<Pattern>%d %-5level [%thread] %logger{0}: %msg%n</Pattern>
</encoder>
</appender>
...
<logger name="hl7Logger" level="DEBUG" additivity="false">
<appender-ref ref="HL7-FILE"/>
</logger>
<root level="@logback.loglevel@">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
</root>
示例路线:
from("direct:complete")
.log("Processing complete ${id}")
.to("log:com.pavilionhealth.integration.messaging.complete?showAll=true&multiline=true&level=DEBUG&logger=hl7Logger")
.to("hl7Complete");
我认为&logger=hl7Logger
可能是需要的东西,但似乎没有记录任何东西。两个日志文件都已创建,但没有任何内容写入hl7_messages_logFile.2016-06-05.log
,只填充主日志文件
到目前为止,我已经从这些中得到了充分利用:
Logback to log different messages to two files
http://camel.apache.org/log.html
任何帮助都会引起很大的关注。
修改
刚刚找到了一种方法,但肯定有一个更优雅的解决方案。
我发现了这篇文章,所以使用自定义处理器做了类似的事情。
static Logger LOG = LoggerFactory.getLogger("hl7Logger");
...
from("direct:update")
.process(new Processor() {
public void process(Exchange msg) {
LOG.info("Processing {}", msg);
}
})
.to("hl7Update");
但这并不完美,因为它没有以.to(log:
做的漂亮格式推送消息
答案 0 :(得分:0)
您可以设置记录器名称,并可能添加一个侦听该名称并写入文件的appender。
http://camel.apache.org/logeip.html
示例:
from("direct:start").log(LoggingLeven.DEBUG, org.slf4j.LoggerFactory.getLogger("com.mycompany.mylogger"), "Processing ${id}").to("bean:foo");