2012-01-25 19 views
0

Windows 2008でtomcat6を使ってlog4jをセットアップしました。文はログファイルに記録されますが、System.out呼び出しは記録されません。Log4jはファイルにSystem.outを書き込んでいません

コマンドプロンプトからtomcat6.exeを実行すると、System.outコールがプロンプトに表示されますが、ログファイルには同じものは記録されません。

次のように私はConsoleAppenderFileloggerを定義している:標準のうちにすべてのあなたのメッセージをログに記録し、あなたがConsoleAppenderを作成しているあなたの上記のlog4j構成で

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> 

    <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="true" threshold="debug"> 
     <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender"> 
     <layout class="org.apache.log4j.SimpleLayout"> 
    </layout> 
     </appender> 

     <appender name="CATALINA" class="org.apache.log4j.appender.TimeAndSizeRollingAppender"> 
     <param name="File" value="${catalina.home}/logs/catalina.log"/> 
       <param name="Threshold" value="DEBUG"/> 
     <param name="Append" value="true"/> 
     <param name="ImmediateFlush" value="true"/> 
     <param name="DatePattern" value=".yyyy-MM-dd"/> 
     <param name="MaxFileSize" value="100MB"/> 
     <param name="MaxRollFileCount" value="100"/> 
     <param name="ScavengeInterval" value="30000"/> 
     <param name="BufferedIO" value="false"/> 
     <param name="CompressionAlgorithm" value="ZIP"/> 
    <layout class="org.apache.log4j.PatternLayout"> 
     <param name="ConversionPattern" value="%d{MMM dd, yyyy HH:mm:ss a} %c%n \r%p: %m%n"/> 
    </layout> 
    </appender> 

<logger name="org.apache" additivity="false"> 
    <level value="INFO"/> 
    <appender-ref ref="CATALINA" /> 
</logger> 

    <root> 
      <priority value="INFO"/> 
    <appender-ref ref="CONSOLE"/> 
    </root> 

+0

SOPを行くと言ったのに、あなたlocalhost.logファイルは、それが、私の場合と同様に= System.out.print詳細な回答ショーンため –

答えて

1

を。これはSystem.out.println()の呼び出しと同じ場所です。今度は2番目のアペンダー(FileAppender)を作成した時点で、スタンダードアウトに書き込むのではなく、現在ファイルに書き出しています。あなたがなり文句を言わないこれにより、私は(あなたのSystem.out.printlnを変更することをお勧め

Log4jの呼び出しを使用して呼び出します[エラー()、情報()、デバッグ()などを..]

public class MyClass{ 
private static Logger logger = Logger.getLogger(MyClass.class); 

public MyClass(){ 
    logger.debug("Hello World"); 
} 
} 

あなたのlog4jをあなたの標準の呼び出しとミックスし、マッチングさせてから、コンソールとファイル作成の間で必要に応じてアプリケーションを設定することができます。 System.out呼び出しに対してLoggerを使用することの利点は、実行時に構成可能で、さまざまなレベルでメッセージを記録できることです。

編集コメント

Tomcatのあたりなど、デフォルトでは、Tomcatは、その基本的なロギング操作を実行するためにJULIと呼ばれるロギングフレームワークを使用しています(名前はTomcatの仕様ごとに多少異なる場合があります)%tomcat_home%/logs/catalina.outに標準出力メッセージを記録します。ログを別の場所に書き込んでからtomcatフォルダに書き出したい場合は、ファイルを編集してください。 %tomcat_home/conf/logging.properties

もう一つのシナリオは、stdoutを完全にリダイレクトすることです。これは怒られますが、行うことができます。ファイルcatalina.bat(またはUNIXの場合は.sh)を見ると、デフォルトのJULI実装を上書きするLOGGING_MANAGERの起動オプションが表示されます。私はこのオプションを一度も使用していないので、もっと深く研究する必要があります。 JULIをもっと理解するためにもっと読むApacheのWiki article

+0

感謝。実際にログに記録したい出力は、コンソール上の次のlog4j情報とともに表示されます:log4j:reset attribute = "false"。 log4j:しきい値= "デバッグ"。 log4j:org.apache.log4j.Loggerのインスタンスを取得しています。 log4j:[org.apache] additivityを[false]に設定します。 log4j:org.apacheのレベル値は[INFO]です。 このロガーをログファイルに送ることができれば幸いです。ありがとう –

+0

ですので、ログを記録するlog4j初期化メッセージはありますか? – Sean

+0

標準出力メッセージであれば、デフォルトで%tomcat%/ logs/catalina.outの下にログオンする必要があります。そうしないと、stdoutをリダイレクトする必要があります。デフォルトでTomcatは上記のファイルに標準を記録します – Sean

1

This pageは、これを行う方法についてのヒントを示していますが、それは少しわかりにくいです。要約:

  • tomcat設定のcontext.xmlファイルを開きます。私にとっては、Eclipseの内部で開発し、これは
  • ワークスペース\プロジェクト\

の下で私のEclipseのワークスペース内にある\サーバー\サーバー名-config設定\ config.xmlの

もありますグローバルTomcatバージョン下にはショットの価値があります

\ tomcat \ conf \ contextXML

  • (オプション私は思う)、アプリケーションのロギングを設定し

    <context swallowOutput="true"> 
    
  • 以下のように文脈に= "true" をswallowOutputを追加します。アプリケーションでLogBackを使用しましたが、アプリケーションログではない内部Tomcatログを記録するため、関連性はよくわかりません。

  • 私のtomcat.loggingプロパティには、次のログ構成行があります。これらの行は

    2localhost.org.apache.juli.FileHandler.level = FINE 
    2localhost.org.apache.juli.FileHandler.directory = ${catalina.base}/logs 
    2localhost.org.apache.juli.FileHandler.prefix = localhost. 
    
  • 他の人が言っているのに、それが彼らのcatalina.outファイルに行き、私のSystem.out文がに行くのログファイルを定義し、あなたがするSystem.out.printlnを行うとき、今ではで表示されます私が言ったように、一部の人々はそれがcatalina.logに

関連する問題