首页 > 解决方案 > 使用 Apache Camel 记录到外部文件

问题描述

我有一个 Camel Route,它使用一个 CSV 文件,将其转换为 XML 并将数据流式传输到 ActiveMQ 主题。我只想记录来自我的骆驼路线的消息,以及有关处理消息的详细日志消息等。

代码:

public void configure() throws Exception {

    from("file:src/main/resources?fileName=data-sample.csv")
         .log("My first log message")                               
         .process(new MyTransformRevised1())
         .to("file:src/main/resources/?fileName=emp.xml")               
         .split(body().tokenizeXML("equityFeeds", null))
         .streaming()
         .to("jms:topic:reuters.inbound.Topic");
}

添加 log4j.properties 文件:

# Root logger option
log4j.rootLogger=INFO, file, console

log4j.logger.org.apache.camel=DEBUG

log4j.logger.camelprojectupdated.CSVToXMLTransformationRevised1=INFO, file

# camelprojectupdated.CSVToXMLTransformationRevised1 - fully qualified class name of my project. camelprojectupdated is my package name and CSVToXMLTransformationRevised1 is my class name.  

# Direct log messages to a log file
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=camel.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d | %p | %F %L | %m%n

# Direct log messages to stdout
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.Target=System.out
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{HH:mm}| %p | %F %L | %m%n

应该是 log4j.properties 还是 log4j2.properties?我也应该有 log4j 或 log4j2 例如: log4j2.appender.console 而不是 log4j.appender.console

要求:

  1. 我想使用 slf4j 并将输出记录到文件和控制台。
  2. 我在哪里提供日志文件名和位置,等等ConsoleFileAppenderRollingFileAppender

问题:

即使在控制台中我也看不到日志。我的日志文件没有被创建。我已将 log4j.properties 文件放在 classes 文件夹中。即使我想使用 slf4j,我是否必须将 log4j.jar 放在类路径中?

这变得非常困难。

标签: javaloggingapache-camelslf4j

解决方案


您可以加载记录器属性文件并设置记录器以供使用(log4j)。

public enum Logger {
INSTANCE;
public void initializeLogger() {
        PropertyConfigurator.configure(Logger.class.getResource("log4j.properties"));
   }
}

推荐阅读