0

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]|#]
4

1 に答える 1

0

次のことを試して、それが役立つかどうかを確認してください。

1- log4j.propertiesというファイルを作成し、/ src / main/resourcesに配置します

2-そのファイルの次の行をコピーします。

# #Default log level
log4j.rootCategory=INFO, console

log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%-5p %d [%t] %c: %m%n

################################################
# #You can set custom log levels per-package here
################################################

# #Apache Commons tend to make a lot of noise which can clutter the log.
log4j.logger.org.apache=WARN

# #Shuts up some innocuous messages if using the JBPM transport
log4j.logger.org.hibernate.engine.StatefulPersistenceContext.ProxyWarnLog=ERROR

# #Reduce startup noise
log4j.logger.org.springframework.beans.factory=WARN

# #Your custom classes if you have one
log4j.logger.com.mycompany=DEBUG
于 2012-12-19T14:33:34.367 に答える