向应用程序中添加日志记录功能
运行 WebSphere® Application Server Liberty 应用程序时,可以使用 Java 日志记录 (使用 java.util.logging) 来生成应用程序日志记录。
您可以使用 遥测功能( 及更高版本)作为单一解决方案,通过 协议为 MicroProfile 2.0 OpenTelemetry 您的Liberty 应用程序收集和发送日志、指标和跟踪。 更多信息,请访问 Open Liberty 网站。
有关此任务
相比在代码中添加
System.out.println 语句,此方法更有优势:- 消息将会使用含额外数据(例如,自动添加的日期和时间戳记)的标准消息格式,显示在 messages.log 和 trace.log 文件中。
- 您可以更轻松地将自己应用程序中的问题和事件与与 Liberty 组件相关联的问题和事件相关联。
- 您可以使用 Liberty 日志文件管理功能部件。
- 您可以在 server.xml 文件中使用日志记录元素的
traceSpecification来控制记录器级别。
过程
配置
LogRecordContext API 以向日志和跟踪记录添加名称/值对。Liberty 提供了可用于以 "名称/值" 对形式向日志和跟踪记录添加上下文的 API。 这些“名称/值”对会显示在以下位置中:
- messages.log 文件(如果该日志配置为使用 JSON 格式)
- 控制台输出(如果控制台配置为使用 JSON 格式)
- 由
logstashCollector发送到Logstash的记录
更多信息,请参阅 LogRecordContext API文档。
请使用以下示例来包括使用 JSON 格式的“名称/值”对:
LogRecordContext API
Applications that use the LogRecordContext API will have the name-value pairs that have been added to the LogRecordContext included in the JSON mapping for logs and trace emitted on the same thread.
STRING/STRING pairs
// included in json at root level as "ext_someName":"someValue"
LogRecordContext.addExtension("someName","someValue");
STRING/INTEGER pairs
// included in json at root level as "ext_someName_int":someValue (or entirely omitted if someValue isn't parseable as an int)
LogRecordContext.addExtension("someName_int","someValue");
STRING/FLOAT pairs
// included in json at root level as "ext_someName_float":someValue (or entirely omitted if someValue isn't parseable as a float)
LogRecordContext.addExtension("someName_float","someValue");
STRING/BOOLEAN pairs
// included in json at root level as "ext_someName_bool":someValue (or entirely omitted if someValue isn't parseable as a bool)
LogRecordContext.addExtension("someName_bool","someValue");
请参阅 LogRecordContext API 所使用的“名称/值”对的以下示例:
LogRecordContext.addExtension("userName","don");
LogRecordContext.addExtension("isGoldCustomer_bool":"true");
Logger.info("some message");
LogRecordContext.removeExtension("userName");
LogRecordContext.removeExtension("isGoldCustomer_bool");
Logger.info("some other message");
// first message includes the extensions
{"ibm_datetime":"2018-02-04T18:56:30.318-0500","type":"liberty_message","host":"192.168.1.1","ibm_userDir":"\/wlp\/usr\/","ibm_serverName":"server1","ibm_sequence":"1517788590318_000000003A4A7","loglevel":"INFO","module":"com.ibm.somelogger.QuickLogTest","ibm_threadId":"00002db5","message":"some message", "ext_userName":"don", "isGoldCustomer_bool":true}
// second message does not include extensions
{"ibm_datetime":"2018-02-04T18:56:30.318-0500","type":"liberty_message","host":"192.168.1.1","ibm_userDir":"\/wlp\/usr\/","ibm_serverName":"server1","ibm_sequence":"1517788590318_000000003A4A8","loglevel":"INFO","module":"com.ibm.somelogger.QuickLogTest","ibm_threadId":"00002db5","message":"some other message"}