第 13 章  日志记录


请阅读本章,了解业务流程管理器中存在的日志记录功能及其可以使用的各种方法。
日志记录的目的是记录进程执行的历史记录。随着每个进程执行更改的运行时数据,更改存储在日志中。
注意
在本章中介绍的 进程日志记录 与软件日志记录 不混淆。软件日志记录跟踪软件程序的执行(通常用于调试它)。按 contast 跟踪进程实例的执行过程日志。
进程日志信息可能很有用的方式。其中的最明显是流程执行专家对流程历史记录的咨询。
另一个用例是 业务活动监控 (BAM)。这可用于查询或分析进程执行的日志,以查找有关流程的有用统计信息。这些信息是在机构中实施"实时"的进程管理的关键。(需要管理流程是组织如何管理其流程、信息技术如何支持这些流程以及如何在迭代过程中相互使用两者。)
进程日志也可用于实施"undos"。由于日志包含所有运行时信息更改的记录,因此可以按照相反的顺序"played"来使进程回到以前的状态。

13.1.  日志创建

Business Process Manager 模块在运行进程执行时生成日志。但是用户也可以插入进程日志。(日志条目是一个 Java 对象,从 org.jbpm.logging.log.ProcessLog.)继承。) 进程日志条目添加到 LoggingInstance 中,这是 ProcessInstance 的可选扩展。
商业流程管理器生成许多不同类型的日志,它们是图形执行日志、上下文日志和任务管理日志。好的起点是 org.jbpm.logging.log.ProcessLog,因此可以使用它浏览继承的
LoggingInstance 收集所有日志条目。保存 ProcessInstance 时,它们会从此处刷新到数据库。( ProcessInstancelogs 字段没有映射到 Hibernate。这样,为了避免这些日志从每个事务中的数据库检索。
每个 ProcessInstance 在执行路径的上下文中进行,因此 ProcessLog 代表该令牌,它也充当 索引序列生成器。(这对于日志检索很重要,因为这意味着后续事务生成的日志应具有顺序序列号。)
使用此 API 方法添加进程日志:
public class LoggingInstance extends ModuleInstance {
  ...
  public void addLog(ProcessLog processLog) {...}
  ...
}
Copy to Clipboard Toggle word wrap
这是用于信息日志的 UML 图:

图 13.1. 192.168.1.0/24 日志记录信息类图

CompositeLog 是一个特殊情况。它充当多个子项的父日志,从而创建要应用的层次结构的方法。以下应用程序编程接口用于插入日志:
public class LoggingInstance extends ModuleInstance {
  ...
  public void startCompositeLog(CompositeLog compositeLog) {...}
  public void endCompositeLog() {...}
  ...
}
Copy to Clipboard Toggle word wrap
CompositeLogs 应该总是在 try-finally-block 中调用,以确保分级结构一致。例如:
startCompositeLog(new MyCompositeLog());
try {
  ...
} finally {
  endCompositeLog();
}
Copy to Clipboard Toggle word wrap

13.2.  日志配置

如果日志不适用于特定部署,只需从 jbpm.cfg.xml 配置文件的 jbpm-context 部分删除日志记录行:
<service name='logging'
    factory='org.jbpm.logging.db.DbLoggingServiceFactory' />
Copy to Clipboard Toggle word wrap
要过滤日志,请编写 LoggingService 的自定义实现(这是 DbLoggingService的子类)。完成后,为日志记录创建一个自定义 ServiceFactory,并在 factory 属性中指定它。

13.3.  logtrieval

进程实例日志必须始终通过数据库查询检索。可以通过日志记录会话实现这一目标 有两种方法
第一种方法检索进程实例的所有日志。这些日志将按映射中的令牌分组。此映射会将 ProcessLogs 列表与进程实例中的每个令牌相关联。该列表将包含 ProcessLogs,其顺序与创建它们的顺序相同。
public class LoggingSession {
  ...
  public Map findLogsByProcessInstance(long processInstanceId) {...}
  ...
}
Copy to Clipboard Toggle word wrap
第二种方法检索特定令牌的日志。该列表将包含 ProcessLogs,其顺序与创建它们的顺序相同。
public class LoggingSession {
  public List findLogsByToken(long tokenId) {...}
  ...
}
Copy to Clipboard Toggle word wrap
请阅读本章后,您现在了解日志记录的工作原理,并了解其可以放入的不同用途。
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat