Results 1 to 6 of 6

Thread: Configuring log4j

  1. #1
    Join Date
    Mar 2007
    Posts
    566

    Default Configuring log4j

    Hi,

    I need a log4j configuration which detects changes in the log4j.properties.

    Spring (2.5.5) has Log4jWebConfigurer and Log4jConfigurer.

    Who calls these components?

    I tried Log4jWebConfigurer:

    Code:
    		<context-param>
    			<param-name>log4jConfigLocation</param-name>
    			<param-value>classpath:log4j.properties</param-value>
    		</context-param>	
    		<context-param>
    			<param-name>log4jRefreshInterval</param-name>
    			<param-value>60000</param-value>
    		</context-param>
    But it seems that no one calls it. Do I have to call it myself? Should the WebAppContext do it for me?

    And I tried Log4jConfigurer like this:
    Code:
     	<bean id="log4jConfigurer"
     		class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
     		<property name="targetClass">
     			<value>org.springframework.util.Log4jConfigurer</value>
     		</property>
     		<property name="staticMethod">
     			<value>initLogging</value>
     		</property>
     		<property name="arguments">
     			<list>
     				<value>classpath:log4j.properties</value>
     				<value>10000</value>
     			</list>
     		</property>
     	</bean>
    Here I get the following exception:

    Code:
    org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'log4jConfigurer' defined in class path resource [applicationContext.xml]: Unsatisfied dependency expressed through bean property 'targetObject': : No bean named '&log4jConfigurer' is defined; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named '&log4jConfigurer' is defined
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireByType(AbstractAutowireCapableBeanFactory.java:1091)
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:982)
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:472)
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)
    	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264)
    	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:221)
    	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261)
    	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
    	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
    	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:423)
    	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:729)
    	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:381)
    	at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:255)
    	at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:199)
    	at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:45)
    	at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3827)
    	at org.apache.catalina.core.StandardContext.start(StandardContext.java:4334)
    	at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
    	at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
    	at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525)
    	at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:920)
    	at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:883)
    	at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:492)
    	at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1138)
    	at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
    	at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
    	at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
    	at org.apache.catalina.core.StandardHost.start(StandardHost.java:719)
    	at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
    	at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
    	at org.apache.catalina.core.StandardService.start(StandardService.java:516)
    	at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
    	at org.apache.catalina.startup.Catalina.start(Catalina.java:566)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    	at java.lang.reflect.Method.invoke(Method.java:597)
    	at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
    	at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
    Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named '&log4jConfigurer' is defined
    	at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:387)
    	at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:968)
    	at org.springframework.beans.factory.support.DefaultListableBeanFactory.isAutowireCandidate(DefaultListableBeanFactory.java:364)
    	at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:670)
    	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:610)
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireByType(AbstractAutowireCapableBeanFactory.java:1076)
    	... 40 more
    What's wrong here?

  2. #2
    Join Date
    Jun 2006
    Location
    The Netherlands
    Posts
    13,695

    Default

    I suggest the javadocs of the classes you mention.... Especially the see also part....
    Marten Deinum
    Java Consultant / Pragmatist / Open Source Enthousiast / Author


    Pro Spring MVC: With Web Flow
    Conspect

    Have you read the reference guide.
    Use the [ code ] tags, young padawan

  3. #3
    Join Date
    Mar 2007
    Posts
    566

    Default

    Quote Originally Posted by Marten Deinum View Post
    I suggest the javadocs of the classes you mention.... Especially the see also part....
    Well, I already read it.

    It's not that clear for me:

    "Note: initLogging should be called before any other Spring activity (when using log4j), for proper initialization before any Spring logging attempts. "

    Does it mean that I have to call it from my code, e.g. in a ContextListener which starts before the Spring ContextListener?

    What do you mean with "Especially the see also part...."?

    And what about the MethodInvokingFactoryBean exception?

    Thank you

  4. #4
    Join Date
    Mar 2007
    Posts
    566

    Default

    Well, got the MethodInvokingFactoryBean working, had to disable autowire.
    But...

    If I activate a logger in the log4j.properties it works as expected, logging is done.
    If I deactivate the logger again I get: log4j:ERROR Attempted to append to closed appender named [stdout].

    Something goes wrong here...

  5. #5
    Join Date
    Jun 2006
    Location
    The Netherlands
    Posts
    13,695

    Default

    Configure the Log4JListener in your web.xml (remember the 'see also' part of the javadocs) you don't need to mess around with MethodInvokingFactoryBean because that would be to late to initialze Log4j....
    Last edited by Marten Deinum; Mar 29th, 2009 at 01:48 PM.
    Marten Deinum
    Java Consultant / Pragmatist / Open Source Enthousiast / Author


    Pro Spring MVC: With Web Flow
    Conspect

    Have you read the reference guide.
    Use the [ code ] tags, young padawan

  6. #6
    Join Date
    Mar 2007
    Posts
    566

    Default

    Ah ok, now I've got it

    Thank you

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •