代码之家  ›  专栏  ›  技术社区  ›  Jayan

如何将日志写入btrace中的文件?

  •  4
  • Jayan  · 技术社区  · 14 年前

    我有以下的 btrace 脚本。我想记录函数在特定类中的输入和输出。

    ..
    package com.sun.btrace.samples;
    
    import com.sun.btrace.BTraceUtils;
    import com.sun.btrace.Profiler;
    import com.sun.btrace.annotations.*;
    @BTrace class Profiling {
    @Property
    Profiler swingProfiler = BTraceUtils.Profiling.newProfiler();
    
    @OnMethod(
        clazz="com.pkg.classname", 
        method="/.*/")
        void entry(@ProbeMethodName(fqn=true) String probeMethod) {
            BTraceUtils.print("Entry" );
            BTraceUtils.println(BTraceUtils.timestamp() );
            BTraceUtils.println(probeMethod);
        }
    
    @OnMethod(
        clazz="com.pkg.classname", 
        location=@Location(value=Kind.RETURN)
        )
        void exit(@ProbeMethodName(fqn=true) String probeMethod, @Duration long duration) {
            BTraceUtils.print("Exit:" );
            BTraceUtils.println(BTraceUtils.timestamp() );
            BTraceUtils.println(probeMethod);
        }
    
    }
    

    这个在控制台上发出。如何将结果写入文件?Btrace不允许创建新对象。

    (显而易见的解决方法是重定向到文件。另一个选择是使用VisualVM btrace插件-然后输出到VisualVM窗口。请注意,如果它是一个处理非常大的输出500Mb左右。)

    3 回复  |  直到 13 年前
        1
  •  5
  •   JB-    14 年前

    您可以使用BTrace代理启动应用程序( http://kenai.com/projects/btrace/pages/UserGuide#btrace-agent ). 然后您可以指定 脚本输出文件 印刷品 etc.将转到指定的文件而不是stdout。

        2
  •  1
  •   dogbane    14 年前

        3
  •  -2
  •   IInspectable    12 年前

    您可以将控制台输出写入如下日志文件:

    Process p = Runtime.getRuntime().exec("cmd /c " + command);
    StringBuffer output = new StringBuffer("");
    if (p != null) {
        BufferedReader is = new BufferedReader(new InputStreamReader(p.getInputStream()));
        String buf = "";
        try {
            int count = 0;
            while ((buf = is.readLine()) != null) {
                output.append(buf);
                output.append(System.getProperty("line.separator"));
                if(++count % flushLineNumber == 0){
                    FileUtils.writeStringToFile(file, output.toString(), true);
                    output.setLength(0);
                }
            }
            is.close();
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
    

    命令是brtrace…..我已经在我的个人项目中拥有此功能。