使用logback和apache camel路由记录以分隔文件

时间:2016-06-05 04:00:57

标签: java apache-camel logback

我想将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:做的漂亮格式推送消息

1 个答案:

答案 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");