
I don't know what the problem is, but spring doesn't depend on log4j, it uses commons logging. Make sure you don't have commons-logging on your classpath and the you have the commons to slf4j bridge. Maybe fixing that will solve your problem. David On 21 Apr 2011, at 10:04, Taariq <taariql@gmail.com> wrote:
Hi
I'm migrating an app from log4j, which uses a daily rolling file appender defined like this...
log4j.rootLogger=ERROR
### file appender log4j.appender.GTISFile=org.apache.log4j.DailyRollingFileAppender log4j.appender.GTISFile.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n log4j.appender.GTISFile.layout=org.apache.log4j.PatternLayout log4j.appender.GTISFile.File="${user.home}/log/gtis.log"
This will create a file named gtis.log in my user home directory, in a sub directory called log.
The logback config to attempt the same... <appender name="GTISFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>"${user.home}/log/gtis.log"</File> <encoder> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- daily rollover --> <fileNamePattern>.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- keep 30 days' worth of history --> <maxHistory>30</maxHistory> </rollingPolicy> </appender>
Now first I have to mention I'm using spring and other libraries that depend on log4j, so I'm using logback-classic 0.9.28, log4j-over-slf4j and slf4j-api 1.6.1
As such I've got both the log4j.properties file and the logback.xml in the classpath, hoping that logback handle all calls to log4j. If this is wrong please let me know.
This results in the errors below in both log4j and logback. It seems to want to create "C:\Users\TaariqL\log\gtis.log" inside my working directory. If I don't try to use the user.home or user.dir directories, eg <fileNamePattern>log/gtis.%d{yyyy-MM-dd}.log</fileNamePattern>, then it works fine and creates the log file in a folder called log inside my working directory. How does logback support the behaviour I had with log4j?
Thanks, Taariq
log4j:ERROR setFile(null,true) call failed. java.io.FileNotFoundException: "C:\Users\TaariqL\log\gtis.log" (The filename, directory name, or volume label syntax is incorrect) at java.io.FileOutputStream.openAppend(Native Method) at java.io.FileOutputStream.<init>(FileOutputStream.java:177) at java.io.FileOutputStream.<init>(FileOutputStream.java:102) at org.apache.log4j.FileAppender.setFile(FileAppender.java:289) at org.apache.log4j.FileAppender.activateOptions(FileAppender.java:163) at org.apache.log4j.DailyRollingFileAppender.activateOptions(DailyRollingFileAppender.java:215) at org.apache.log4j.config.PropertySetter.activate(PropertySetter.java:256) at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:132) at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:96) at org.apache.log4j.PropertyConfigurator.parseAppender(PropertyConfigurator.java:654) at org.apache.log4j.PropertyConfigurator.parseCategory(PropertyConfigurator.java:612) at org.apache.log4j.PropertyConfigurator.configureRootCategory(PropertyConfigurator.java:509) at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:415) at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:441) at org.apache.log4j.helpers.OptionConverter.selectAndConfigure(OptionConverter.java:468) at org.apache.log4j.LogManager.<clinit>(LogManager.java:122) at org.apache.log4j.Logger.getLogger(Logger.java:104) at org.apache.commons.logging.impl.Log4JLogger.getLogger(Log4JLogger.java:283) at org.apache.commons.logging.impl.Log4JLogger.<init>(Log4JLogger.java:108) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) at java.lang.reflect.Constructor.newInstance(Constructor.java:513) at org.apache.commons.logging.impl.LogFactoryImpl.createLogFromClass(LogFactoryImpl.java:1040) at org.apache.commons.logging.impl.LogFactoryImpl.discoverLogImplementation(LogFactoryImpl.java:838) at org.apache.commons.logging.impl.LogFactoryImpl.newInstance(LogFactoryImpl.java:601) at org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:333) at org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:307) at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:645) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.<clinit>(SpringJUnit4ClassRunner.java:90) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) at java.lang.reflect.Constructor.newInstance(Constructor.java:513) at org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:31) at org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:24) at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57) at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:29) at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57) at org.junit.runners.model.RunnerBuilder.runners(RunnerBuilder.java:93) at org.junit.runners.model.RunnerBuilder.runners(RunnerBuilder.java:84) at org.junit.runners.Suite.<init>(Suite.java:79) at com.intellij.junit4.IdeaSuite.<init>(IdeaSuite.java:40) at com.intellij.junit4.JUnit46ClassesRequestBuilder.getClassesRequest(JUnit46ClassesRequestBuilder.java:34) at com.intellij.junit4.JUnit4TestRunnerUtil.buildRequest(JUnit4TestRunnerUtil.java:81) at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:64) at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:196) at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:65) 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 com.intellij.rt.execution.application.AppMain.main(AppMain.java:115) log4j:ERROR Either File or DatePattern options are not set for appender [GTISFile]. 10:56:00,063 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.groovy] 10:56:00,064 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback-test.xml] at [file:/C:/Users/TaariqL/Documents/Workspace/GTIS_Trunk/gtis-core/target/test-classes/logback-test.xml] 10:56:00,256 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.rolling.RollingFileAppender] 10:56:00,261 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [GTISFile] 10:56:00,284 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property 10:56:00,349 |-INFO in c.q.l.core.rolling.TimeBasedRollingPolicy - No compression will be used 10:56:00,351 |-INFO in c.q.l.core.rolling.TimeBasedRollingPolicy - Will use the pattern .%d{yyyy-MM-dd}.log for the active file 10:56:00,356 |-INFO in c.q.l.core.rolling.DefaultTimeBasedFileNamingAndTriggeringPolicy - The date pattern is 'yyyy-MM-dd' from file name pattern '.%d{yyyy-MM-dd}.log'. 10:56:00,356 |-INFO in c.q.l.core.rolling.DefaultTimeBasedFileNamingAndTriggeringPolicy - Roll-over at midnight. 10:56:00,359 |-INFO in c.q.l.core.rolling.DefaultTimeBasedFileNamingAndTriggeringPolicy - Setting initial period to Thu Apr 21 10:56:00 CAT 2011 10:56:00,360 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[GTISFile] - Active log file name: "C:\Users\TaariqL/log/gtis.log" 10:56:00,360 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[GTISFile] - File property is set to ["C:\Users\TaariqL/log/gtis.log"] 10:56:00,362 |-ERROR in ch.qos.logback.core.rolling.RollingFileAppender[GTISFile] - Failed to create parent directories for [C:\Users\TaariqL\Documents\Workspace\GTIS_Trunk\"C:\Users\TaariqL\log\gtis.log"] 10:56:00,363 |-ERROR in ch.qos.logback.core.rolling.RollingFileAppender[GTISFile] - openFile("C:\Users\TaariqL/log/gtis.log",true) call failed. java.io.FileNotFoundException: "C:\Users\TaariqL\log\gtis.log" (The filename, directory name, or volume label syntax is incorrect) at java.io.FileNotFoundException: "C:\Users\TaariqL\log\gtis.log" (The filename, directory name, or volume label syntax is incorrect) at at java.io.FileOutputStream.openAppend(Native Method) at at java.io.FileOutputStream.<init>(FileOutputStream.java:177) at at ch.qos.logback.core.recovery.ResilientFileOutputStream.<init>(ResilientFileOutputStream.java:30) at at ch.qos.logback.core.FileAppender.openFile(FileAppender.java:163) at at ch.qos.logback.core.FileAppender.start(FileAppender.java:115) at at ch.qos.logback.core.rolling.RollingFileAppender.start(RollingFileAppender.java:79) at at ch.qos.logback.core.joran.action.AppenderAction.end(AppenderAction.java:96) at at ch.qos.logback.core.joran.spi.Interpreter.callEndAction(Interpreter.java:315) at at ch.qos.logback.core.joran.spi.Interpreter.endElement(Interpreter.java:194) at at ch.qos.logback.core.joran.spi.Interpreter.endElement(Interpreter.java:180) at at ch.qos.logback.core.joran.spi.EventPlayer.play(EventPlayer.java:52) at at ch.qos.logback.core.joran.spi.Interpreter.play(Interpreter.java:332) at at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:126) at at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:93) at at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:52) at at ch.qos.logback.classic.util.ContextInitializer.configureByResource(ContextInitializer.java:77) at at ch.qos.logback.classic.util.ContextInitializer.autoConfig(ContextInitializer.java:150) at at org.slf4j.impl.StaticLoggerBinder.init(StaticLoggerBinder.java:85) at at org.slf4j.impl.StaticLoggerBinder.<clinit>(StaticLoggerBinder.java:55) at at org.slf4j.LoggerFactory.bind(LoggerFactory.java:121) at at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:111) at at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:268) at at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:241) at at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:254) at at za.co.newco.common.ConfigTests.<init>(ConfigTests.java:16) at at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) at at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) at at java.lang.reflect.Constructor.newInstance(Constructor.java:513) at at org.junit.runners.BlockJUnit4ClassRunner.createTest(BlockJUnit4ClassRunner.java:202) at at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:219) at at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:301) at at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) at at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:303) at at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:240) at at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) at at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193) at at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52) at at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191) at at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42) at at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184) at at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) at at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) at at org.junit.runners.ParentRunner.run(ParentRunner.java:236) at at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:180) at at org.junit.runners.Suite.runChild(Suite.java:128) at at org.junit.runners.Suite.runChild(Suite.java:24) at at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193) at at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52) at at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191) at at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42) at at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184) at at org.junit.runners.ParentRunner.run(ParentRunner.java:236) at at org.junit.runner.JUnitCore.run(JUnitCore.java:157) at at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:97) at at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:196) at at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:65) at at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at at java.lang.reflect.Method.invoke(Method.java:597) at at com.intellij.rt.execution.application.AppMain.main(AppMain.java:115) _______________________________________________ Logback-user mailing list Logback-user@qos.ch http://qos.ch/mailman/listinfo/logback-user