我在JBoss 5.1中有一個EJB3-Timer。 編輯: ShutdownHook應該設置一個標誌,doTimeOut()可以終止正常(否則它會完成作業,並且停止關機直到此計時器完成)。爲什麼JBoss 5.1中的ShutdownHook中的java.util.Logger不總是打印到server.log?
@Stateless
class Timer {
private static Thread hook;
static {
hook = new ShutdownHook();
}
@Timeout
public void doTimeOut(){
//some code
}
private class ShutdownHook implements Runnable(){
Logger.getLogger(ShutdownHook.class.getName()).log(Level.INFO, "MyBEAN.ShutdownHook execute hook " + hook); // Not always printed to log
Logger.getAnonymousLogger().log(Level.INFO, "MyBEAN.ShutdownHook execute hook " + hook); // throwns Exception
System.out.println("MyBEAN.ShutdownHook execute hook " + hook);
[...] // some code
}
}
我發現這兩個職位,但他們是從2005年的bug被標記爲已關閉:
http://www.pankaj-k.net/archives/2005/08/jboss_shutdown.html
http://jira.jboss.com/jira/browse/JBAS-2087
由anonymousLogger拋出的異常是一個空指針:
2011-02-02 09:16:33,120 ERROR [STDERR] Exception in thread "Thread-33"
2011-02-02 09:16:33,122 ERROR [STDERR] java.lang.NullPointerException
2011-02-02 09:16:33,122 ERROR [STDERR] at org.apache.log4j.CategoryKey.<init>(CategoryKey.java:31)
2011-02-02 09:16:33,122 ERROR [STDERR] at org.apache.log4j.Hierarchy.getLogger(Hierarchy.java:261)
2011-02-02 09:16:33,122 ERROR [STDERR] at org.apache.log4j.Hierarchy.getLogger(Hierarchy.java:242)
2011-02-02 09:16:33,122 ERROR [STDERR] at org.apache.log4j.LogManager.getLogger(LogManager.java:188)
2011-02-02 09:16:33,122 ERROR [STDERR] at org.apache.log4j.Logger.getLogger(Logger.java:104)
2011-02-02 09:16:33,122 ERROR [STDERR] at org.jboss.logbridge.LogBridgeHandler.publish(LogBridgeHandler.java:71)
2011-02-02 09:16:33,122 ERROR [STDERR] at java.util.logging.Logger.log(Unknown Source)
2011-02-02 09:16:33,122 ERROR [STDERR] at java.util.logging.Logger.doLog(Unknown Source)
2011-02-02 09:16:33,122 ERROR [STDERR] at java.util.logging.Logger.log(Unknown Source)
2011-02-02 09:16:33,122 ERROR [STDERR] at com.demo.MyBEAN$ShutdownHook.run(MyBEAN.java:202)
有什麼想法?
的JBoss 5.1包括它自己的SLF4J副本,爲什麼不使用,而不是可怕的`java.util.logging`東西? – skaffman 2011-02-02 08:55:25