java - 部署在 ActiveMQ 内部时的 Camel log4j 配置

标签 java maven log4j apache-camel activemq

我正在运行一些部署在 ActiveMQ 5.9.0 内的 Camel 2.12.2 路由。 ActiveMQ log4j 按预期工作,但在 ActiveMQ 内部部署时我无法获取我的 Camel 应用程序的日志。我的 Camel log4j.properties 看起来像这样:

#
# The logging properties used
#
log4j.rootLogger=INFO, console, logger

# uncomment the following line to turn on Camel debugging
#log4j.logger.org.apache.camel=DEBUG

# Console appender
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%5p | %m%n
log4j.appender.console.threshold=INFO

# File appender
log4j.appender.logger=org.apache.log4j.RollingFileAppender
log4j.appender.logger.file=camel.log
log4j.appender.logger.maxFileSize=1024KB
log4j.appender.logger.maxBackupIndex=5
log4j.appender.logger.append=true
log4j.appender.logger.layout=org.apache.log4j.PatternLayout
log4j.appender.logger.layout.ConversionPattern=%d | %-5p | %m | %c | %t%n

我的camel项目正在使用JavaDSL和SpringRouteBuilders,并且当使用maven Camel插件运行应用程序并运行时

maven camel:run

camel.log 文件已按预期生成。

但是,当打包camel路由并将jar移动到ActiveMQ时,不再创建日志文件。我检查了 slf4j、log4j 和 slf4j-log4j 的 jar,ActiveMQ 中的版本与我的 pom.xml 中的版本相同。

关于我在这里缺少什么的任何线索吗?

编辑:只是为了澄清我在这里的目的。 我不止一次遇到过由于我的camel路由出现问题而导致ActiveMQ关闭的问题,但我在activemq日志中没有看到任何异常,这使得调试非常耗时。今天我遇到了这样的问题,并意识到虽然日志中仍然没有错误的痕迹,但在我的项目上执行 maven camel:run 时我得到了堆栈跟踪。一个简单的例子(实际上只是一个例子,我知道为什么会发生这种情况,但我希望在 ActiveMQ 中运行时也记录它!)

INFO | Apache Camel 2.12.2 (CamelContext: camel-1) is starting
 INFO | StreamCaching is enabled on CamelContext: camel-1
 INFO | JMX is enabled
 INFO | Using EntityManagerFactory configured: org.springframework.orm.jpa.LocalEntityManagerFactoryBean@2127ee90
 INFO | Using TransactionManager found in registry with id [transactionTemplate] org.springframework.orm.jpa.JpaTransactionManager@449f40f1
 INFO | Apache Camel 2.12.2 (CamelContext: camel-1) is shutting down
 INFO | Apache Camel 2.12.2 (CamelContext: camel-1) uptime 0.477 seconds
 INFO | Apache Camel 2.12.2 (CamelContext: camel-1) is shutdown in 0.010 seconds

当部署在 ActiveMQ 中时,这是我从 Camel 看到的最后一行

但是当运行 maven camel:run 时,我也看到了这个:

 INFO | Apache Camel 2.12.2 stopping
[ERROR] *************************************
[ERROR] Error occurred while running main from: org.apache.camel.spring.Main
[ERROR]
java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.apache.camel.maven.RunMojo$1.run(RunMojo.java:486)
    at java.lang.Thread.run(Thread.java:744)
Caused by: org.apache.camel.RuntimeCamelException: org.apache.camel.FailedToStartRouteException: Failed to start route XPriceChangeToRibRoute because of duplicate id detected: XPriceChangeToRibRoute. Please correct ids to be unique among all your routes.
    at org.apache.camel.util.ObjectHelper.wrapRuntimeCamelException(ObjectHelper.java:1352)
...

所以,我真正想要的是最后一部分在 ActiveMQ 中部署时也可见,如果可能的话在我的 activemq.log 中,或者作为单独的日志,例如 Camel 日志。

最佳答案

查看wrapper.log。这就是 STDOUT 和 STDERR 应该找到的地方。尝试使用包装器启动 ActiveMQ,例如对于 MacOS,您可以使用:

apache-activemq-5.9.0/bin/macosx/activemq

或者,如果这不是一个选项,请将 STDOUT/STDERR 重定向到日志文件。

关于java - 部署在 ActiveMQ 内部时的 Camel log4j 配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22103892/

相关文章:

java - Maven 构建后缺少类文件

java - 控制 hibernate 日志记录

java - Virtuoso Jena API 中的 SPARQL 查询 "COUNT"- QueryParseException

java - commons-exec 命令行不接受 "*"?

java - 在 CXF Webservices 项目中编写拦截器

java - 解释maven javadoc插件空<p>标签报错

java - 使用 Guava Collections2 转换方法作为 Apache CollectionUtil.forAllDo

java - JPA + Hibernate = EntityManager 没有持久性提供者

java - 我可以在 Web 应用程序中使用 log4j 和 log4j.xml 或 log4j.properties 以外的文件吗?

java - 如何修复异常 : Failed to instantiate SLF4J LoggerFactory?