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 <[email protected]> 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 > [email protected] > http://qos.ch/mailman/listinfo/logback-user _______________________________________________ Logback-user mailing list [email protected] http://qos.ch/mailman/listinfo/logback-user
