1

Netbeans と Glassfish 3.1.2 を使用する EJB モジュールがあります。ログを実装する必要がありますが、EJB で log4j を構成する方法がわかりません。展開時にこの問題が発生しています:

SEVERE: log4j:ERROR Ignoring configuration file [file:/C:/Users/Luis Carlos/AppData/Roaming/NetBeans/7.2/config/GF3/domain1/config/log4j.properties].
SEVERE: log4j:WARN No appenders could be found for logger (beans.RutasBean).
SEVERE: log4j:WARN Please initialize the log4j system properly.
SEVERE: log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

これは、glassfish サーバー コンソールに表示されます。

これは log4j.properties ファイルです。

log4j.rootLogger=DEBUG, FILE
log4j.logger.myapp=DEBUG
log4j.appender.FILE=org.apache.log4j.RollingFileAppender 
log4j.appender.FILE.File=/space/gfv3/v3setup/GlassFish3/GlassFish/domains/domain1/logs/log4j.log
log4j.appender.FILE.MaxFileSize=100KB 
log4j.appender.FILE.MaxBackupIndex=1 
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout 
log4j.appender.FILE.layout.ConversionPattern=%d{DATE} %-5p %c{1} : %m%n 

これを試し てみたところ 、グラスフィッシュのサーバー管理でこのようにプロパティファイルを構成する必要があると言われています -Dlog4j.configuration=file:///${com.sun.aas.instanceRoot}/config/log4j.properties が、機能しませんでした

シングルトン セッション Bean があり、スタートアップ メソッドでログを構成するので、これに従ってBean に次のようにします。

    private Logger log;
private static final String LOG4J_PROPERTIES = "/log4j.properties";

@PostConstruct
public void startup(){
    URL url = this.getClass().getResource(LOG4J_PROPERTIES);
    if(url == null || url.getFile().length() == 0) {
    throw new RuntimeException("Log4j config file "+ LOG4J_PROPERTIES +" not found");
}
    PropertyConfigurator.configure(url);
    log = Logger.getLogger(this.getClass());
    log.info("Starting application");
    em = Persistence.createEntityManagerFactory("BuscaBus-ejbPU");
    rutaController = new RutaJpaController(ut, em);
    actualizarCoordenadasRutas();
    ...
}

それでも同じエラーが表示されます

EJB 環境で log4j を構成するにはどうすればよいですか? ありがとう

4

1 に答える 1

5

以下をせよ:

  1. サーバーから削除-Dlog4j.configuration=します。
  2. log4j.properties配置した可能性のあるものをすべて削除しますC:/Users/Luis Carlos/AppData/Roaming/NetBeans/7.2/config/GF3/domain1/config
  3. 次のコードを削除します。

    URL url = this.getClass().getResource(LOG4J_PROPERTIES);
    if(url == null || url.getFile().length() == 0) {
    throw new RuntimeException("Log4j config file "+ LOG4J_PROPERTIES +" not found");
    
  4. これを削除します:PropertyConfigurator.configure(url);

前述の手順を完了すると、コードは、Log4Jがクラスパスlog4j.propertiesからファイルを自動的にロードするようになります。私の経験から、これが Log4J を構成するための最も柔軟な方法です。あとは、 がクラスパスのどこかに実際に存在することを確認するだけです。log4j.properties

次のオプションがあります。

  1. log4j.propertiesEJB モジュールのデフォルト パッケージ内にファイルを配置します。そうlog4j.propertiesすれば、ファイルはアプリケーションと一緒にパッケージ化されます。これには賛否両論がありますが、それは別の話です (おそらく、別の Q&A スレッドに属します)。
  2. をファイル システムのディレクトリに配置し、log4j.propertiesそのディレクトリをサーバーのクラスパスに追加します。その方法については、GlassFish のドキュメントに従ってください。

ファイルを URL で参照する必要がある場合は、ディレクティブlog4j.propertiesを元に戻します。ファイル-Dlog4j.configuration=を指定して指定した URL が実際に存在することを確認してください。また、指定します。これにより、Log4J 自体からのデバッグ情報が提供され、何を行っているかが正確にわかります。log4j.properties-Dlog4j.debug=true

于 2012-11-28T00:36:21.627 に答える