学习篇-Activiti-11-MDC日志配置

一、日志配置记录
  • 日志组件

    日志门面日志实现桥接方式改变依赖
    slf4jLogbackslf4j-log4j12jcl-over-slf4j
    commons-loggingLog4jslf4j-jdk14log4j-over-slf4j
    Log4jLog4j2
    Java util logging
二、MDC具体应用
  • 配置开启MDC【Mapped Diagnostic Contexts】

    • 默认没有开启,需要手动设置LogMDC.setMDCEnable(true)
    • 配置logback.xml日志模板 %X{mdcProcessInstanceID}
    • 流程只有执行过程出现异常时才会记录MDC信息
  • 实现方式

    • 一般情况,MDC只有在流程出现错误的情况,才会被捕获,打印到控制台。

    • 可以使用拦截器的方式,来捕获MDC日志。

  • 代码实现

    • 使用拦截器

          package com.laogoubi.interceptor;
      
          import org.activiti.engine.impl.agenda.AbstractOperation;
          import org.activiti.engine.impl.interceptor.DebugCommandInvoker;
          import org.activiti.engine.logging.LogMDC;
          import org.slf4j.Logger;
          import org.slf4j.LoggerFactory;
      
          /**
           * @ClassName MDCCommandInvoker
           * @Description 捕获MDC日志
           * @Author eastern
           * @Date 2020/6/28 下午11:10
           * @Version 1.0
           **/
          public class MDCCommandInvoker extends DebugCommandInvoker {
      
            private static final Logger logger = LoggerFactory.getLogger(MDCCommandInvoker.class);
      
            @Override
            public void executeOperation(Runnable runnable) {
              // 获取LogMDC的状态
              boolean mdcEnabled = LogMDC.isMDCEnabled();
              // 无论是否打开,都打开
              LogMDC.setMDCEnabled(true);
      
              if (runnable instanceof AbstractOperation) {
                AbstractOperation operation = (AbstractOperation) runnable;
      
                if (operation.getExecution() != null) {
                  // 将可执行的对象放到上下文中
                  LogMDC.putMDCExecution(operation.getExecution());
                }
              }
              // 执行正常的业务操作
              super.executeOperation(runnable);
              // 清除上下文
              LogMDC.clear();
              // 还原现场,如果进来之前是不生效的,设置回原来的值
              if (!mdcEnabled) {
                LogMDC.setMDCEnabled(false);
              }
            }
      }
      
    • xml配置activiti_mdc.cfg.xml

      <?xml version="1.0" encoding="UTF-8"?>
      <beans xmlns="http://www.springframework.org/schema/beans"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://www.springframework.org/schema/beans   http://www.springframework.org/schema/beans/spring-beans.xsd">
      
          <bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneInMemProcessEngineConfiguration">
            <property name="commandInvoker" ref="commandInvoker"/>
          </bean>
        <bean id="commandInvoker" class="com.laogoubi.interceptor.MDCCommandInvoker"></bean>
      </beans>
      
    • 日志依赖

      <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>1.1.11</version>
      </dependency>
      

      配置:logback.xml

      <?xml version="1.0" encoding="UTF-8"?>
      
        <configuration>
            <property name="encoding" value="UTF-8"></property>
            <property name="mdc" value="%d{HH:mm:ss.SSS}[%thread][%-5level]%msg  ProcessDefinitionId=%X{mdcProcessDefinitionID} executionId=%X{mdcExecutionId}
        mdcProcessInstanceID=%X{mdcProcessInstanceID} mdcBusinessKey=%X{mdcBusinessKey} %logger{10}.%M:%L%n"></property>
            <appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender">
        <!--        <layout class="ch.qos.logback.classic.PatternLayout">-->
        <!--            &lt;!&ndash;输入合适&ndash;&gt;-->
        <!--            <pattern>-->
        <!--                %d - %msg%n-->
        <!--            </pattern>-->
        <!--        </layout>-->
                <encoder>
                    <pattern>${mdc}</pattern>
                    <charset>${encoding}</charset>
                </encoder>
          </appender>
      
            <appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
                <!--过滤-->
                <filter class="ch.qos.logback.classic.filter.LevelFilter">
                    <level>ERROR</level>
                    <!--禁止-->
                    <onMatch>DENY</onMatch>
                    <!--接受-->
                    <onMismatch>ACCEPT</onMismatch>
                </filter>
                <encoder>
                    <pattern>
                        %msg%n
                    </pattern>
                </encoder>
                <!--滚动策略-->
                <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                    <!--路径-->
                    <fileNamePattern>/Users/xxx/IdeaProjects/activiti-study/info.%d.log</fileNamePattern>
                </rollingPolicy>
          </appender>
      
            <appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
                <!--过滤-->
                <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
                    <level>ERROR</level>
                </filter>
                <encoder>
                    <pattern>
                        %msg%n
                    </pattern>
                </encoder>
                <!--滚动策略-->
                <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                    <!--路径-->
                    <fileNamePattern>/Users/xxx/IdeaProjects/activiti-study/error.%d.log</fileNamePattern>
                </rollingPolicy>
          </appender>
      
            <root level="info">
                <appender-ref ref="consoleLog"></appender-ref>
                <appender-ref ref="fileInfoLog"></appender-ref>
                <appender-ref ref="fileErrorLog"></appender-ref>
            </root>
        </configuration>
      
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: ruoyi-activiti是一个流程引擎平台,是ruoyi框架中的一个模块。它基于Activiti 6.x版本开发,是一个轻量级、易用性强的工作流引擎。它在ruoyi框架中担任着流程管理和流程任务分配的角色,帮助企业或机构简化了日常业务流程,提高了工作效率。 ruoyi-activiti提供了丰富的功能。其中包括:流程设计器、流程监控、用户任务管理、流程部署、流程挂起、历史流程查询等功能。用户可以通过流程设计器设计出符合企业实际业务的流程,也可以通过流程监控及时了解流程运行状态。用户任务管理功能可以帮助管理员快速分配任务,监管任务进度。流程部署功能可以将设计好的流程部署到服务器中。流程挂起则可以帮助管理员停止不需要执行的流程。历史流程查询功能可以让用户查看已完成的流程,方便以后的参考和分析。 总之,ruoyi-activiti是一个高效便捷的流程引擎平台,它的出现对于企业或机构的业务流程管理有着非常大的帮助,未来也会在业界中有着更广泛的应用。 ### 回答2: Ruoyi-activiti是一款基于Ruoyi框架的工作流管理系统。它集成了Activiti工作流引擎,提供了流程设计、流程部署、流程运行监控、流程催办、任务分配、流程驳回、任务委派等功能。 Ruoyi-activiti可以帮助企业更好地管理和优化业务流程,提高流程处理效率和管理水平。它可以通过流程图形化设计工具快速创建复杂流程,并且可以使用流程设计器实时预览和调试流程。在流程运行期间,用户可以根据实际情况对流程进行调整和修改,从而保证流程的灵活性和适应性。另外,Ruoyi-activiti还提供了丰富的统计报表和数据分析功能,方便用户进行数据的分析和管理。 总之,Ruoyi-activiti是一款功能强大、易于使用、性能优秀的工作流管理系统。它的使用可以帮助企业更好地管理流程,提高管理效率和管理质量,让企业更加高效地运转。 ### 回答3: ruoyi-activiti是一款基于Activiti引擎的业务流程管理系统,它是ruoyi-admin的衍生项目。用户可以在ruoyi-activiti中方便地定义和管理工作流程、任务、用户、用户组、角色、表单等元素,同时支持动态设计、部署和启动业务流程。此外,ruoyi-activiti还提供了丰富的报表和数据统计功能,用户可以直观地了解工作流程的运行情况,从而对流程进行优化和改进。此外,ruoyi-activiti还支持消息提醒和审核日志等功能,提高了工作效率和透明度。总之,ruoyi-activiti是一个功能强大、易于使用和可扩展的业务流程管理系统,具有广泛的应用前景。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值