Bug4j设置了没有Log4j属性文件的appender

时间:2013-02-15 10:58:10

标签: java logging log4j appender

我正在尝试使用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)

1 个答案:

答案 0 :(得分:0)

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

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

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

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

    致电

    log.error("Failed to do something");
    
  4. 最后你应该有这样的东西:

        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();