* log4j [#k22a0d1b] log4jを使ってみたメモ。 #contents ** Log4j の出力先をコードで変更する [#j167a69c] 例えば、"hoge" というディレクトリに出力する場合、System.property に設定。 #code(Java){{ System.setProperty("log.dir", "/hoge/"); }} で、log.dir を log4j.xml から参照する。 ''log4j.xml'' #code(HTML){{ <!-- アペンダ --> <appender name="record" class="org.apache.log4j.DailyRollingFileAppender"> <param name="File" value="${log.dir}/app.log" /> <param name="Append" value="true" /> <param name="DatePattern" value="'.'yyyy-MM-dd" /> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss},%m%n" /> </layout> </appender> }} この設定を反映させる。 #code(Java){{ DOMConfigurator.configure("log4j.xml"); }} 渡すパスはアプリケーションのルートディレクトリの下という前提。&br; このパスはクラスローダを使えば取得できるので、 ClassLoader loader = Thread.currentThread().getContextClassLoader() #code(Java){{ ClassLoader loader = Thread.currentThread().getContextClassLoader(); DOMConfigurator.configure(loader.getResource("log4j.xml")); }} とするか、Servlet なら ServletContext context = getServletContext() #code(Java){{ ServletContext context = getServletContext(); DOMConfigurator.configure(context.getRealPath("WEB-INF/classes/log4j.xml")); }} などとする。 ** Tomcat 5.5 でログ出力エラー [#zad25710] ファイルの読み書きをするときに、パーミッションが不正というエラーが出ることがある。 例えば、ログファイルの書き込みで、 log4j:ERROR setFile(null,true) call failed. java.io.FileNotFoundException: /hoge/app.log (Permission denied) at java.io.FileOutputStream.openAppend(Ljava.lang.String;)V(Native Method) at java.io.FileOutputStream.<init>(FileOutputStream.java:177) at java.io.FileOutputStream.<init>(FileOutputStream.java:102) ... とか。 ディレクトリのパーミッションを777とかに変更してもやはり状況変わらず。 そんなときは、Tomcatのセキュリティをはずしてみると上手くいくことがある。 /etc/init.d/tomcat5 を次のように変更。 # Use the Java security manager? (yes/no) #TOMCAT5_SECURITY=yes ←コメントアウト TOMCAT5_SECURITY=no ** 参考 [#o66181a5] - [[Apache Logging Service Project:http://logging.apache.org/log4j/]] - [[Log4j project(日本語):http://www.ingrid.org/jajakarta/log4j/jakarta-log4j-1.1.3/docs-ja/documentation.html]] - [[Log4J徹底解説:http://www.nurs.or.jp/~sug/soft/log4j/index.htm]] ----- [[Java 開発環境構築]]