Tomcatのcatalina.logファイルにすべてのstdout出力を記録する方法はありますか? (つまり、System.out.println()
に出力されるすべてのもの)
Tomcat/bin/startup.bat
を実行すると開くコンソールウィンドウには、stdoutからの出力が表示されますが、Tomcat/logs/catalina.<date>.log
には保存されません。
私の特定の問題は、コンソールに出力するためにlog4jで定義されたコンソールアペンダーがあることです。これらのログメッセージはTomcatコンソールウィンドウに正しく表示されますが、catalina.logには書き込まれません。 Tomcat 5.5をWindowsで実行しています。ありがとう。
編集:
ここに私のlog4j.propertiesファイルがあります。 Tomcat/webapps/app/WEB-INF/classes/log4j.properties
にあります:
log4j.rootCategory=DEBUG, console
log4j.appender.console=org.Apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.Apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=[%d{ABSOLUTE} %-5p %c{1}]: %m%n
以前にも同様の質問に遭遇しましたが、WindowsでSystem.outをログに記録することでこれを行う方法は見つかりませんでした WindowsサービスとしてTomcatを実行している場合を除き 。 startup.sh
は以下のようなcatalina.sh
ファイルにstdoutを記録するcatalina.out
を指すので、これはデフォルトでUnixで動作するようです
org.Apache.catalina.startup.Bootstrap "$@" start >> "$CATALINA_BASE"/logs/catalina.out 2>&1 &
Log4jでは、ConsoleAppender
自体はファイルに追加されず、System.out
のみに追加されます
ただし、log4jプロパティを変更してFileAppenderを追加すると、この構成は機能しますが、もちろんこれは別のログファイルに記録されます。
新しい設定
# Set root logger level to DEBUG.
log4j.rootLogger=DEBUG, console, myFile
log4j.appender.console=org.Apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.Apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=[%d{ABSOLUTE} %-5p %c{1}]: %m%n
# myFile writes to file
log4j.appender.myFile=org.Apache.log4j.RollingFileAppender
log4j.appender.myFile.File=logs/tomcatlog4j.log
log4j.appender.myFile.MaxFileSize=100KB
log4j.appender.myFile.layout=org.Apache.log4j.PatternLayout
log4j.appender.myFile.layout.ConversionPattern==[%d{ABSOLUTE} %-5p %c{1}]: %m%n
出力
= [15:24:03,819 INFO A1]:my.jsp内= [15:24:03,975 INFO A1]:out of my.jsp = [15:24:04,880 INFO A1]:In my.jsp = [15: 24:04,880情報A1]:my.jspから
また見なさい
Log4j.propertiesファイルがアプリケーションから見つかるかどうかを確認しましたか?たぶん、次のようなハードコードされたファイルパスを設定することで確認できます
-Dlog4j.configuration = file:/// C:\ Dev\log4j.properties
これらの変更後にログが書き込まれる場合、log4jファイルへの相対パスが間違っています。
Logging.propertiesでTomcat 5.5のデフォルトのロギング設定を見ると:
org.Apache.catalina.core.ContainerBase.[Catalina].[localhost].level = INFO
org.Apache.catalina.core.ContainerBase.[Catalina].[localhost].handlers = 2localhost.org.Apache.juli.FileHandler
これは、Webアプリケーションの標準出力がレベルINFO以上のファイルにのみログに記録されるように見えます http://Tomcat.Apache.org/Tomcat-5.5-doc/logging .html は、Tomcatでは、JULIロギング設定ロガーが独自のハンドラーを割り当てられている場合、親のハンドラーを使用しないと述べています。また、ファイルにはlocalhost
ではなくcatalina
のプレフィックスを付ける必要があります。しかし、その後、出力がどのように出力ウィンドウに来るのかわかりません:/