Внешний файл log4j.xml
Я пытаюсь запустить банку с файлом log4j.xml в файловой системе за пределами банки так:
java -jar MyJarName.jar -cp=/opt/companyName/pathToJar/ log4j.configuration=log4j.xml argToJar1 argToJar2
Я также пробовал:
java -jar MyJarName.jar -cp=/opt/companyName/pathToJar/ log4j.configuration=/opt/companyName/pathToJar/log4j.xml argToJar1 argToJar2
Файл log4j.xml находится в том же каталоге, что и jar (/opt/companyName/pathToJar/), но я все равно получаю стандартное предупреждающее сообщение:
log4j:WARN No appenders could be found for logger (org.apache.axis.i18n.ProjectResourceBundle).
log4j:WARN Please initialize the log4j system properly.
Возможно ли иметь файл конфигурации за пределами банки, или мне нужно упаковать его с помощью jar?
ТИА
Ответы
Ответ 1
При использовании переключателя -jar
для запуска исполняемого файла jar путь к классам получается из манифеста файла jar. Переключатель -cp
, если задан, игнорируется.
Ответ Джефф Стори станет самым простым решением. Кроме того, вы можете добавить атрибут Class-Path
в файл jar manifest.
ИЗМЕНИТЬ
Попробуйте включить отладку log4j и сделать путь к log4j.xml
полным URL-адресом. Например:
java -Dlog4j.debug -Dlog4j.configuration=file:/path/to/log4j.xml -jar ...
Ответ 2
это работает:
java -jar -Dlog4j.configuration="file:d:\log4j.xml" myjar.jar
Ответ 3
Вы пробовали java -Dlog4j.configuration=/path/to/log4j.xml -jar <rest-of-args>
Ответ 4
вы можете определить файл свойств по умолчанию в банке. если не задано никаких настраиваемых свойств, вы можете использовать этот файл по умолчанию. Если определено настраиваемое свойство, вы можете переопределить свойство по умолчанию.
myjar.jar файл содержит log4j.default.configuration
вы можете запустить свою программу с помощью этих параметров, чтобы запустить приложение
java -jar -Dlog4j.configuration=log4j.properties target\yourfile-v01_000_01_c002.jar
Пример кода
public static void main(String[] args) {
String filename = System.getProperty("log4j.configuration");
if(null==filename||filename.trim().equals("")) {
logger.info("Using default log4j configuration log4j.default.properties.");
logger.info("If you would like to change the default configuration please add following param before startup -Dlog4j.configuration=<log4jfile>");
PropertyConfigurator.configure( Main.class.getResourceAsStream("/log4j.default.properties"));
} else {
File file = new File(filename);
if(!file.exists()) System.out.println("It is not possible to load the given log4j properties file :"+file.getAbsolutePath());
else PropertyConfigurator.configure(file.getAbsolutePath());
}
}
Ответ 5
Для log4j2 используйте опцию configurationFile:
java -Dlog4j.configurationFile=/path/to/log4j2.xml -jar ...
http://logging.apache.org/log4j/2.0/manual/configuration.html
Ответ 6
У меня были проблемы с использованием log4j с Sun JDK и автоматической настройкой.
Вы можете использовать это:
String filename = System.getProperty("log4j.configuration");
DOMConfigurator(filename);
перед использованием Logger.
Ответ 7
"- jar" использует только путь класса внутри исполняемого jar, а -cp игнорируется. Добавление "." для пути к классам в исполняемом банке должно быть установлено значение log4j.xml.
Ответ 8
java -cp "путь/в/ваш/log4jxml: путь/в/yourjar.jar" your.package.MainClass
Файл log4j.xml в каталоге "путь/в/ваш/log4jxml" перезапишет файл log4j.xml в "path/to/yourjar.jar".
Обратитесь к Установка нескольких банок в пути к java classpath.
Ответ 9
Простейшая конфигурация пути для `` log4j2 is using the
статический блок setting
log4j.configurationFile`:
public class MyClass {
static {
System.setProperty("log4j.configurationFile", "./config/log4j2.xml");
}
protected final transient Logger logger = LogManager.getLogger(IDOLTracker.class);
public static void main(String[] args) {
logger.info("");
}
}
Тогда структура может быть такой:
ProgramFolder
| ---- Игры и Консоли | ---- Игры и Консоли
Когда вы запускаете свою банку, она будет выглядеть за пределами флага для XML файла.