• 締切済み

log4jに関する基本的な事柄(Logger・Categoryの違い、設定ファイルの再読込みなど)

log4jに関しておさらいをしていてはっきりと把握していないことがいくつかあります。 (1)設定のLoggerとCategoryの違い(同じもの?) (2)設定ファイルの再読込みタイミング  (Tomcatを再起動しなくてもよかった気がするが再読込みタイミングがわからない) (3)以下の記述は結果はまったく同じ?   Log log = log = LogFactory.getLog(getClass());   Log log = log = LogFactory.getLog(getClass().getName()); しっかりと勉強していればすぐにわかるレベルのことだと思いますが ネットでなんとなく独学で勉強していたので穴だらけです… 少し恥ずかしいのですが、上記の疑問について解説お願いします。 よろしくお願いします。

  • Java
  • 回答数3
  • ありがとう数4

みんなの回答

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

loggerは使われないわよ。 今メインのlog4j1.2系では。 1.3以降はまず使われないわ。 理由はlog4jのサイトで見てね。 http://logging.apache.org/log4j/index.html

mibusys
質問者

お礼

ありがとうございました。

mibusys
質問者

補足

ここでの質問では結局わからなかったのでできる人に聞いたら 同じものだという回答を得ました。

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

> もし違うのであれば何がどう違うのか具体的に教えてください 調べればすぐわかるのに・・・。 log4j1.3より前は<category>を使え。 log4j1.3以降は<logger>を使え。 <category>は廃止されるわ。 これでいいかしら? log4jのバージョンによって使い分けるの。 > アプリケーション再起動 サーバは設定ファイルが変更されたときに それを自動的に再読込み「することがあるわ」。 チェックしているのは更新日付のようね。 ただし、このときすごくサーバが「不安定」になるの。 再起動せずに反映されてもそれはサーバ管理者としては ちょっといただけない現象よ。 具体的に言うと、log4jが利用されているときに再読込みが行われると ログ出力がどうなるのか予想もつかないわ。 あと何故か判らないけど、ときどき再読込みがされないことがあるわ。 タイミング的なものなのか、不明だけど。 これはxmlに限らずJSPのときにも発生するわね。 もしかしたらTomcatの不具合なのかもしれないわ。 一番確実なのは、変更を監視して再読込みさせる仕組みを用意することね。

mibusys
質問者

お礼

ありがとうございました。

mibusys
質問者

補足

1の回答 ・使える属性や要素が異なる ・loggerはまず使われない 2の回答 ・バージョンによって使い分ける 「loggerはまず使われない」は間違いということですか? 「使える属性や要素が異なる」も間違いですか? 表記するときの文字列が異なるだけで、機能や出力結果はまったく一緒だということなのでしょうか?

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

設定ってlog.xmlのことよね? (1)似て非なるものよ。  使える属性や要素が異なるわ。  そもそもとして<logger>は、まず使われないわね。  マニュアルからはずされる程度には。 (2)アプリケーション単位ならアプリケーションの再起動だけでOKよ。 (3)log4jでいうなら同じよ。

mibusys
質問者

お礼

ありがとうございました。

mibusys
質問者

補足

>似て非なるものよ。 >使える属性や要素が異なるわ。 もし違うのであれば何がどう違うのか具体的に教えてください。 どう使い分けるのか、機能は違うのか、得られる結果が変わるのかなど。 >アプリケーションの再起動だけでOKよ。 そういう意味ではそうだと思いますが、そうではなくて アプリケーションを起動しっぱなしでの設定ファイルの再読み込みです。 いくつかのプロジェクトで再起動無しで再読み込みをしてくれた記憶があります。 勝手にやってはくれないんですかね?特別な仕組みが必要なのでしょうか? よろしくお願いします。

