2011-12-29 13 views
4

私は、JAR(ejb)とWARを含むEARファイルにログバックを使用しています。これはGlassfish v3 Serverで実行する必要があります。 logback.xmlのロードを除いて、すべてが機能します。これは見つけることができません。 Netbeansでプロジェクトをビルドします。使用された外部ライブラリは、EARのlib-Directoryにあります(どちらの場所でも違いはありません...)。 logback.xml-Fileをroot-DirectoryまたはEARの別のサブディレクトリに配置する予定でした。クラスパスはJARとWARのマニフェストファイルに設定されています。しかし、いくつかの理由でlogback.xmlが見つかりませんでした。(build earにlogback.xml;が含まれています)Glassfish 3 + ear + logback.xml

私はlogback.xmlのすべての場所を試しました。 WARやJARでも何も動作しませんでした...

スタンドアロンWARを使用すると、すべて正常に動作し、logback.xmlが見つかりました。 (OK、すべてではありません。マニフェストのクラスパスを変更することはできません...)

私の質問:誰かがすでに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独自のログを使用することができます。次に、logbackの代わりにJDK14 slf4jモジュールが必要です。これは私達が使用しているものです –

+0

バックエンドとしてslf4jでlogbackを使用します。 – Knox

+0

また、リスナーをログバックに接続すると、設定ファイルの場所を確認できるようになります。これはあなたを助けるかもしれません。 –

答えて

4

私は(Mavenと分離モジュールconfig.jarを使用して)E​​AR内部分解展開分離簡単ジャーを作成、この問題を解決します。 実際にはlogback.xmlはlib/config.jar/logback.xmlに挿入されました

+1

基本的に、すべてのデプロイメントに共通のクラスパスに新しいjarを配置します。これは私の経験では、展開された成果物全体で物事を見る唯一の方法です。クラスタ化する必要がある場合は、アプリケーションサーバーがログの集中化を支援できないことに注意してください。 –

2

私はクラスパスに別のjarを入れないで解決策を見つけました。 1)logback.xmlをwarアプリケーションのクラスパス(/ src/java /など)に入れるだけです。 2)getResourceAsStreamを使用してファイルをロードするためのServletContextListenerを使用して、下に切り取らにと、最終的に、アプリケーション名などのいくつかのパラメータを()に設定します。

@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レベルのログバック設定で同じことをしました。私のクラスパスのエントリを操作しようとしたり、耳の構造を変更しようとすると、副作用の面ではるかに複雑でした!! – javapapo

+0

このソリューションは機能しましたが、起動後に構成が読み込まれることに注意してください。したがって、起動前に設定されている他のクラス(JPA、Quartz、Springなど)があれば、デプロイが完了するまでコンソールでデバッグするためにログに記録されます。結局私は受け入れられた答えの解決に行きました。 – unziberla

関連する問題