Open Liberty 22.0.0.7-beta提供了基于时间的日志滚动,这使你能够为日志文件的滚动指定一个时间。这个版本还包括在LogRecordContext扩展中增加了应用程序名称和相应的JSON日志字段。
Open Liberty22.0.0.7-beta包括以下测试版功能(以及所有GA功能):
针对Liberty的基于时间的日志滚动
Liberty提供了一些不同的日志文件;默认创建了一个message.log ,可以启用trace.log 和http_access.log ,分别用于追踪和NCSA 访问日志。以前,这些日志文件只能通过服务器重启或用maxFileSize 日志属性限制最大日志文件大小来翻转。而不是基于文件大小的日志翻转,用户可能想在定期时间翻转他们的文件,以方便他们现有的日志清理或归档过程。
现在,你可以通过使用两个新的可选的日志配置属性:rolloverInterval 和rolloverStartTime ,在他们自己指定的时间对这些日志文件进行基于时间的定期翻转。翻转时,文件名会附加一个时间戳,对应于日志翻转的时间。
-
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.log 和trace.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" 。

关于这个功能的更多信息,请参考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,)'
}
或者看一下我们的下载页面。