関連するQ&A

  • 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
  • logback

    ServletでPGをしています。 そこでログを出力させようと思っていますが、うまくいきません。 【環境】 ・Windows Vista ・JavaServlet、JSP、WTP、Tomcat6.0、Java1.6 使用するロガーはLog4jにしようと思ったのですが、思い切ってlogbackを使いました。 slf4j-1.5.3、logback-0.9.9はサイトから取得解凍したものをそのままeclipseの[ビルドパス]のライブラリに外部JARの追加として入れています。 【ソース】 import org.slf4j.Logger; import org.slf4j.LoggerFactory; Logger log = LoggerFactory.getLogger(this.getClass()); ← ここでエラー!! log.debug("class - start"); 【エラーログ】 java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory LoggerFactoryが見つからないんでしょうか・・・。 一応参照ライブラリでclassは確認できています。 いろいろ調べたり試してはみたのですが、どうもうまくいきません。 どうかよろしくお願いします。

    • ベストアンサー
    • Java
  • ログについて

    プログラムを書いたのですが、ログをファイルで出力させたいと思いました。 (1)Loggerというクラスがあるのはわかったのですが、記述の仕方がよくわかりません。例えば、ソケット通信時にどのようなデータがどこに送られているかをログに取りたい場合はどこにどのように記述すればよいのでしょうか。 FileHandler handler = new FileHandler("/tmp/java.log"); Logger logger = Logger.getLogger("Sample"); handler.setFormatter(new SimpleFormatter()); logger.addHandler(handler); logger.setLevel(Level.ALL); try { ... DatagramSocket soc = new DatagramSocket(10000); DatagramPacket sendPacket = new DatagramPacket(sendBuffer, sendBuffer.length, remoteHost, destPort); soc.send(sendPacket); ... (2)アホな質問で恐縮ですが、ログというのは出力したい箇所に一つ一つ書いていかなければならないものなのでしょうか?そうするとプログラムが2倍近くの長さになりそうなのですが。。一旦書き上げたプログラムにちょろっと設定を足すだけで、メソッドを実行した箇所などを一括してログに取るようなことは出来ないのでしょうか?

    • ベストアンサー
    • Java
  • 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
  • Apache2+Tomcatで443のみアクセスできません

    Apache2+Tomcat4.1.30で、javaの業務用アプリを動かしています。 443アクセスにしたいのですが httpd.confに記述をせず、ssl.confのみに記述をしても 80でアクセスできてしまいます。 server.xmlのHost nameに記述があることで アクセスが出来てしまっている気がするのですが どうにかして443アクセスのみにすることは出来ませんでしょうか? 下記のように記述してあります。 (ドメインはexample.comに変更してあります) ssl.conf <VirtualHost xxx.xxx.xxx.xxx:443> ServerAdmin webmaster@example.com ServerName www.example.com DocumentRoot /usr/local/example ErrorLog /var/log/httpd/www.example.com-error_log CustomLog /var/log/httpd/www.example.com-access_log common CustomLog /var/log/httpd/www.example.com-referer_log referer CustomLog /var/log/httpd/www.example.com-agent_log agent </VirtualHost> server.xml <Host name="www.example.com" debug="0" appBase="/usr/local/" unpackWARs="true" autoDeploy="true"> <Logger className="org.apache.catalina.logger.FileLogger" directory="logs" prefix="example_log." suffix=".txt" timestamp="true"/> <Context path="" docBase="example" debug="0" reloadable="true" trusted="false" crossContext="false"> <Logger className="org.apache.catalina.logger.FileLogger" prefix="example.com_log." suffix=".txt" timestamp="true"/> </Context> </Host>

  • Eclipse上でのTOMCATのエラー

    Java超初心者です。 Eclipseで TOMCATを使えるようにするため、 TOMCATプラグインツールをダウンロードし、TOMCATを起動してみたのですが、 log4j:WARN No appenders could be found for logger (org.apache.commons.digester.Digester). log4j:WARN Please initialize the log4j system properly. というエラーが出ます。 TOMCATを起動しますというメッセージは出て、起動しているとは思うのですが、 その後の日付表示などが全く出ないので、何か問題があるように思います。 log4jのインストールもしていますが、それが何か影響をあたえているのかがわかりません。 いろいろ調べてみてクラスパスの設定がよくないのかも?とも思うのですが、 そもそも環境変数とクラスパスの違いがよくわからないので、手のつけようがありません>< 関連する(と思われる)環境変数は以下の通りです。 CLASSPATH : C:\jakarta-log4j-1.2.8\dist\lib\log4j-1.2.8.jar LOG4J_HOME : C:\jakarta-log4j-1.2.8 JAVA_HOME : c:j2sdk1.4.2_07; わかりづらい質問だと思いますが、どうか宜しくお願い致します。

    • ベストアンサー
    • Java
  • Log4Jの基本

    こんにちは。 Log4Jの基本について恐縮ですが、 任意のエラーメッセージを、Log4Jに出力させることは 可能なのでしょうか?。 レイアウトはpropertiesファイルに定義できるようですが・・ よろしくお願いします。

    • ベストアンサー
    • Java
  • 外部jarへのパスの通し方

    はじめまして。パスの通し方について教えてください。 javaを勉強しようと、 j2sdk1.4.1_04 jakarta-log4j-1.2.8 tomcat_5.0.16 eclipse2.1.1 をダウンロードして、環境を設定しようとしているところです。 しかし、外部jar(log4j、tomcat)を使用したSRCをコンパイルしようとしても、javax.servlet.httpが見つかりません等のエラーが出てしまいます。 eclipseでは、外部jarを取り込んでいるので、コンパイルが通って動作確認(log4jのみ)は済んでいます。 ただし、コマンドプロンプトからのコンパイルでは上記のようなエラーが出てしまいます。 PATHは JAVA_HOME: C:\j2sdk1.4.1_04 TOMCAT_HOME: C:\Program Files\Apache Software Foundation\Tomcat 5.0 LOG4J_HOME: C:\jakarta-log4j-1.2.8 CLASS_PATH .;%LOG4J_HOME%\dist\lib\log4j-1.2.8.jar;%TOMCAT_HOME%\common\lib\ant.jar;%TOMCAT_HOME%\common\lib\commons-collections.jar・・・ (C:\Program Files\Apache Software Foundation\Tomcat 5.0\common\lib\配下全てのjar) に設定してあります。(インストールは全てデフォルト、解凍するものはC直下に解凍してあります。eclipseも同様のものを外部jarとして取り込んであります。) 何か、根本的に間違っているのでしょうか? よろしくお願いします。 ★最終的には、MY_SQLを使用しservletからDBアクセスという環境を設定したいと思っています。 長文失礼しました。

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

  • ロシア語の書籍・講座等で文法解説のしっかりしたものを教えてください(入門レベル)

    文法解説のしっかりした、ロシア語初心者向けの書籍やラジオ講座など、基礎からしっかり学びたい人間にお勧めなものをお教えください。 独学で「今すぐ話せるロシア語 入門編」で勉強しており、半分くらいまで行きましたが、この本は文法解説がほとんどないため、わからない部分が多々出て参りました。 そろそろ文法を把握する段階なのかと考えておりますので、何卒よろしくお願い致します。

専門家に質問してみよう