如何在 websphere liberty 配置文件中配置跟踪
How to configure tracing in websphere liberty profile
我想查看 HTTPURLConnection class 的跟踪日志以调试我在调用远程服务时遇到的问题。
我尝试在 server.xml 中配置跟踪,如下所示。
<logging logDirectory="logs" copySystemStreams="true" consoleLogLevel="INFO" traceFileName="trace.log" traceSpecification="sun.net.www.protocol.http.HttpURLConnection=finest" maxFileSize="50" maxFiles="50"/>
当服务器启动时,它会在 trace.specification.
中显示我的配置
********************************************************************************
product = WebSphere Application Server 20.0.0.9 (wlp-1.0.44.cl200920200820-0913)
wlp.install.dir = /Users/ilam/liberty20.9/wlp/
java.home = /Library/Java/JavaVirtualMachines/jdk1.8.0_261.jdk/Contents/Home/jre
java.version = 1.8.0_261
java.runtime = Java(TM) SE Runtime Environment (1.8.0_261-b12)
os = Mac OS X (10.15.7; x86_64) (en_GB)
process = 54509@MYMACHINE
trace.specification = *=info:sun.net.www.protocol.http.HttpURLConnection=finest
********************************************************************************
但我明白了
The configured trace state included the following specifications that do not match any loggers currently registered in the server: sun.net.www.protocol.http.HttpURLConnection=all Ignore this message if the trace specifications sun.net.www.protocol.http.HttpURLConnection=all are valid.
并且 trace.log 文件中没有来自 HttpURLConnection class 的日志。那么我该如何配置呢
Liberty 跟踪适用于 Liberty 代码,但您要跟踪的 class 是 JVM 的一部分,因此您需要以不同的方式跟踪它。 JVM-specific 可能是这样,但这可能有效:https://www.rgagnon.com/javadetails/java-debug-HttpURLConnection-problem.html
根据 https://openliberty.io/docs/20.0.0.11/log-trace-configuration.html ,Liberty 会将您写入 java.util.logging 的内容汇总到其日志文件(messages.log 和 trace.log)。
如果尽管设置了适当的 traceSpecification
,但您认为具有 JUL 跟踪检测的内容并未显示在 Liberty 跟踪中,您可能需要仔细检查以确保 JUL 记录器确实已注册。您的日志消息 cut/pasted 表明,至少在处理跟踪规范时,指定的记录器尚未在 LogManager 中注册。
您可以检查哪些记录器已注册的一种方法是使用 LoggingMXBean (https://docs.oracle.com/javase/8/docs/api/java/util/logging/LoggingMXBean.html) 获取记录器名称,以查看当服务器处于 运行.
您可以从 jre/bin 目录的 jconsole 访问 LoggingMXBean。
如果您要查找的Logger不在列表中,可能是因为class使用了不同的Logger名称(使用包和class名称作为Logger名称只是一个约定),或者可能是使用 Logger 的 class 尚未达到注册其 Logger 的代码中的点(尽管在 [= 时注册 JUL 记录器是很常见的28=] 已初始化)。
我想查看 HTTPURLConnection class 的跟踪日志以调试我在调用远程服务时遇到的问题。
我尝试在 server.xml 中配置跟踪,如下所示。
<logging logDirectory="logs" copySystemStreams="true" consoleLogLevel="INFO" traceFileName="trace.log" traceSpecification="sun.net.www.protocol.http.HttpURLConnection=finest" maxFileSize="50" maxFiles="50"/>
当服务器启动时,它会在 trace.specification.
中显示我的配置********************************************************************************
product = WebSphere Application Server 20.0.0.9 (wlp-1.0.44.cl200920200820-0913)
wlp.install.dir = /Users/ilam/liberty20.9/wlp/
java.home = /Library/Java/JavaVirtualMachines/jdk1.8.0_261.jdk/Contents/Home/jre
java.version = 1.8.0_261
java.runtime = Java(TM) SE Runtime Environment (1.8.0_261-b12)
os = Mac OS X (10.15.7; x86_64) (en_GB)
process = 54509@MYMACHINE
trace.specification = *=info:sun.net.www.protocol.http.HttpURLConnection=finest
********************************************************************************
但我明白了
The configured trace state included the following specifications that do not match any loggers currently registered in the server: sun.net.www.protocol.http.HttpURLConnection=all Ignore this message if the trace specifications sun.net.www.protocol.http.HttpURLConnection=all are valid.
并且 trace.log 文件中没有来自 HttpURLConnection class 的日志。那么我该如何配置呢
Liberty 跟踪适用于 Liberty 代码,但您要跟踪的 class 是 JVM 的一部分,因此您需要以不同的方式跟踪它。 JVM-specific 可能是这样,但这可能有效:https://www.rgagnon.com/javadetails/java-debug-HttpURLConnection-problem.html
根据 https://openliberty.io/docs/20.0.0.11/log-trace-configuration.html ,Liberty 会将您写入 java.util.logging 的内容汇总到其日志文件(messages.log 和 trace.log)。
如果尽管设置了适当的 traceSpecification
,但您认为具有 JUL 跟踪检测的内容并未显示在 Liberty 跟踪中,您可能需要仔细检查以确保 JUL 记录器确实已注册。您的日志消息 cut/pasted 表明,至少在处理跟踪规范时,指定的记录器尚未在 LogManager 中注册。
您可以检查哪些记录器已注册的一种方法是使用 LoggingMXBean (https://docs.oracle.com/javase/8/docs/api/java/util/logging/LoggingMXBean.html) 获取记录器名称,以查看当服务器处于 运行.
您可以从 jre/bin 目录的 jconsole 访问 LoggingMXBean。
如果您要查找的Logger不在列表中,可能是因为class使用了不同的Logger名称(使用包和class名称作为Logger名称只是一个约定),或者可能是使用 Logger 的 class 尚未达到注册其 Logger 的代码中的点(尽管在 [= 时注册 JUL 记录器是很常见的28=] 已初始化)。