我正在尝试使用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)
答案 0 :(得分:0)
你必须在Log4j appender上“激活选项”。
bug4jAppender.activateOptions();
bug4j代理想要非侵入性,因此它将报告排入队列并由后台线程处理。如果您的应用程序在报告问题后立即死亡,您应该等待后台线程报告仍在队列中的所有错误。
在main()的末尾添加以下行。
Bug4jAgent.shutdown();
Bug4j可以与log4j一起使用,也可以不与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();