java log4jの環境設定

このQ&Aのポイント
  • Javaアプリケーションでログ出力するためには、log4jを使用します。
  • ログの出力先やDB接続情報は環境依存する値ですが、log4j.xmlとcontext.xmlを使って設定する方法があります。
  • tomcat6/servlet2.5を使用している場合は、context.xmlにlog4jのファイル出力先情報を記述することで解決できます。
回答を見る
  • ベストアンサー

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
  • 回答数1
  • ありがとう数1

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

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

久しぶりにtomcatのドキュメントをさらっと眺めただけなのですが、 以下のようにするとできそうな気がします。 全く試してもいないので誤っていたら申し訳ないです。。。 1. 環境依存の情報はcontext.xmlのParameter要素で定義。 2. サーブレット起動時にServletContext.getInitParameter()で取得。 3. PropertyConfiguratorなどを使ってlog4jの設定をプログラムで行う。

bizshim
質問者

お礼

ありがとうございます。脳内で設計が2転3転し、あまりまとまらなかったのですが、以下の方法にしました。 DBやlog、アプリケーションの情報をすべてxxxx.propertiesに設定し、取得する(シングルトンで)そこからtomcatのdbcpを使ってDB接続・log4jを継承して、logの出力先を変更。。。でできました。ご協力ありがとうございます。

関連するQ&A

  • log4jのログ出力先について

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

    • ベストアンサー
    • Java
  • TOMCATでのログ出力

    「path="/ABC"」と「path="/XYZ"」でアクセスされた際に、log4Jのファイルとして 別ファイルに出力したいです。(DailyRollingAppenderを利用) TOMCATで、同一のアプリ/同一のlog4Jの設定ファイルを 以下の様にデプロイします。Server.xmlの記述は以下の様な形です。 -------------------- Server.xmlの記述 -------------------- <Context docBase="(アプリケーション)" path="/ABC" reloadable="true" debug="0" crossContext="true"> : </Context> <Context docBase="(アプリケーション)" path="/XYZ" reloadable="true" debug="0" crossContext="true"> : </Context> log4Jの設定で、これらを出しわける事はできないでしょうか? #TOMCAT起動時に、アプリ側で「ContextPath」を取得して、log4J #のファイル名を変更する方式で実現はできそうなのすが、あまりスマートな #方式とは思えませんので。

  • 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システムを開発しています。 log4jで出力するエラーメッセージを、設定ファイルに記述しておくことはできるのでしょうか。 複数のモジュールから出力されるエラーメッセージを統一するために、 xmlなどの形で設定を行うことができれば。。。と考えています。 宜しくお願い致します。

  • tomcatのログについて

    tomcatのアクセスログを出力したい場合、 コンテキストパスに設定するときは以下のように設定しますが、 コンテキストパスに以下の設定を行わなわずにserver.xmlにtomcat全体の設定として、 ログを出力する設定とした場合、コンテキストパスへのアクセスはログに出力されないんでしょうか? <Context path="/javaroad" docBase="/javaroad" debug="0"> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs/AccessLog" /> </Context> ご存知の方教えてください。

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

  • log4jの使用方法について

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

  • log4j DailyRollingFileAppenderについて

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

  • Log4jでログ生成時の日時付きファイル名

    Javaプログラムの実行履歴をLog4jに記録させたいのですが、 このプログラムは常に動いているものではなく、月に2回バッチで動かすのと、 DBからデータが必要になった時に手動で実行(同じく月2回程度)するものです。 プログラムを実行したタイミングでログファイルを新たに生成して、且つ ファイル名のプレフィックス(orポストフィックス)にログファイル生成時の日時を付加したいのですが、 log4j.xmlにはどのように記述すれば良いでしょうか?? (別途Javaファイルが必要であればそれも。) また、上記の事を説明しているサイトのURLなどあれば教えてください。

    • ベストアンサー
    • Java

専門家に質問してみよう