• 締切済み

log4j DailyRollingFileAppenderについて

いつもお世話になっています。 現在、log4jを使用してログをファイルに出力しています。 DailyRollingFileAppenderを使用し、日にち毎にリネームしています。 しかし、DailyRollingFileAppenderだとNullPointerExceptionなど想定していないExceptionが出力されません。 行いたいことは、 「ログファイルを日毎にリネームして想定していないExceptionも出力する」ということです。 log4jをいろいろ調べてみて、DailyRollingFileAppenderでExceptionを出力するには、catchしてログを出力するような設定をしなければ出力できないのでは?と思っています。 変わって、ConsoleAppenderでは想定していないExceptionも出力されます。 これは、コンソール出力のためだと思っています。 (検討違いでしたら、教えてください<(_ _)>) ここで質問なのですが、 1.DailyRollingFileAppenderで想定していないExceptionを出力することはできるのでしょうか? 2.1が不可能な場合、ConsoleAppenderをファイルに出力し、日毎にリネームすることができるのでしょうか? ご存知の方がいらしたら、ぜひ教えてください! 早急に直したいのですが、まったく前に進みません。私の力不足なんですが・・・ よろしくお願いします。

みんなの回答

noname#18558
noname#18558
回答No.2

ちょっと状況が把握できないのですが、 log4j.propertiesの設定には DailyRollingFileAppenderとConsoleAppenderの設定があるということですか? で、NullPointerExceptionが出力されるのはコンソールだけということですか? もし、そうだとするとNullPointerExceptionがコンソールにしか出力されないのは、Tomcatがコンソールに出力しているだけだと思います。 今すぐに確認できないのですが、 NullPointerExceptionの出力形式も、あなたの設定したlog4jのスタイルになっていますか?

coroco
質問者

お礼

出力形式は設定したスタイルになっていました。 どうしてもわかりませんでしたので、 atコマンドでリネームするようにしました。 お礼が遅れてすみませんでした。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
noname#18558
noname#18558
回答No.1

どのAppendarを使っても、log出力の処理を記述してない限りログに出力されることはないと思います。 コンソールに出力されているのは、log4jじゃない何かが出力してるのではないでしょうか? また、環境がよくわからないのですが、NullPointerExceptionはどこで発生してるのですか? サーブレットですか?Mainクラスですか?Appendarクラスですか? それによっても対応が変わってくると思います。 また、余計なお世話かもしれませんが、 想定してないExceptionに対しても、アプリケーションでは何かの処理をすべきですよ。

coroco
質問者

補足

