我将jBPM集成为我的应用程序中的内部工作流执行引擎。我想用两种方式在jBPM中使用slf4j(在引擎盖下运行log4j2)记录器。
logger.trace("Variable a value:"+a.getValue());
jBPM中是否存在这样的日志记录集成机制?
答案 0 :(得分:0)
我解决了我的问题,因此在这里提供答案,以便它也可以对其他人有用......
我自己使用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()));
}
});
实际上我决定避免在工作流的BPMN定义中使用java logger,但我想我可以通过在每个工作流中传递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);
答案 1 :(得分:0)
要在JBPM的脚本任务中使用记录器,请按照以下步骤操作:
1.在log.xml
文件
<Logger name="com.jbpm.log" level="DEBUG">
<appender-ref ref="consoleAppender" />
</Logger>
使用完整的类名来获取记录器的实例。
org.slf4j.Logger logger = null;
logger = org.slf4j.LoggerFactory.getLogger("com.jbpm.log");
logger.info("Logger:: Test!!");
如果没有添加,请添加slf4j
jar。