我们正在 Spring XD v1.0.0.RELEASE 上运行多个流和作业。
相应的流和作业模块将消息记录到 Spring XD 的全局日志文件中,在$XD_HOME/logs
下
我们需要区分每个作业和流创建的日志消息。用${xd.job.name}或${xd.stream.name}的值标记每个日志行应该对我们有用。例如,
1) 在一个配置文件(Spring XD 配置、XML 上下文文件、Java 类...随便)中,设置一个 Java 上下文(?)变量:
if(moduleType == "job") {
name = ${xd.job.name};
} else if(moduleType == "stream") {
name = ${xd.stream.name};
} else {
name = "XD";
}
2) 相应地配置$XD_HOME/config下的 log4j 属性文件:
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %t %c{2} [${name}] - %m%n
3) Spring XD 运行作业 (xd.job.name = " fooJob ") 和流 (xd.stream.name = " barStream ") 的日志输出:
...
13:07:41,169 DEBUG task-scheduler-1 myjobimpl.TransactionManager [fooJob] - Initiating transaction commit
...
13:08:43,215 INFO task-scheduler-15 mystreamimpl.JsonDecoder [barStream] - Decoding JSON: {...}
...
14:08:42,569 INFO DeploymentsPathChildrenCache-0 monitor.IntegrationMBeanExporter [XD] - Summary on shutdown: MessageChannelMonitor: [name=input, sends=0]
4) 由其他库(例如 Spring Data、Apache Commons 等)记录的任何消息都应具有 [ fooJob ]、[ barStream ] 或 [ XD ] 之一,与调用该库的作业或流具有相同的值。
到目前为止,我们提出的唯一半生不熟的解决方案是在 log4j 的MDC 或 NDC中设置$name,但我们不知道如何在每个流或每个作业的基础上设置它(MDC 和 NDC 在每个-线程基础)。
有没有办法将作业或流名称添加到相应的日志行?