-1

我正在执行用于登录 Lttng 跟踪会话的 java 示例。为此,我正在使用 lttng-ust-jul 和 java 日志库。

我遵循了这里给出的所有步骤:lttng java tutorial 但是lttng 视图仍然没有输出任何内容.. 意味着没有任何东西被跟踪会话文件。

以下是我遵循的详细步骤及其各自的输出:

测试.Java:

import java.util.logging.Logger;
import java.util.logging.Level;
import org.lttng.ust.agent.LTTngAgent;

public class Test
{
    private static final int answer = 42;

    public static void main(String[] argv) throws Exception
    {
        // create a logger
        Logger logger = Logger.getLogger("jello");

        // call this as soon as possible (before logging)
        LTTngAgent lttngAgent = LTTngAgent.getLTTngAgent();

        logger.setLevel(Level.FINEST);

        // log at will!
        logger.info("some info");
        logger.warning("some warning");
        Thread.sleep(500);
        logger.finer("finer information; the answer is " + answer);
        Thread.sleep(123);
        logger.severe("error!");

        // not mandatory, but cleaner
        lttngAgent.dispose();
    }
}

命令:

lttng 创建新会话

Session newSession created.
Traces will be written in /home/XXX/lttng-traces/newSession-20160308-005717

lttng 启用事件 -j -a

All JUL events are enabled in channel channel0

开始

Tracing started for session newSession

javac -cp /usr/share/java/liblttng-ust-agent.jar Test.java

java -cp /usr/share/java/liblttng-ust-agent.jar:. 测试

Mar 08, 2016 12:58:54 AM Test main
INFO: some info
Mar 08, 2016 12:58:54 AM Test main
WARNING: some warning
Mar 08, 2016 12:58:55 AM Test main
SEVERE: error!

停止

Waiting for data availability.
Tracing stopped for session newSession

观点

Trace directory: /home/XXX/lttng-traces/newSession-20160308-005717

“lttng view”命令的期望输出应该类似于

[22:46:14.940125765] (+0.000004944) XXX : { cpu_id = 8 }, { my_string_field = "some info" }
[22:46:14.940131743] (+0.000005978) XXX : { cpu_id = 8 }, { my_string_field = "some warning" }
...

我也从root用户尝试过..因此可以排除用户无权写入文件的可能性。

此外,C++ 示例运行良好,即。样本能够追踪数据。所以我们甚至可以排除lttng配置错误的可能性。

Machine Configuration:
Ubuntu 15.04
lttng version - 2.7

我怎样才能进一步用 jul 调试这个问题?

4

1 回答 1

0

lttng list -j您可以做的一件事是在其中一个调用期间发出一个命令来稍微调试问题Thread.sleep(),并且可能会增加它们的持续时间。您注册的“jello”记录器应显示在列表中。如果不是,那么您就会知道问题可能出在 Java 代理上,而不是 UST 方面。

我还建议看看 LTTng-UST 的git master版本。对 Java 代理进行了大规模的返工。以前的版本使用奇怪的反射机制来加载 JUL 和 log4j 插件,并且在某些错误情况下会静默失败。这可能就是您在这里所经历的。

应该与 LTTng 2.8 一起发布的新版本引入了一个更加明确的新 API。应用程序直接控制日志处理程序,并且应该立即报告常见错误(找不到 Java 类、找不到本机库等)。您可以查看更新示例中的新 API 。

在所有情况下,请确保使用相同版本的 Java 代理、lttng-ust 和 lttng-tools(2.7 或 2.8/master),并且系统上不存在其他版本以避免兼容性错误。

于 2016-03-08T00:13:57.530 回答