- 締切済み
Log4jで機能毎に別ファイルへ出力する方法
こんにちは。 Log4jで複数のログファイルを出力する方法について質問させてください。 やりたい事としては・・・ WebアプリケーションからLog4jを使用して、ログ出力する際に サブアプリAからはsub-A.log サブアプリBからはsub-B.log などとログファイルを出力させたいと思っています。 Log4j.xmlでappenderタグを複数定義すれば良いだけかも知れませんが Java側でどうやって別のログオブジェクトを生成するのかが分かりません。 どの様にして別のオブジェクトの取得が出来るのでしょうか? それとも見当違いのことを質問していますでしょうか? よろしくご教授ください。 これが実現できれば… SQLだけのログ(DBバックアップ用) 例外だけのログ(監視用) などの用途に使えるのかと思っています。 よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- run34ricky
- ベストアンサー率64% (38/59)
関連する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でログファイルに出力されないです。 ただ、まったく出力されないわけではなく、特定のWebアプリから出力されていないようです。 複数のWebアプリケーションから、同じログファイルapp.logに書き込むようlog4j.propertiesに設定しています。 もしかして、これがよくないのでしょうか。 ひとつのWebアプリケーションがログファイルを確保したら、ほかのWebアプリケーションはもう書き込みができないのでしょうか? どうか、よろしくお願いいたします。
- ベストアンサー
- Java
- java log4jの環境設定
調べてみたのですが、参考になるページが見当たらなかったので(私が理解できなかっただけかもしれませんが。。) ご質問させていただきます。 表題の件です。javaのサーブレットを用いてログ出力する為にlog4jを使用しています。 そのため、log4j.xmlにファイルの出力先やらなんやらを記述しています。(これが通常だと思います) tomcatのWEBアプリケーションパッケージですので、DB接続等の設定は「META-INF/context.xml」に記述(Javaアプリ側で名前解決してDatasourceとして取得)しています。 上記からDB接続情報、ログの出力先情報はそれぞれ別ファイル(XML)から取得していますが、環境依存する値なので、編集するならひとつのファイルから行いたいです。 できれば、log4jのファイル出力先情報等をcontext.xmlにて記述して解決したいです。 (理由:tomcat6/servlet2.5を使用しており、tomcat6のdbcpを使用してコネクションプーリングしている為、DB接続の方法は変更したくない為) 以上、ご存知の方ご教授お願いできますでしょうか。
- ベストアンサー
- 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のログ出力先について
log4jを使用してログ出力しています。 log4j.xmlはWEB-INFの下に設定してあります。 現在、ログの出力先がtomcatの直下になっています。 それをWEB-INFの配下辺りに出したいのですがどうしたらいいのでしょうか? なぜtomcatの下でログが出力されるようになっているのでしょうか? すいません、教えてください。
- ベストアンサー
- Java
- Log4jでログ生成時の日時付きファイル名
Javaプログラムの実行履歴をLog4jに記録させたいのですが、 このプログラムは常に動いているものではなく、月に2回バッチで動かすのと、 DBからデータが必要になった時に手動で実行(同じく月2回程度)するものです。 プログラムを実行したタイミングでログファイルを新たに生成して、且つ ファイル名のプレフィックス(orポストフィックス)にログファイル生成時の日時を付加したいのですが、 log4j.xmlにはどのように記述すれば良いでしょうか?? (別途Javaファイルが必要であればそれも。) また、上記の事を説明しているサイトのURLなどあれば教えてください。
- ベストアンサー
- Java
- log4jでのエラーコード
log4jを使用してWEBシステムを開発しています。 log4jで出力するエラーメッセージを、設定ファイルに記述しておくことはできるのでしょうか。 複数のモジュールから出力されるエラーメッセージを統一するために、 xmlなどの形で設定を行うことができれば。。。と考えています。 宜しくお願い致します。
- 締切済み
- Java
- log4j.xmlファイルの読込で。。。
log4Jの設定ファイルの読込を DOMConfigurator.configure("log4j.xml"); とJavaで記述していますが以下のエラーが表示されます。 log4j:ERROR Could not parse file [log4j.xml]. java.io.FileNotFoundException: C:\WINDOWS\System32\log4j.xml (指定されたファイルが見つかりません。) at java.io.FileInputStream.open(Native Method) at java.io.FileInputStream.<init>(Unknown Source) at java.io.FileInputStream.<init>(Unknown Source) at sun.net.www.protocol.file.FileURLConnection.connect(Unknown Source) at sun.net.www.protocol.file.FileURLConnection.getInputStream(Unknown Source) at org.apache.xerces.impl.XMLEntityManager.setupCurrentEntity(Unknown Source) at org.apache.xerces.impl.XMLVersionDetector.determineDocVersion(Unknown Source) atorg.apache.xerces.parsers.XML11Configuration.parse(Unknown Source) at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source) at org.apache.xerces.parsers.XMLParser.parse(Unknown Source) at org.apache.xerces.parsers.DOMParser.parse(Unknown Source) at org.apache.xerces.jaxp.DocumentBuilderImpl.parse(Unknown Source) at javax.xml.parsers.DocumentBuilder.parse(Unknown Source) at org.apache.log4j.xml.DOMConfigurator$1.parse(DOMConfigurator.java:598) at org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.java:711) at org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.java:604) at org.apache.log4j.xml.DOMConfigurator.configure(DOMConfigurator.java:733) at HttpTestServlet.doPost(HttpTestServlet.java:31) どこに原因があるのかわかりませんので、 どなたかわかる方がいらっしゃいましたらご指摘願います。
- 締切済み
- Java
- [log4j]ログ出力クラスでのメソッド名出力方法
お世話になっております。 現在log4jを使用したログの出力を検討しております。 その中で1点質問させてください。 Javaの初心者のため、質問がわかりにくいかもしれません。 申し訳ございません。 【質問】 クラスAのinit処理の中でログ出力用クラスBをインスタンス化し、 クラスAのメソッドCの中で、ログ出力用クラスBのログ出力メソッドDを実行することでログ出力させる方法を考えております。 ここでメソッドDで出力させるログの中にメソッドCの名前を出力させたいのですが、 方法がわかりません。 わかる方、教えていただけないでしょうか。 よろしくお願いいたします。
- ベストアンサー
- Java