回答ありがとうございます。 出力したいのはサーブレットで発生したExceptionです。 環境はtomcatで動かしています。 stdout.logにはExceptionが出力されていて、log4jプロパティファイルにstdoutの設定がConsoleAppenderになっています。(stdout.logはlog4jの設定は関係ないのでしょうか・・・) 余計なお世話なんてとんでもない。 そうですね。想定していないExceptionも処理すべきだと思うのですが・・・ 次回からはそうします! 補足がわかりにくいようでしたら、また指摘お願いします!

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Javaでlog4jを使ってログ出力を行っています。

    Javaでlog4jを使ってログ出力を行っています。 環境は以下の通りです。 j2sdk1.4.2 log4j1.2.8 log4j.xml内で指定したログファイル(test.log)を別のアプリで開いた状態で Javaプログラムを実行するとコンソールに以下のエラーが出力されます。 【エラー発生処理】 DOMConfiturator.configure(log4j.xml); 【エラー内容】 log4j:ERROR setFile(null, true) call failed java.io.FileNotFoundException : test.log(プロセスはファイルにアクセスできません。 別のプロセスが使用中です。) ファイルを開いているために書き込めず、エラーになってしまうのは良いのですが、 ログを出力しないだけで処理自体は続行してしまいます。 (ログを書き込めなかったらそこで処理を終了したいです。) 「書き込めなかった場合に例外をcatchする」等のことは可能でしょうか?

    • ベストアンサー
    • Java
  • log4jでスタックトレースを出力できるのでしょうか?

    log4jでスタックトレースを出力できるのでしょうか? }catch (Exception e){ logger.error(e); } で行うとスタックトレースの1行目しか出力されません。 e.printStackTrace(); のようにすべて出力するにはどうすればよいのでしょうか?

    • ベストアンサー
    • Java
  • log4jの使用方法について

    現在、Javaで開発されたアプリケーションのシステム運用を行っています。 (OSはLinux、APサーバーはTomcatを使用) あるバグ解析のため、ログ出力(log4jを使用)を追加したところ Socket Exception:Too many open filesが発生しました。 原因はログ出力した際のファイルクローズ漏れでは?と指摘を受けました。 log4jのログ出力機能を使用した際にはクローズ処理は必要なのでしょうか? 以上、よろしくお願いします。

  • log4jについて

    log4jというのを使ってログをeclipseのコンソールに出そうと、 log4j.rootCategory=DEBUG, CONSOLE log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender log4j.appender.CONSOLE.Threshold=DEBUG log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout log4j.appender.CONSOLE.layout.ConversionPattern=%d{yyyy/MM/dd HH:mm:ss.SSS} %-5p|(%F#%M:%L) %n としました。 ですが、ログが 2005/01/11 14:59:40.792 INFO |(?#info:?) となって%Fと%Lが出力されてません。 原因として何が考えられるでしょうか? また、対応策はどうしたらよいでしょうか?

    • ベストアンサー
    • Java
  • log4jでログファイルに出力されないです。

    log4jでログファイルに出力されないです。 ただ、まったく出力されないわけではなく、特定のWebアプリから出力されていないようです。 複数のWebアプリケーションから、同じログファイルapp.logに書き込むようlog4j.propertiesに設定しています。 もしかして、これがよくないのでしょうか。 ひとつのWebアプリケーションがログファイルを確保したら、ほかのWebアプリケーションはもう書き込みができないのでしょうか? どうか、よろしくお願いいたします。

    • ベストアンサー
    • Java
  • Log4Jでの日付毎のログについて

    Log4Jを用いて、日付毎のログを取ろうと思っております。 具体的には、テキストエディター上で変更があった際に、その都度、その内容をログに取りたいのですが、DailyRollingFileAppenderの場合、その日のログは次の日になったときに出力されてしまいます。 これをLog4Jでやることは可能なのでしょうか? また、Log4Jより容易にできるものがありますでしょうか? よろしくお願いいたします。

    • ベストアンサー
    • Java
  • Javaでlog4jを使ってログを出力させてます。

    Javaでlog4jを使ってログを出力させてます。 複数のログを出力したいので、同一propertiesに複数のAppenderを定義しています。 内容は以下の通りです。 log4j.logger.processA=DEBUG, A log4j.appender.A=org.apache.log4j.DailyRollingFileAppender log4j.appender.A.File=a.log log4j.appender.A.DatePattern='.'yyyy-MM-dd-HH-mm log4j.appender.A.Append=true log4j.appender.A.layout=org.apache.log4j.PatternLayout log4j.appender.A.layout.ConversionPattern=%d{yyyy/MM/dd HH:mm:ss} %-5p %c - %m%n log4j.logger.processB=DEBUG, B log4j.appender.B=org.apache.log4j.DailyRollingFileAppender log4j.appender.B.File=b.log log4j.appender.B.DatePattern='.'yyyy-MM-dd-HH-mm log4j.appender.B.Append=true log4j.appender.B.layout=org.apache.log4j.PatternLayout log4j.appender.B.layout.ConversionPattern=%d{yyyy/MM/dd HH:mm:ss} %-5p %c - %m%n log4j.logger.processC=DEBUG, C log4j.appender.C=org.apache.log4j.DailyRollingFileAppender log4j.appender.C.File=c.log log4j.appender.C.DatePattern='.'yyyy-MM-dd-HH-mm log4j.appender.C.Append=true log4j.appender.C.layout=org.apache.log4j.PatternLayout log4j.appender.C.layout.ConversionPattern=%d{yyyy/MM/dd HH:mm:ss} %-5p %c - %m%n processAやらprocessB、processCは同一サーバ内で非同期で動くプロセスです。 つまり、動作するプロセス毎にログ出力先を変えてます。 各プロセスを動かすと、ちゃんと想定したログファイルに出力されるんですが、 ローテートの時に「log4j:ERROR Failed to rename ~」のエラーが出て、 正常にローテートしません。 なぜだろうと思って、一度全てのログファイルを削除して、 processAだけ動かしてみました。 すると、a.logだけが出力されると思いきや、 b.logとc.logまで0kbではありますが出力されたんです。 つまり、データこそ出力しないけど、 他プロセスで出力するファイルをロックしてたんです。 これって、同一propertiesに書いているのが悪いんでしょうか? それとも、設定が不足している為、そうなってしまってるんでしょうか? ご存知の方、お知恵をお貸し下さい。

    • ベストアンサー
    • Java
  • log4jでログレベルが取得できない。

    次のようなLOG4jの設定ファイルからログレベルを取得したいのですが うまく取得できません。 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> <!-- 一般ログファイル出力 --> <appender name="LogFile" class="org.apache.log4j.FileAppender"> <param name="File" value="c:/TestLog4j.log"/> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d %-5p %m (%F:%L) %c[%t]%n"/> </layout> </appender> <!-- 一般ログ出力設定 --> <logger name="clip"> <level value="DEBUG"/> <appender-ref ref="LogFile"/> </logger> </log4j:configuration> JAVAのソースは //ログ4j設定ファイル読み込み DOMConfigurator.configure("c:/log4j.xml"); //ロガーの取得 Logger batchLog = Logger.getLogger(getClass()); //テストログの出力 batchLog.fatal("テスト"); //ログレベルの取得 Level logLevel = batchLog.getLevel(); System.out.println(logLevel);   // 結果:null System.out.println(logLevel.toString()); // NullPointerExceptionでエラー テストログは出力できるのですが、ログレベルの取得で エラーになってしまいます。 log4jの設定ファイルからログレベルを取得するにはどうすれば 良いのでしょうか?

    • ベストアンサー
    • Java
  • log4jのログ出力先について

    log4jを使用してログ出力しています。 log4j.xmlはWEB-INFの下に設定してあります。 現在、ログの出力先がtomcatの直下になっています。 それをWEB-INFの配下辺りに出したいのですがどうしたらいいのでしょうか? なぜtomcatの下でログが出力されるようになっているのでしょうか? すいません、教えてください。

    • ベストアンサー
    • Java
  • Log4Jの基本

    こんにちは。 Log4Jの基本について恐縮ですが、 任意のエラーメッセージを、Log4Jに出力させることは 可能なのでしょうか?。 レイアウトはpropertiesファイルに定義できるようですが・・ よろしくお願いします。

    • ベストアンサー
    • Java