Glassfishを使用しており、次のプロパティを持つlog4jというJNDIカスタムリソースを作成しました。
Name: log4j.appender.LOG Value: org.apache.log4j.RollingFileAppender
Name: log4j.appender.LOG.layout Value: org.apache.log4j.PatternLayout
Name: log4j.rootLogger Value: WARN, LOG
Name: log4j.appender.LOG.layout.conversionPattern Value: %d{MMM dd, yyyy HH:mm:ss} %p %m%n
Name: log4j.appender.LOG.File Value: ${com.sun.aas.instanceRoot}/logs/RestWebServices.log
Name: log4j.appender.LOG.MaxFileSize Value: 10MB
Name: log4j.appender.LOG.MaxBackupIndex Value: 10
JNDIリソースタイプはjava.util.Propertiesであり、私のSpringアプリケーションコンテキストには、それらを見つけるための次の行が含まれています。
<jee:jndi-lookup id="log4jJndi" jndi-name="log4j" resource-ref="true" />
<jee:jndi-lookup id="configurationsJndi" jndi-name="configurations" resource-ref="true" />
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="propertiesArray">
<list>
<ref bean="configurationsJndi"/>
<ref bean="log4jJndi"/>
</list>
</property>
</bean>
構成JNDIリソースでは正常に機能しますが、log4jでGlassfishを起動すると次のエラーが発生します。
SEVERE: log4j:WARN No appenders could be found for logger (org.springframework.web.context.ContextLoader).
SEVERE: log4j:WARN Please initialize the log4j system properly.
SEVERE: log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
ルートロガーをデバッグするとき、私がJNDIリソースに設定したものではありませんでした。これを解決するためにSpringLog4jConfigListenerを追加しようとしましたが、機能しませんでした。私が使用しているGlassfishのバージョンは3.1です。
log4jが問題になる理由を誰かが知っていますか?
編集:ここで、log4jプロパティファイルのファイルの場所を持つJNDIを使用しようとしていますが、SpringアプリケーションコンテキストはJNDIから値を取得します。私の問題は、log4jで常にこのエラーが発生し続けることです。
Exception while loading the app : java.lang.IllegalStateException:
ContainerBase.addChild: start: org.apache.catalina.LifecycleException:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'log4jJndi': Invocation of init method failed;
nested exception is javax.naming.CommunicationException: Communication exception for SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming} [Root exception is java.lang.IllegalAccessException: value cannot be null]|#]