David. Thank you! You were right. I didn't realize the class I was calling to compute the application's base directory just happened to have a static logger that called LoggerFactory.getLogger(...); which was the culprit. So, ensuring I set my system property "app.base.path" before any class can call LoggerFactory.getLogger(...) ensures the property is available when the logback.xml config file is processed.
On Thu, Aug 5, 2010 at 12:30 PM, David Roussel <[email protected]> wrote: > Fud, > > It sounds obvious but you have to initialise your system property before you > initialise logback. > > Logback initialises the first time LoggerFactory.getLogger() is called. So if > you have you logger as a static member in your main class then it's going to > get initialised too soon. > > In your main class you can have a logger member, but have it initially set to > null. In your main method work out you app base property. Then do 'log = > LoggerFactory.getLogger(...)'. > > I do some something like this and it works for me. > > David > > On 5 Aug 2010, at 16:29, fudmail <[email protected]> wrote: > >> I believe my logback configuration issue should be common but I am >> unable to find a satisfactory resolution. >> >> I'll first describe what I'm trying to achieve. >> >> I have a simple application that is deployed somewhere on the file >> system as follows: >> >> MyApp >> |- bin >> |- myExecJar.jar >> |- lib >> |- conf >> |- logback.xml >> |- logs >> >> At runtime my application computes the absolute path of the MyApp >> directory (e.g., /home/user1/apps/MyApp) using reflection. A system >> property called "app.base.path" is set to this computed path. >> >> This path is computed so that some other misc. paths are resolved >> relative to the value of "app.base.path" and are independent of the >> working directory (i.e., the value of the "user.dir" property) that >> the application was started from. >> >> In my logback.xml configuration file I have the line >> <file>${app.base.path}/logs/logback.log</file> >> to specify where the log file will be written to. >> >> My problem is this. Upon running "java -jar myExecJar.jar", the >> logback.xml file is read from the classpath (set in the jar manifest) >> and processed before my code gets the chance to programmatically set >> the "app.base.path" property. I therefore end up with a directory >> being created as follows >> "/home/user1/apps/MyApp/bin/app.base.path_IS_UNDEFINED >> logs/logback.log". >> >> Any suggestions on the best way to achieve what I'm trying to do in logback? >> >> Thank you. >> _______________________________________________ >> 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 > _______________________________________________ Logback-user mailing list [email protected] http://qos.ch/mailman/listinfo/logback-user
