2011-12-29 45 views
4

我在包含JAR(ejb)和WAR的EAR文件中使用logback。這應該在Glassfish v3服務器上運行。一切正常,除了加載logback.xml。這找不到。 我使用Netbeans構建項目。使用的外部庫位於EAR的lib目錄中(它們應該沒有什麼區別)。我已經計劃將logback.xml文件放入根目錄或EAR中的另一個子目錄中。類路徑設置在JAR和WAR的Manifest-Files中。但由於某些原因logback.xml沒有找到......(構建耳包含logback.xml;))Glassfish 3 + ear + logback.xml

我已經嘗試了logback.xml的每個位置。即使在WAR或JAR中也是如此。沒有工作...

如果我使用獨立的WAR,那麼一切正常,並找到logback.xml。 (OK,不是全部,改變Manifest中的類路徑不起作用...)

所以我的問題:有沒有人已經得到logback.xml在EAR中運行?

這裏是我的清單(我希望,這個北京時間正確的語法):

Manifest-Version: 1.0 
Ant-Version: Apache Ant 1.8.2 
Created-By: 1.7.0_147-icedtea-b147 (Oracle Corporation) 
Class-Path: ./ 

希望有人能幫助我。

問候

+0

注意:您可能想要使用Glassfish自己的日誌記錄。然後你需要JDK14 slf4j模塊而不是logback。這就是我們使用的 – 2012-01-01 15:04:42

+0

我使用logback將slf4j作爲後端。 – Knox 2012-03-12 13:48:02

+0

另請注意,您可以將偵聽程序附加到logback,以便您可以查看它在何處查找配置文件。這可能會幫助你。 – 2012-03-12 15:28:50

回答

4

我解決了這個問題創造一個分離罐簡單我部署(使用Maven和分離的模塊config.jar)耳內分解。 在實踐中,logback.xml被插入到lib/config.jar/logback.xml中

+1

所以你基本上把一個新的jar放到所有部署共有的classpath中。根據我的經驗,這是跨部署工件查看事物的唯一方法。請注意,如果需要羣集,應用程序服務器無法幫助您集中日誌。 – 2012-09-16 00:36:58

2

我發現了一個解決方案,而不在類路徑中放置另一個jar。 1)只需將logback.xml放入war應用程序的類路徑(例如/ src/java /); 2)使用的ServletContextListener加載使用的getResourceAsStream,最終的文件,設置一些參數(如應用程序名稱),如下剪斷:

@Override 
    public void contextInitialized(ServletContextEvent sce) { 
     System.out.println("Logback contextInitialized !!!!"); 
     LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory(); 
     JoranConfigurator jc = new JoranConfigurator(); 
     jc.setContext(context); context.reset(); 
     // override default configuration 
     // inject the name of the current application as "application-name" 
     // property of the LoggerContext 
     context.putProperty("application-name", "menu_dinamico"); 
     try { 
      InputStream is = getClass().getClassLoader().getResourceAsStream("logback.xml"); 
      if(is == null) { 
       System.out.println("Logback xml file non trovato"); 
      } 
      else { 
       jc.doConfigure(is); 
      } 
     } catch (JoranException ex) { 
      System.out.println("Logback contextInitialized error"); 
      StatusPrinter.print(context); 
      ex.printStackTrace(); 
     } 
    } 

現在文件logback.xml是公認的。

+0

嗨Maxqua72,我遵循你的建議,並在EAR級別的logback配置上做了同樣的事情。試圖操縱我的班級路徑條目或改變耳朵結構在副作用方面要複雜得多! – javapapo 2014-03-26 12:11:43

+0

該解決方案可行,但請注意,配置將在啓動後加載。因此如果您有任何其他在啓動之前正在配置的類(例如,JPA,Quartz,Spring,...),他們將在控制檯中記錄調試,直到部署完成。最後,我去了接受的答案解決方案。 – unziberla 2015-07-03 18:18:38