Apache Camel无Critical/FATAL日志级别,如何适配NXlog转Graylog需求?
解决Apache Camel日志到Graylog的Critical级别映射问题
我来给你几个实用的解决方案,帮你搞定Camel日志里没有critical/fatal级别,但需要在Graylog中标记为critical的需求:
1. 完善SLF4J Marker方案(你已尝试方向的优化)
既然你已经用到了SLF4J的Marker,核心是让日志输出明确带上Marker标识,这样NXlog就能抓取到并转换级别:
- 第一步,调整日志框架(Logback/Log4j)配置,把Marker字段加入日志输出格式。比如Logback的pattern可以改成:
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} %marker - %msg%n</pattern>
- 第二步,在Camel中使用Marker打日志:
- Java代码方式:
Marker criticalMarker = MarkerFactory.getMarker("CRITICAL"); log.info(criticalMarker, "这是一条严重级别的日志");- Spring XML的Log EIP方式:
<log message="发生严重错误" marker="CRITICAL" loggingLevel="INFO"/> - 第三步,在NXlog配置里添加规则,匹配日志中带有
CRITICALMarker的条目,将其级别映射为Graylog的critical级别。
2. 利用底层日志框架的FATAL级别映射
SLF4J的fatal()方法对应底层日志框架(比如Log4j2)的FATAL级别,你可以直接用这个级别替代critical,再通过NXlog转换:
- 在Camel中直接调用FATAL级别的日志:
- Java代码:
log.fatal("这是一条致命级别的日志");- Spring XML的Log EIP:
<log message="致命错误触发" loggingLevel="FATAL"/> - 然后在NXlog配置中,将日志级别为
FATAL的条目转换为Graylog的critical级别即可。
3. 自定义Camel消息Header传递级别标识
通过给Camel消息添加自定义Header,把级别信息嵌入日志内容,让NXlog识别:
- 在Route中添加自定义Header并输出:
<setHeader headerName="CamelCriticalLog"> <constant>true</constant> </setHeader> <log message="严重业务异常:${body}" headers="CamelCriticalLog"/>
- 此时日志会输出类似
CamelCriticalLog=true的内容,然后在NXlog里用正则匹配这个标识,将对应日志的级别设为Graylog的critical。
内容的提问来源于stack exchange,提问作者Greenev
相关产品推荐
相关产品推荐

