• 締切済み

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

noname#33813の回答

noname#33813
noname#33813
回答No.1

log4j.xmlで設定したことはないのですが、 log4j.propertiesで ・log4j.logger.sub-A=DEBUG,stdout ・log4j.logger.sub-B=DEBUG,stdout としていたら ・Logger loggerA = Logger.getLogger("sub-A") ・Logger loggerB = Logger.getLogger("sub-B") でそれぞれの設定が使われますよ。

関連する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などの形で設定を行うことができれば。。。と考えています。 宜しくお願い致します。

  • 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) どこに原因があるのかわかりませんので、 どなたかわかる方がいらっしゃいましたらご指摘願います。

  • [log4j]ログ出力クラスでのメソッド名出力方法

    お世話になっております。 現在log4jを使用したログの出力を検討しております。 その中で1点質問させてください。 Javaの初心者のため、質問がわかりにくいかもしれません。 申し訳ございません。 【質問】 クラスAのinit処理の中でログ出力用クラスBをインスタンス化し、 クラスAのメソッドCの中で、ログ出力用クラスBのログ出力メソッドDを実行することでログ出力させる方法を考えております。 ここでメソッドDで出力させるログの中にメソッドCの名前を出力させたいのですが、 方法がわかりません。 わかる方、教えていただけないでしょうか。 よろしくお願いいたします。

    • ベストアンサー
    • Java