Open Liberty 22.0.0.7-beta中基于时间的日志翻转和对LogRecordContext扩展的改进

288 阅读4分钟

Open Liberty 22.0.0.7-beta提供了基于时间的日志滚动,这使你能够为日志文件的滚动指定一个时间。这个版本还包括在LogRecordContext扩展中增加了应用程序名称和相应的JSON日志字段。

Open Liberty22.0.0.7-beta包括以下测试版功能(以及所有GA功能):

针对Liberty的基于时间的日志滚动

Liberty提供了一些不同的日志文件;默认创建了一个message.log ,可以启用trace.loghttp_access.log ,分别用于追踪和NCSA 访问日志。以前,这些日志文件只能通过服务器重启或用maxFileSize 日志属性限制最大日志文件大小来翻转。而不是基于文件大小的日志翻转,用户可能想在定期时间翻转他们的文件,以方便他们现有的日志清理或归档过程。

现在,你可以通过使用两个新的可选的日志配置属性:rolloverIntervalrolloverStartTime ,在他们自己指定的时间对这些日志文件进行基于时间的定期翻转。翻转时,文件名会附加一个时间戳,对应于日志翻转的时间。

  • rolloverInterval 是所需的日志翻转的时间间隔。用一个正整数和一个时间单位来设置该属性,可以是天(d)、小时(h)或分钟(m)。例如,指定5小时为`5h ,相当于1天5小时。. You can include multiple values in a single entry. For example, `1d5h

  • rolloverStartTime 是一天中日志第一次滚动和第一次滚动间隔时间开始的时间。这个属性的有效值遵循24小时的ISO-8601时间格式HH:MM,其中00:00代表午夜。

这两个配置属性是可选的。如果这两个属性都没有设置,那么基于时间的日志滚动就不会启用。如果只设置了两个属性中的一个,那么基于时间的日志滚动将被启用,而另一个属性则被设置为默认值。rolloverInterval 的默认值是1d ,而rolloverStartTime 的默认值是00:00

示例server.xml 文件配置,通过在logging 元素中指定新的属性,在messages.logtrace.log 文件中进行日志滚屏。

<server>
   ...
    <logging rolloverStartTime="00:00" rolloverInterval="1d"/>
    ...
</server>

示例server.xml 文件配置,通过指定httpAccessLogging 元素中的新属性,在http_access.log 文件中进行日志滚动。

<server>
   ...
    <httpAccessLogging rolloverStartTime="00:00" rolloverInterval="1d" logFormat='%h %u %{t}W "%r" %s %b' />
    ...
</server>

示例server.xml 配置访问日志,在<httpEndpoint/> 下使用<accessLogging/> ,它处理http_access.log 的滚动。

<server>
   ...
   <httpEndpoint id="defaultHttpEndpoint">
      <accessLogging rolloverStartTime="00:00" rolloverInterval="1d" logFormat='%h %i %u %t "%r" %s %b' />
   </httpEndpoint>
    ...
</server>

日志的示例结果,每分钟滚动一次,配置为rolloverInterval="1m"rolloverStartTime="00:00"

Example logs

关于这个功能的更多信息,请参考HTTP访问日志Liberty日志Liberty访问日志文档。

在LogRecordContext扩展中添加应用程序名称,并作为JSON日志字段

以前,Liberty日志在LogRecordContext 扩展中不包含应用程序名称。如果你使用日志分析工具,如ELK堆栈,你无法过滤掉应用程序的日志,因为JSON 字段中没有应用程序名称的字段。

在Open Liberty 22.0.0.7-beta中,当应用程序日志消息被记录并且应用程序名称是已知的,应用程序名称被添加到LogRecordContext中,其关键是appName ,其值是消息被记录的应用程序名称。当JSON日志被启用时,一个新的默认JSON字段(ext_appName)被添加到JSON应用日志中,它包含了日志消息被记录的应用名称。

你可以通过为你的Liberty日志启用JSON日志支持来使用这个功能。

JSON日志的例子片段:

{
  "type":"liberty_message",
  "host":"localhost",
  "ibm_userDir":"\/wlp\/usr\/",
  "ibm_serverName":"test_json",
  "message":"TESTAP0001W: Test Message.",
  "ibm_threadId":"0000005d",
  "ibm_datetime":"2022-02-16T14:07:47.226-0500",
  "ibm_messageId":"BADAP0001W",
  "module":"com.ibm.ws.lumberjack.Message",
  "loglevel":"WARNING",
  "ibm_sequence":"1645038467226_000000000001F",
  "ext_appName":"TestApp",
  "ext_thread":"Default Executor-thread-31"
}

欲了解更多信息,请查看JSON日志JSON日志事件列表文档。

现在就试试吧

要尝试这些功能,只需更新你的构建工具,拉出Open Liberty所有测试版功能包,而不是主版本。该测试版适用于Java SE 18、Java SE 17、Java SE 11和Java SE 8。

如果你使用Maven,这里有坐标:

<dependency>
  <groupId>io.openliberty.beta</groupId>
  <artifactId>openliberty-runtime</artifactId>
  <version>22.0.0.7-beta</version>
  <type>pom</type>
</dependency>

或者对于Gradle

dependencies {
    libertyRuntime group: 'io.openliberty.beta', name: 'openliberty-runtime', version: '[22.0.0.7-beta,)'
}

或者看一下我们的下载页面