Java 如何为每个flink作业分离日志信息?

Java 如何为每个flink作业分离日志信息?,java,apache-flink,flink-sql,Java,Apache Flink,Flink Sql,我在纱线会话模式下在纱线集群上运行一些flink流媒体作业, 事实上,为了调试或其他目的,我想分离每个作业日志。 现在,我使用Aspectj和Log4j MDC来处理一些日志,比如下面的日志信息,它可以正常工作 [JobId-gamenews_push_readaction_c941c1dffe1450ec74ce6973cdb44961]-[2019-08-15 19:43:39] [ERROR][cn.migu.bi.flink.jobs.stream.gamenews.hot.Ignite

我在纱线会话模式下在纱线集群上运行一些flink流媒体作业, 事实上,为了调试或其他目的,我想分离每个作业日志。 现在,我使用Aspectj和Log4j MDC来处理一些日志,比如下面的日志信息,它可以正常工作

[JobId-gamenews_push_readaction_c941c1dffe1450ec74ce6973cdb44961]-[2019-08-15 19:43:39] [ERROR][cn.migu.bi.flink.jobs.stream.gamenews.hot.IgniteReadSink][invoke][95]-> 处理数据发生异常:org.springframework.dao.DataIntegrityViolationException: PreparedStatementCallback; SQL [INSERT INTO readaction ( deviceId, userId, readedId, synTime ) VALUES ( ?, ?, ?, ? ) ]; Duplicate key during INSERT [key=SQL_PUBLIC_READACTION_abc3d77d_dbbe_45a7_8077_93b758c739ea_KEY [idHash=687625062, hash=223752637, DEVICEID=60c9e2f0a9d34c9f, READEDID=2000814]]; nested exception is java.sql.SQLException: Duplicate key during INSERT [key=SQL_PUBLIC_READACTION_abc3d77d_dbbe_45a7_8077_93b758c739ea_KEY [idHash=687625062, hash=223752637, DEVICEID=60c9e2f0a9d34c9f, READEDID=2000814]],发送脏数据:{"synTime":1565860801359,"readedArray":[2000814,2003419,2007497],"deviceId":"60c9e2f0a9d34c9f"}
但其他人似乎很难分开

公共方面日志{
私有日志记录器log=LoggerFactory.getLogger(log.class);
私有切入点executionJoinPoints():执行(*cn.migu.bi.flink..*.open(..);
before():executionJoinPoints(){
if(thisJoinPoint.getTarget()实例为RichAsyncFunction){
RichAsyncFunction目标=(RichAsyncFunction)thisJoinPoint.getTarget();
Log4jUtils.initFlinkLog(target.getRuntimeContext().getMetricGroup());
}else if(thisJoinPoint.getTarget()实例为RichSinkFunction){
RichSinkFunction目标=(RichSinkFunction)thisJoinPoint.getTarget();
Log4jUtils.initFlinkLog(target.getRuntimeContext().getMetricGroup());
}
}
}
我尝试了其他一些方法,比如更改flink的源代码,添加一些代码,比如MDC.put(“,”),当我运行时,它在IDE上工作,但在纱线集群上失败

那么,如果有其他方法来解决这个问题呢

@覆盖
公共CompletableFuture submitJob(JobGraph JobGraph,时间超时){
log.info(“已收到JobGraph提交{}({})。”,JobGraph.getJobID(),JobGraph.getName();
put(“jobName”,jobGraph.getName()+”-“+jobGraph.getJobID().toString());
试一试{
if(isDuplicateJob(jobGraph.getJobID())){
返回FutureUtils.completed异常(
new JobSubmissionException(jobGraph.getJobID(),“作业已提交”);
}否则{
返回内部提交作业(作业图);
}
}捕获(FlinkException e){
返回未来用途。例外情况下完成(e);
}
}

我的aspectj的代码只能处理我的一些作业逻辑,像window/table api这样的东西似乎很难有好的aop,因为这些代码总是用lambda或匿名函数编写。我的aspectj的代码只能处理我的一些作业逻辑,像window/table api这样的东西似乎很难有好的aop,对于这些代码,请始终使用lambda或匿名函数编写