Logback和grpc实现日志访问

发布时间 2023-07-05 14:46:55作者: 做时间的好朋友

日志方案

  • ui和worker不一定再同一个机器上,看日志不能像看本地文件一样
  • 日志放到es搜索引擎上
  • 通过grpc通信获取远程日志信息
  • 海豚调度的轻量级,选择了grpc实现远程访问日志的方案

方案说明

image

方案解释

自定义logback的FileAppender ,实现每个人物实例生成一个日志文件
FileAppender

public class TaskLogAppender extends FileAppender<ILoggingEvent> {

    ...

   @Override
   protected void append(ILoggingEvent event) {

       if (currentlyActiveFile == null){
           currentlyActiveFile = getFile();
       }
       String activeFile = currentlyActiveFile;
       // thread name: taskThreadName-processDefineId_processInstanceId_taskInstanceId
       String threadName = event.getThreadName();
       String[] threadNameArr = threadName.split("-");
       // logId = processDefineId_processInstanceId_taskInstanceId
       String logId = threadNameArr[1];
       ...
       super.subAppend(event);
   }
}

以/流程定义id/流程实例id/任务实例id.log形式生成日志

public class TaskLogFilter extends Filter<ILoggingEvent> {

   @Override
   public FilterReply decide(ILoggingEvent event) {
       if (event.getThreadName().startsWith("TaskLogInfo-")){
           return FilterReply.ACCEPT;
       }
       return FilterReply.DENY;
   }
}