You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@maven.apache.org by stash1071 <st...@yahoo.com> on 2009/04/30 17:36:58 UTC

Re: [maven-user] Getting log4j output during unit tests

With a simpler project, using Groovy, I was able to get this work.

Turns out I only need commons-logging at compile scope, and I don't need
log4j at test scope, but it works either way.

My src/test/resources/log4j.properties:
  log4j.rootLogger=DEBUG, stdout
  log4j.appender.stdout=org.apache.log4j.ConsoleAppender
  log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
  log4j.appender.stdout.layout.ConversionPattern=%-5p [%t][%d{ISO8601}]
[%C.%M] - %m%n

Not sure why I was having problems before, but thanks for all the
suggestions.

stash1071 wrote:
> 
> 
> Thanks for getting back to me Dennis.  I got to play around with your
> suggestions (but not for as long as I would of liked).  log4j is in test
> scope, commons-logging still compile.
> 
> Changing commons-logging.properties to use SimpleLog as you suggested does
> not produce any output for me.
> Also, my Cobertura report reports I've hit my logging statements only when
> I set a logger in my test class explicitly:
> 
>>>    myObjectUnderTest.logger = new SimpleLog(this.class.name)
>>>     myObjectUnderTest.logger.level = SimpleLog.LOG_LEVEL_DEBUG
> 
> 
> I simplified my src/test/resources/log4j.properties to:
> 
>      log4j.rootLogger=DEBUG, stdout
>      log4j.appender.stdout=org.apache.log4j.ConsoleAppender
> 
> I might be worth mentioning that my test classes are Groovy classes and
> the classes under test are Java?
> Thanks
> 
> 
> ----- Original Message ----
> From: Dennis Lundberg <de...@apache.org>
> To: Maven Users List <us...@maven.apache.org>
> Sent: Thursday, March 5, 2009 4:53:34 PM
> Subject: Re: [maven-user] Getting log4j output during unit tests
> 
> John Prystash wrote:
>> I only depend on commons-logging, not log4j.  log4j is provided by my
>> container, which is included in the same assembly, so at runtime logging
>> works.
> 
> Yes, but your container is not available when surefire runs the tests,
> so you need to add log4j as a test scope dependency in Maven, like you
> have specified a few lines down.
> 
>> I have commons-logging at scope compile.  Another module that depends on
>> the module in question packages up an assembly that includes all runtime
>> dependencies, which implicitly includes commons-logging.
>> 
>> I added src/test/resources/commons-logging.properties as you suggested
>> and then log4j in test scope:
>> 
>>     <dependency>
>>       <groupId>log4j</groupId>
>>       <artifactId>log4j</artifactId>
>>       <version>1.2.14</version>
>>       <scope>test</scope>
>>     </dependency>
>>    
>> With or without the additional surefire configuration referencing
>> log4j.properties, I unfortunately don't see any output.
>> I could be missing something fundamental here with how these libraries
>> work by chance.
> 
> Just to make sure commons-logging is working for you, try this.
> 
> Replace the line in commons-logging.properties with this one, to use the
> internal simple logging implementation available in commons-logging:
> 
> org.apache.commons.logging.Log=org.apache.commons.logging.impl.SimpleLog
> 
> If that gives you output, then the problem lies with the log4j
> configuration.
> 
>> 
>> 
>> 
>> ----- Original Message ----
>> From: Dennis Lundberg <de...@apache.org>
>> To: Maven Users List <us...@maven.apache.org>
>> Sent: Wednesday, March 4, 2009 5:50:41 PM
>> Subject: Re: [maven-user] Getting log4j output during unit tests
>> 
>> Do you have both commons-logging and log4j as dependencies in your
>> project with the scope test?
>> 
>> You could try to add the file
>> src/test/resources/commons-logging.properties
>> with the following single line in it:
>> org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger
>> 
>> This tells commons-logging to explicitly use log4j as the logging
>> implementation.
>> 
>> John Prystash wrote:
>>> Hi, I have some logging statements in my classes under test that would I
>>> like to have run during my unit tests.
>>>
>>> I put a simple log4j.properties file under src/test/resources:
>>>
>>>     log4j.rootLogger=DEBUG, stdout
>>>     log4j.appender.stdout=org.apache.log4j.ConsoleAppender
>>>     log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
>>>     log4j.appender.stdout.layout.ConversionPattern=%-5p
>>> [%t][%d{ISO8601}] [%C.%M] - %m%n
>>>    
>>> When I run mvn test, the file ends up in target/test-classes like I'd
>>> expect, but I see no output from the logging statements when my tests
>>> run.
>>>
>>> There is no src/main/resources/log4j.properties file to conflict with,
>>> but I then explicitly configured the surefire plugin to use
>>> log4j.properties:
>>>
>>>      <plugin>
>>>         <groupId>org.apache.maven.plugins</groupId>
>>>         <artifactId>maven-surefire-plugin</artifactId>
>>>         <version>2.4.3</version>
>>>         <configuration>
>>>           <redirectTestOutputToFile>true</redirectTestOutputToFile>
>>>           <systemProperties>
>>>             <property>
>>>               <name>log4j.configuration</name>
>>>               <value>file:target/test-classes/log4j.properties</value>
>>>             </property>
>>>           </systemProperties>
>>>         </configuration>
>>>       </plugin>
>>>
>>> With no change. The *output.txt files for my tests were empty.
>>>
>>> I added the following statements to my test setup, I get some output:
>>>
>>>     myObjectUnderTest.logger = new SimpleLog(this.class.name)
>>>     myObjectUnderTest.logger.level = SimpleLog.LOG_LEVEL_DEBUG
>>>
>>> My loggers are defined with:
>>>
>>>     private Log logger = LogFactory.getLog(this.getClass());
>>>
>>> I'm using commons-logging-1.1.1.jar.
>>>
>>> Thanks in advance for any insight.
>>>
>>>
>>>      
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: users-unsubscribe@maven.apache.org
>>> For additional commands, e-mail: users-help@maven.apache.org
>>>
>>>
>> 
>> 
> 
> 
> -- 
> Dennis Lundberg
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@maven.apache.org
> For additional commands, e-mail: users-help@maven.apache.org
> 
> 
>       
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@maven.apache.org
> For additional commands, e-mail: users-help@maven.apache.org
> 
> 
> 

-- 
View this message in context: http://www.nabble.com/-maven-user--Getting-log4j-output-during-unit-tests-tp22340946p23318807.html
Sent from the Maven - Users mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@maven.apache.org
For additional commands, e-mail: users-help@maven.apache.org