m-ric
m-ric

Reputation: 5901

How to move log4j.properties outside jar file?

I build a jar file with gradle, my app uses log4j. Initially my log4j.properties was embedded in my jar file. I moved it outside to be able to modify it in production. I updated the META-INF/MANIFEST.MF file embedded in my jar file to reflect this:

Class-Path: lib/log4j-1.2.1 lib/slf4j-api-1.4.2.jar
            lib/slf4j-api-1.5.6.jar lib/slf4j-log4j12-1.5.6.jar
            lib/log4j-1.2.14.jar
            ...
            lib/log4j.properties

My filetree is as follows on a windows7 32bit machine:

root/myapp.jar
root/lib/log4j.properties

I start my app with this command:

java -Dlog4j.configuration='lib\log4j.properties' -Dlog4j.debug=true -jar myapp.jar > logs/output.log

my logs/output.log says that log4j could not find its property file:

log4j: Trying to find ['lib\log4j.properties'] using context classloader sun.misc.Launcher$AppClassLoader@17fa65e.
log4j: Trying to find ['lib\log4j.properties'] using sun.misc.Launcher$AppClassLoader@17fa65e class loader.
log4j: Trying to find ['lib\log4j.properties'] using ClassLoader.getSystemResource().
log4j: Could not find resource: ['lib\log4j.properties'].

I also tried with:

-Dlog4j.configuration='lib/log4j.properties'
-Dlog4j.configuration='log4j.properties'
-Dlog4j.configuration=log4j.properties

When I embed the file in the jar, it works:

log4j: Trying to find [log4j.properties] using context classloader sun.misc.Launcher$AppClassLoader@18385e3.
log4j: Using URL [jar:file:/C:/Users/User/Desktop/myapp/myapp.jar!/log4j.properties] for automatic log4j configuration.
log4j: Reading configuration from URL jar:file:/C:/Users/User/Desktop/myapp/myapp-2.1.9.jar!/log4j.properties
log4j: Parsing for [root] with value=[debug, A].

But I need it outside... Any idea?

Upvotes: 12

Views: 8642

Answers (1)

wallenborn
wallenborn

Reputation: 4273

Try this:

-Dlog4j.configuration=file:lib/log4j.properties

but i'm curious: does the Class-Path definition in the manifest really work? Jars, yes, that's standard, but does it work for log4j.properties, too?

Upvotes: 10

Related Questions