2009-02-23 19 views
5

weblogicでは、コンソールでServerLogがデフォルトのJDKログの代わりにlog4jを使用するように設定できます。weblogicでのlog4jログインの使用9/10

set JAVA_OPTIONS=%JAVA_OPTIONS% -Dlog4j.configuration=file:<path>/log4j.properties 
set JAVA_OPTIONS=%JAVA_OPTIONS% -Dorg.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger 
set JAVA_OPTIONS=%JAVA_OPTIONS% -Dweblogic.log.Log4jLoggingEnabled=true 
:のServerLogは、log4j.propertiesファイルを使用しますが、config.xmlにlog4j.propertiesファイルをクラスパスにある場合でも で構成を使用するようだと、私はこれらのプロパティを設定されていませんが

Weblogic Server Loggingにlog4j.properties設定を使用することはできますか、またはlog4j設定をjavaコードでのみ変更できますか?

答えて

6

特にWebLogicについてはわかりませんが、-Dlog4j.debugを追加すると、log4jは設定をどこから探しているかを教えてくれます。以前はtomcatのログ記録の問題を追跡する際に非常に貴重なことがわかった。

log4j設定プロセスの詳細については、PropertyConfiguratorDOMConfiguratorのドキュメントをご覧ください。

+0

-Dlog4jを追加する必要があります。デバッグ? – rayman

+1

'-Dlog4j.debug'オプションをjavaのコマンドラインパラメータに追加する必要があります。 WebLogicの場合、これはServers//Server Start/Argumentsにあります。 –

0

log4j.xmlをクラスパスに配置すると、WebLogicはそれを取得します。私はWebLogicでlog4jを使ってApache Commonsロギングを使用しています。これは簡単なことです。これらのJavaオプションは必要ありません。

+0

これは機能しません。説明されているjavaオプションを使用すると、アプリケーションはlog4j.properties設定を使用して正しくログしていますが、BEA SERVERロギングを設定することができます。明らかに、ビーア・サーバ・ロギングはクラスパス内のlog4j.xmlを見ない。 – Edwin

0

上記のオプションはどこで設定していますか?代わりに、デフォルトのJavaロギングのLog4jのロガーへのロギングを指定するにはlog4jの

+0

上記のオプションは、スタートアップスクリプト(startweblogic.cmd)で設定します。私はlog4.propertiesがデプロイするカスタムコードで使用されているが、ServerLogでは使用されていないことを確認しています(AqualogicはServerLogにログを記録するため、aqualogicログはlog4j.properties設定を使用していません)。 – Edwin

0

を使用する各管理対象サーバーのサーバー開始オプションで-Dlog4jオプションを入れてみてください:

* When you start the Administration Server, include the following Java option in the weblogic.Server command: 

    -Dweblogic.log.Log4jLoggingEnabled=true 

から:http://edocs.bea.com/wls/docs103/logging/config_logs.html#wp1014610

+0

私はすでにそれを試みました。その質問でさえ文書化しました。 (3番目のJavaオプション)。これは私のadmin-serverのjavaオプションに含まれていますが、私が望む効果はありません。 – Edwin

+0

config.xmlの設定を変更しましたか? – jon077

+0

config.xmlは、コンソールで行った変更に基づいて変更されました。 config.xmlの設定がlog4j.propertiesの設定を覆すように見えるので、loggingはconfig.xmlで設定されており、log4j.propertiesの設定に変更する方法はわかりません。 – Edwin

0

私は意図したとおりにこれを行うことはありませんでした。

最終的に何らかの回避策を作成しました。 Weblogicサーバーログをリッスンするハンドラを登録します。 このハンドラから、自分でlog4jにログを記録します。そのロギングは、私が望むことをするためにリダイレクトすることができます。

は、カスタムlogHandlerを作成します。

public class CustomLogHandler extends Handler { 
.. 

    public CustomLogHandler() throws SecurityException, IOException, 
      NamingException { 

     String log4jConfig = LogFilterConfiguration.getLog4jDirectory(); 
     classlogger.info("log4j configured for file"+ log4jConfig); 
     PropertyConfigurator.configure(log4jConfig); 
     logFilterConfiguration = new LogFilterConfiguration(); 
    } 

    public void publish(LogRecord record) { 
     WLLogRecord rec = (WLLogRecord) record; 
     if (!isLoggable(rec)) 
      return; 
     if (getLoggerName().. is something i want to log) { 
         // do my own log4j logging 
        } 

、その後のApplicationLifecycleListenerを作成します。 とpostStartメソッド:

public void postStart(ApplicationLifecycleEvent evt) { 
    Logger logger = LoggingHelper.getServerLogger(); 
    Handler oldHandler = null; 
    Handler[] currentHandlers = logger.getHandlers(); 

       .. code to remove an old custom handler if exists... 
    with something like logger.removeHandler(oldHandler); 

    // add custom handler to serverlogger. 
    CustomLogHandler h = null;  
    try { 
     h = new CustomLogHandler(); 
     // If handler was removed we can add a new version. 
     if (!(unRemovedHandlerClasses.contains(h.getClass()))){ 
      logger.addHandler(h); 
      registerMBean(h) ; 
     } 
    } catch (Exception nmex) { 
    classLogger.error("Error adding CustomLogHandler to serverlogger " 
       + nmex.getMessage()); 
     logger.removeHandler(h); 
    } 


} 
関連する問題