アプリケーションで使用する Log4j ロガーに簡単なメソッドをいくつか追加したいと考えていました。
このようにしてみました:
public class Logger extends org.apache.log4j.Logger
{
public Logger(Class type)
{
super(type.getName());
}
public void info(String format, Object... o)
{
info(String.format(format, o));
}
public void debug(String format, Object... o)
{
debug(String.format(format, o));
}
public void warn(String format, Object... o)
{
warn(String.format(format, o));
}
public void error(String format, Object... o)
{
error(String.format(format, o));
}
}
私はこれを次のように使用できるはずだと考えました:
public class TmpTest
{
public static void main(String[] args) throws Exception
{
// Note I'm not even using the special methods here
new Logger(TmpTest.class).warn("Test");
}
}
しかし、私はNullPointerException
.
Exception in thread "main" java.lang.NullPointerException
at org.apache.log4j.Category.warn(Category.java:1004)
at no.nwn.productconfigurator.TmpTest.main(TmpTest.java:16)
このままじゃいけないの?クラスのgetLogger
ファクトリ メソッドを使用した場合にのみ行われる初期化の欠落はありますか?Logger
Logger クラスを拡張できない場合、どうすればよいですか?
log4j.xml に関するものでしょうか? これを自分で使用したことはなく、自分で書いたこともありません。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd" >
<log4j:configuration debug="true">
<appender name="stdout" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{ABSOLUTE} %5p %c{1}:%L - %m%n"/>
</layout>
</appender>
<appender name="ProductConfigurator" class="org.apache.log4j.DailyRollingFileAppender">
<!--
<param name="File" value="logs/ProductConfigurator.log" />
-->
<param name="File" value="/var/tomcat/logs/ProductConfigurator.log" />
<param name="Append" value="true" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{yyyy-MMM-dd HH:mm:ss,SSS}. %5p %c{1}:%L - %m%n"/>
</layout>
</appender>
<logger name="org.hibernate" additivity="false">
<level value="warn" />
<appender-ref ref="ProductConfigurator"/>
</logger>
<logger name="org.hibernate.type" additivity="false">
<level value="warn" />
<appender-ref ref="ProductConfigurator"/>
</logger>
<logger name="org.hibernate.SQL" additivity="false">
<level value="warn" />
<appender-ref ref="ProductConfigurator"/>
</logger>
<root>
<!-- all|trace|debug|info|warn|error|fatal|no -->
<priority value="info" />
<appender-ref ref="ProductConfigurator"/>
</root>
</log4j:configuration>