- 締切済み
log4j DailyRollingFileAppenderについて
いつもお世話になっています。 現在、log4jを使用してログをファイルに出力しています。 DailyRollingFileAppenderを使用し、日にち毎にリネームしています。 しかし、DailyRollingFileAppenderだとNullPointerExceptionなど想定していないExceptionが出力されません。 行いたいことは、 「ログファイルを日毎にリネームして想定していないExceptionも出力する」ということです。 log4jをいろいろ調べてみて、DailyRollingFileAppenderでExceptionを出力するには、catchしてログを出力するような設定をしなければ出力できないのでは?と思っています。 変わって、ConsoleAppenderでは想定していないExceptionも出力されます。 これは、コンソール出力のためだと思っています。 (検討違いでしたら、教えてください<(_ _)>) ここで質問なのですが、 1.DailyRollingFileAppenderで想定していないExceptionを出力することはできるのでしょうか? 2.1が不可能な場合、ConsoleAppenderをファイルに出力し、日毎にリネームすることができるのでしょうか? ご存知の方がいらしたら、ぜひ教えてください! 早急に直したいのですが、まったく前に進みません。私の力不足なんですが・・・ よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
関連する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のログ出力機能を使用した際にはクローズ処理は必要なのでしょうか? 以上、よろしくお願いします。
- 締切済み
- Java
- 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
お礼
出力形式は設定したスタイルになっていました。 どうしてもわかりませんでしたので、 atコマンドでリネームするようにしました。 お礼が遅れてすみませんでした。 ありがとうございました。