• ベストアンサー

Log4Jでの日付毎のログについて

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

  • taike
  • お礼率28% (38/134)
  • Java
  • 回答数2
  • ありがとう数0

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

log4jを使用するならAppenderを自作しるしかないですね…。 (当日分の日付をファイル名に付けるだけで自作するのはコスト的に割りに合わないような気もしますが…。) もし自作するなら↓が参考になるのでは… http://www.nurs.or.jp/~sug/soft/log4j/log4j15.htm

参考URL:
http://www.nurs.or.jp/~sug/soft/log4j/log4j15.htm
taike
質問者

補足

自作ですかぁ・・・ log4jを使うのと、java.util.loggingを使うのとではどちらの方が よいのでしょうか?

その他の回答 (1)

回答No.1

>の場合、その日のログは次の日になったときに出力されてしまいます。 ?都度出力されませんか? それとも、「ログファイル名に日付が付くのが翌日になる」ということでしょうか? 例えば、ログファイル名をhoge.log、バックアップ作成タイミングを「日付が変わるとき」とした場合、 hoge.logには都度出力されます。 日付が変わったとき、ログがバックアップされて、hoge.log.2007-11-08になります。 当日分は上記の通り「hoge.log」に出力されます。

参考URL:
http://www.techscore.com/tech/ApacheJakarta/Log4J/3-3.html#log3-6
taike
質問者

補足

>それとも「ログファイル名に日付が付くのが翌日になる」ということでしょうか? そうです。 例えば、1月1日にエディターを使い、変更をした場合に、その変更したときに 「2007.01.01.log」のようにログを出力し、その日のログは、すべてその日の日付の入ったログファイル(この場合は2007.01.01.logに)にアペンドするようにしたいのです。

関連するQ&A

  • Log4Jではログを改行できない?

    お世話になっております。 ログ出力用として Log4J を利用しているのですが、 1つのログメソッドでログ内容を改行することはできないのでしょうか? 以下のコードにおいて、改行コードが半角スペースに変換されてログファイルに出力されてしまいます。 ※コードは省略しています。 import org.apache.log4j.Logger; protected static final Logger logger = Logger.getLogger(X.class.getName(), new Factoty()); logger.info(new StringBuilder() .append("xxxx").append("\r\n") .append("yyyy") .toString()); 【出力結果】 xxxx yyyy テキストエディタで検索をかけても、「xxxx」と「yyyy」の間は「半角スペース」で一致します。 環境は WindowsXP です。 ご存知のかたがいらっしゃればご教示お願いいたします。

    • ベストアンサー
    • Java
  • log4j DailyRollingFileAppenderについて

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

  • 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に関して2点質問があります 1. log4jを利用して日付でローテーションしたいのですが   DailyRollingFileAppender を使用したいのですが最大ファイル数が設定できないため   ログファイルが無限に増えていくようです。検索してみると、自分でAppenderを作成して   いたりする人もいましたが(古いバージョンのlog4jにて)現在のバージョンでも   日付ローテーションで最大ファイル数がしていできるAppenderは用意されていないの   でしょうか。 2.機能ごとに出力するファイルを変えたいと思い log4j.properties に   以下設定を書いてみました(Aだけならちゃんと動くことは確認できましたが   設定Aと設定Bを共存させるとうまくうごかない)。   そもそもなんですがプロパティファイルにAとBの設定を書いて   Javaのクラス側では設定Aでログを出力するかBを出力するかはどうやって   決めればよろしいでしょうか。また、設定Aと設定Bを使い分けるためにはプロパティファイルの   記述はどう書けばよろしいでしょうか。    log4j.rootCategory=INFO,A,B ##設定A log4j.appender.A=org.apache.log4j.RollingFileAppender log4j.appender.A.File=/log/TestLog.log log4j.appender.A.MaxFileSize=200MB log4j.appender.A.MaxBackupIndex=10 log4j.appender.A.Append=true log4j.appender.A.layout=org.apache.log4j.PatternLayout log4j.appender.A.layout.ConversionPattern=%d %5p %c{1} - %m%n ##設定B log4j.appender.B=org.apache.log4j.RollingFileAppender log4j.appender.B.File=/log/TestLog2.log log4j.appender.B.MaxFileSize=200MB log4j.appender.B.MaxBackupIndex=10 log4j.appender.B.Append=true log4j.appender.B.layout=org.apache.log4j.PatternLayout log4j.appender.B.layout.ConversionPattern=%d %5p %c{1} - %m%n

    • ベストアンサー
    • 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の使用方法について

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

  • Accessテキスト日付変換

    NASのアクセスログを管理するDBを作成しておりますが、日付が下記形式となってます、日付型・日時型に簡単に変換する方法はありますでしょうか? ログ日付項目 Jan 15 16:50:03 一連の処理 1、NASのログファイルを、秀丸エディタで、CSV出力できるようマクロで整形保存 2、Accessでログ整形CSVファイルを、インポート ただし、ログの日付が、上記のテキストで吐き出されており、Access上で日付・時間として取扱いできません。 エクセルで、ログ整形csvを読み込むと自動で日付型として認識しますが、残念ながらAccessでは、日付型として認識してくれません。 簡単に変換できる方法があればご教授ください。

  • 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
  • ログ出力方法

    つい先日からjavascriptの勉強を始めた初心者です。 javascriptのデバッグを行いたく、都度の変数の内容を確認できるよう コード内の任意の場所でログファイルを出力する 標準ライブラリを作成したいのですが、 javascriptでテキスト操作のようなものはできますでしょうか。 瞬間瞬間の動きを確認したいのですが、alert()メソッドの使用が出来ない環境です。 ログ出力でなくても、確認をとれる方法であれば構いません。 解りづらい部分ありましたら補足しますので、 どうぞよろしくお願いいたします。

  • Log4jで機能毎に別ファイルへ出力する方法

    こんにちは。 Log4jで複数のログファイルを出力する方法について質問させてください。 やりたい事としては・・・ WebアプリケーションからLog4jを使用して、ログ出力する際に サブアプリAからはsub-A.log サブアプリBからはsub-B.log などとログファイルを出力させたいと思っています。 Log4j.xmlでappenderタグを複数定義すれば良いだけかも知れませんが Java側でどうやって別のログオブジェクトを生成するのかが分かりません。 どの様にして別のオブジェクトの取得が出来るのでしょうか? それとも見当違いのことを質問していますでしょうか? よろしくご教授ください。 これが実現できれば… SQLだけのログ(DBバックアップ用) 例外だけのログ(監視用) などの用途に使えるのかと思っています。 よろしくお願いします。