0

我正在尝试报告 Bug4J 库的错误。根据他们的网站,您应该在 log4j.xml 文件中插入以下指令:

    <appender name="bug4j" class="org.bug4j.client.Bug4jAppender">
       <param name="serverUrl" value="http://<bug4j.host.name>:8063/"/>
       <param name="applicationName" value="My Application"/>
       <param name="applicationVersion" value="1.3"/>
    </appender>

我正在尝试在没有属性文件的情况下设置相同的参数,但是在 localhost:8063 上的 Web 控制台中没有报告错误,到目前为止,我尝试了以下操作:

public TestClass
{
 static Logger log = Logger.getLogger(TestClass.class);
 TestClass()
  {
    BasicConfigurator.configure();
    Logger.getRootLogger().setLevel(Level.INFO);

    Bug4jAppender bug4jAppender = new Bug4jAppender();
    bug4jAppender.setName("BUG4J");
    bug4jAppender.setServerUrl("http://localhost:8063/");
    bug4jAppender.setApplicationName("testapp");
    bug4jAppender.setApplicationVersion("1.9");

    Logger.getRootLogger().addAppender(bug4jAppender);
    log.addAppender(bug4jAppender);

    Bug4jAgent.report("Failed to do something", null);
    log.info("Failed to do something");
 }
}

请问有什么想法吗?

编辑:可能与为什么实际上没有报告任何内容有关,如果我添加:

    BasicConfigurator.configure();
    Logger.getRootLogger().setLevel(Level.INFO);

    Bug4jAppender bug4jAppender = new Bug4jAppender();
    bug4jAppender.setName("BUG4J");
    bug4jAppender.setServerUrl("http://127.0.0.1:8063/");
    bug4jAppender.setApplicationName("testapp");
    bug4jAppender.setApplicationVersion("1.9");
    bug4jAppender.activateOptions();

    Logger.getRootLogger().addAppender(bug4jAppender);

    //Bug4jAgent.report("Failed to do something", null);
    log.warn("Failed to do something");
    Bug4jAgent.shutdown();

我明白了

 Exception in thread "main" java.lang.NullPointerException
at org.bug4j.client.Bug4jAppender.append(Bug4jAppender.java:48)
at org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:251)
at     org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:66)
at org.apache.log4j.Category.callAppenders(Category.java:206)
at org.apache.log4j.Category.forcedLog(Category.java:391)
at org.apache.log4j.Category.warn(Category.java:1043)
at testapp.Main.<init>(Main.java:118)
at testapp.Main.main(Main.java:837)
4

1 回答 1

0
  1. 您必须在 Log4j appender 上“激活选项”。

    bug4jAppender.activateOptions();
    
  2. bug4j 代理希望是非侵入式的,因此它将报告排入队列并由后台线程处理。如果您的应用程序在报告问题后立即死亡,您应该等待后台线程报告仍在队列中的所有错误。
    在 main() 的末尾添加以下行。

    Bug4jAgent.shutdown();
    
  3. Bug4j 可以与或不与 log4j 一起使用。如果您将它与 log4j 一起使用,那么您可以以编程方式设置代理,但您可以忘记它并使用 log4j 报告错误。
    代替

    Bug4jAgent.report("Failed to do something", null);
    log.info("Failed to do something");
    

    打电话

    log.error("Failed to do something");
    

最后你应该有这样的东西:

    BasicConfigurator.configure();
    Logger.getRootLogger().setLevel(Level.INFO);

    Bug4jAppender bug4jAppender = new Bug4jAppender();
    bug4jAppender.setName("BUG4J");
    bug4jAppender.setServerUrl("http://localhost:8063/");
    bug4jAppender.setApplicationName("testapp");
    bug4jAppender.setApplicationVersion("1.9");
    bug4jAppender.activateOptions();

    Logger.getRootLogger().addAppender(bug4jAppender);

    log.error("Failed to do something");
    Bug4jAgent.shutdown();
于 2013-02-16T16:14:51.013 回答