Хм, у меня есть лидерство ... Я просматривал руководство log4j и случайно попробовал это:
>java -Dlog4j.debug=true com.example.test.Log4jExample2
log4j: Trying to find [log4j.xml] using context classloader sun.misc.Launcher$AppClassLoader@11b86e7.
log4j: Trying to find [log4j.xml] using sun.misc.Launcher$ExtClassLoader@35ce36 class loader.
log4j: Trying to find [log4j.xml] using ClassLoader.getSystemResource().
log4j: Trying to find [log4j.properties] using context classloader sun.misc.Launcher$AppClassLoader@11b86e7.
log4j: Using URL [jar:file:/C:/appl/Java/jre6u10/lib/ext/bsf.jar!/log4j.properties] for automatic log4j configuration.
log4j: Reading configuration from URL jar:file:/C:/appl/Java/jre6u10/lib/ext/bsf.jar!/log4j.properties
log4j: Parsing for [root] with value=[FATAL, CONSOLE].
log4j: Level token is [FATAL].
log4j: Category root set to FATAL
log4j: Parsing appender named "CONSOLE".
log4j: Parsing layout options for "CONSOLE".
log4j: End of parsing for "CONSOLE".
log4j: Parsed "CONSOLE" options.
log4j: Finished configuring.
log4j.configuration=null
log4j.properties=null
Похоже, среда сценариев bean-файлов переопределяет меня.
Как я могу это остановить? Я хочу, чтобы JRE не вызывался явно с файлом свойств, тогда я хочу, чтобы он использовал настройки, включенные в мой файл .jar. Я попытался поместить свой собственный файл log4j.properties в корень моего файла .jar, но это не сработало.
редактировать: ага! Я думаю, что понял: мне нужно сделать System.setProperty перед первым использованием Logger.getLogger (), что-то вроде:
static
{
System.setProperty("log4j.configuration",
"jar:file:my_jar_file_name_here.jar!/log4j.properties");
}