2016-01-28 33 views
0

我将jBPM作为内部工作流执行引擎集成到我的应用程序中。我想用两种方法在jBPM中使用slf4j(在底层运行log4j2)记录器。jBPM和日志

  1. 我想用它作为审计日志。我知道jBPM可以提供audit logging through a specific JPA configuration,但在我的情况下这并不方便,我想使用特定的slf4j配置。
  2. 我想用它在入门脚本等jBPM的工作流程,编写例如logger.trace("Variable a value:"+a.getValue());

难道这样的记录整合机制jBPM的存在吗?

回答

0

我解决我的问题,因此在这里提供的答案,因此,它可能是使用他人太...

  1. 我实现了自定义审计日志机制喽,使用events mechanism provided by the jBPM。更具体地讲,在我处理的工作流开始的课,我添加了一个事件监听器得到通知,每个工作流程操作,并记录到我的自定义SLF4J记录器(参见下面的代码片段):

    ksession.addEventListener(new DefaultProcessEventListener() { 
        public void beforeProcessStarted(ProcessStartedEvent event) { 
         WorkflowProcessInstance process = (WorkflowProcessInstance) event.getProcessInstance(); 
         logger.trace("jBPM event 'beforeProcessStarted'. Process ID: " + process.getId() 
           + ", Process definition ID: " + process.getProcessId() + ", Process name: " 
           + process.getProcessName() + ", Process state: " + process.getState() + ", Parent process ID: " 
           + process.getParentProcessInstanceId()); 
        } 
    
        public void afterProcessStarted(ProcessStartedEvent event) { 
         WorkflowProcessInstance process = (WorkflowProcessInstance) event.getProcessInstance(); 
         logger.trace("jBPM event 'afterProcessStarted'. Process ID: " + process.getId() 
           + ", Process definition ID: " + process.getProcessId() + ", Process name: " 
           + process.getProcessName() + ", Process state: " + process.getState() + ", Parent process ID: " 
           + process.getParentProcessInstanceId()); 
        } 
    
        public void beforeProcessCompleted(ProcessCompletedEvent event) { 
         WorkflowProcessInstance process = (WorkflowProcessInstance) event.getProcessInstance(); 
         logger.trace("jBPM event 'beforeProcessCompleted'. Process ID: " + process.getId() 
           + ", Process definition ID: " + process.getProcessId() + ", Process name: " 
           + process.getProcessName() + ", Process state: " + process.getState() + ", Parent process ID: " 
           + process.getParentProcessInstanceId()); 
        } 
    
        public void afterProcessCompleted(ProcessCompletedEvent event) { 
         WorkflowProcessInstance process = (WorkflowProcessInstance) event.getProcessInstance(); 
         logger.trace("jBPM event 'afterProcessCompleted'. Process ID: " + process.getId() 
           + ", Process definition ID: " + process.getProcessId() + ", Process name: " 
           + process.getProcessName() + ", Process state: " + process.getState() + ", Parent process ID: " 
           + process.getParentProcessInstanceId()); 
        } 
    
        public void beforeNodeTriggered(ProcessNodeTriggeredEvent event) { 
         WorkflowProcessInstance process = (WorkflowProcessInstance) event.getProcessInstance(); 
         NodeInstance node = event.getNodeInstance(); 
         logger.trace("jBPM event 'beforeNodeTriggered'. Process ID: " + process.getId() 
           + ", Process definition ID: " + process.getProcessId() + ", Process name: " 
           + process.getProcessName() + ", Process state: " + process.getState() + ", Parent process ID: " 
           + process.getParentProcessInstanceId() + ", Node instance ID: " + node.getId() + ", Node ID: " 
           + node.getNodeId() + ", Node name: " + node.getNodeName()); 
    
        } 
    
        public void afterNodeTriggered(ProcessNodeTriggeredEvent event) { 
         WorkflowProcessInstance process = (WorkflowProcessInstance) event.getProcessInstance(); 
         NodeInstance node = event.getNodeInstance(); 
         logger.trace("jBPM event 'afterNodeTriggered'. Process ID: " + process.getId() 
           + ", Process definition ID: " + process.getProcessId() + ", Process name: " 
           + process.getProcessName() + ", Process state: " + process.getState() + ", Parent process ID: " 
           + process.getParentProcessInstanceId() + ", Node instance ID: " + node.getId() + ", Node ID: " 
           + node.getNodeId() + ", Node name: " + node.getNodeName()); 
    
        } 
    
        public void beforeNodeLeft(ProcessNodeLeftEvent event) { 
         WorkflowProcessInstance process = (WorkflowProcessInstance) event.getProcessInstance(); 
         NodeInstance node = event.getNodeInstance(); 
         logger.trace("jBPM event 'beforeNodeLeft'. Process ID: " + process.getId() + ", Process definition ID: " 
           + process.getProcessId() + ", Process name: " + process.getProcessName() + ", Process state: " 
           + process.getState() + ", Parent process ID: " + process.getParentProcessInstanceId() 
           + ", Node instance ID: " + node.getId() + ", Node ID: " + node.getNodeId() + ", Node name: " 
           + node.getNodeName()); 
    
        } 
    
        public void afterNodeLeft(ProcessNodeLeftEvent event) { 
         WorkflowProcessInstance process = (WorkflowProcessInstance) event.getProcessInstance(); 
         NodeInstance node = event.getNodeInstance(); 
         logger.trace("jBPM event 'afterNodeLeft'. Process ID: " + process.getId() + ", Process definition ID: " 
           + process.getProcessId() + ", Process name: " + process.getProcessName() + ", Process state: " 
           + process.getState() + ", Parent process ID: " + process.getParentProcessInstanceId() 
           + ", Node instance ID: " + node.getId() + ", Node ID: " + node.getNodeId() + ", Node name: " 
           + node.getNodeName()); 
    
        } 
    
        public void beforeVariableChanged(ProcessVariableChangedEvent event){ 
         WorkflowProcessInstance process = (WorkflowProcessInstance) event.getProcessInstance(); 
         logger.trace("jBPM event 'beforeVariableChanged'. Process ID: " + process.getId() + ", Process definition ID: " 
           + process.getProcessId() + ", Process name: " + process.getProcessName() + ", Process state: " 
           + process.getState() + ", Parent process ID: " + process.getParentProcessInstanceId() 
           + ", Variable ID: " + event.getVariableId() + ", Variable instance ID: " + event.getVariableInstanceId() + ", Old value: " 
           + (event.getOldValue() == null ? "null" : event.getOldValue().toString())+ ", New value: "+(event.getNewValue() == null ? "null" : event.getNewValue().toString())); 
        } 
    
        public void afterVariableChanged(ProcessVariableChangedEvent event){ 
         WorkflowProcessInstance process = (WorkflowProcessInstance) event.getProcessInstance(); 
         logger.trace("jBPM event 'afterVariableChanged'. Process ID: " + process.getId() + ", Process definition ID: " 
           + process.getProcessId() + ", Process name: " + process.getProcessName() + ", Process state: " 
           + process.getState() + ", Parent process ID: " + process.getParentProcessInstanceId() 
           + ", Variable ID: " + event.getVariableId() + ", Variable instance ID: " + event.getVariableInstanceId() + ", Old value: " 
           + (event.getOldValue() == null ? "null" : event.getOldValue().toString())+ ", New value: "+(event.getNewValue() == null ? "null" : event.getNewValue().toString())); 
        } 
    
    }); 
    
  2. 实际上,我决定避免在工作流的BPMN定义中使用java记录器,但我认为我可以通过在每个工作流中将logger对象作为参数来实现,并将其用于BPMN2中的脚本任务。这是我现在能想到的唯一工作。

    Logger logger = LoggerFactory.getLogger("logger name"); 
    Map<String, Object> arguments = new HashMap<String, Object>(); 
    arguments.put("logger", logger); 
    ProcessInstance processInstance = ksession.startProcess("processName", arguments); 
    
0

要JBPM的脚本任务使用记录器,请按照下列步骤操作:

文件

<Logger name="com.jbpm.log" level="DEBUG"> 
<appender-ref ref="consoleAppender" /> 
</Logger> 
创建记录器名称
  • 使用完整的Class名称来获取记录器的实例。

    org.slf4j.Logger logger = null; logger = org.slf4j.LoggerFactory.getLogger("com.jbpm.log"); logger.info("Logger:: Test!!");

  • 添加slf4j JAR如果没有添加。