• ベストアンサー

log4jでログファイルに出力されないです。

log4jでログファイルに出力されないです。 ただ、まったく出力されないわけではなく、特定のWebアプリから出力されていないようです。 複数のWebアプリケーションから、同じログファイルapp.logに書き込むようlog4j.propertiesに設定しています。 もしかして、これがよくないのでしょうか。 ひとつのWebアプリケーションがログファイルを確保したら、ほかのWebアプリケーションはもう書き込みができないのでしょうか? どうか、よろしくお願いいたします。

  • Java
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.1

ダメよ。 同じファイルに直接出力はしちゃいけないわ。 どうしても同じファイルに出力したい場合は 専用のVMを立てるのね。 ソケット経由でログを出力するAppenderを使うのよ。

kotoby2003
質問者

お礼

毎度ありがとうございます。 そうですよね。 複数のプロセスから同じファイルをオープンできるわけないんですよね。 素直に別ファイルに書き込むことにします。 だいたい、複数の環境(同じWebアプリを複数、本番とか自分たち用とかお客さんテスト用)を、同じサーバに配置しようというのが間違ってる・・・。なんのためのVMWareなんだか。→そうすれば、アプリ的にはログ設定もDB設定もまったく同じにできて便利なのに・・・というか、そのための仮想化だろうに・・・。 と愚痴になっていまいました。

関連するQ&A

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

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

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

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

    • ベストアンサー
    • 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に出力させることは 可能なのでしょうか?。 レイアウトはpropertiesファイルに定義できるようですが・・ よろしくお願いします。

    • ベストアンサー
    • Java
  • log4jでのエラーコード

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

  • 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
  • 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 #のファイル名を変更する方式で実現はできそうなのすが、あまりスマートな #方式とは思えませんので。

  • 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
  • C# コンソールアプリでのログ出力

    設定ファイルからログの出力先を読み、そこにその(設定ファイルを読んでいる)アプリケーションのログを出力させたいのですが、以下の問題点があります。 1.複数のクラスがあるため、普通にログ出力用のクラスを作ると、各クラスでインスタンスを作成せねばならない。 2.上記の場合、出力先は設定ファイルによって後から与えられるので、引数などによってファイルパスをもらわなければならない。 3.ログファイル名は「yyyyMMddHHmmss.log」となっているため検索が困難であるから、(1.の方法だと)ファイル名も渡してやる必要がある。 4.ERRORやFATALのみならアプリが終了してもかまわないのでthrowを使ってcatchでログを一括、ということもできるが、TRACEやDEBUGも出力させる必要がある。 Console.Writeのような感じで扱えるのが理想です。 何かよい方法はないものでしょうか? 普通にログ用のクラスを宣言して、他のクラスでログを出力したいなら、ログ出力クラスのインスタンスをコンストラクタに与える引数とするしかないでしょうか?

  • propertiesファイルのlocationを探す方法

    プルグラムからどこにあるpropertiesファイルを読み込んでいるか探す方法をご存知の方はいらっしゃらないでしょうか? 私の場合は、log4j.properties,log4j.xmlが複数クラスパスに通っておりどのpropertyを使用しているか調べたいと思っております。(確かプログラムから特定できたような気がします)

    • ベストアンサー
    • Java

専門家に質問してみよう