Как присвоить значение аргумента логгеру slf4j
Приложение запускается следующим образом: java -jar app.jar logfile.txt. Аргумент получать умею, но как мне установить его логгеру в виде пути до файла? В файле конфигурации это выглядело бы следующим образом: logging.file.path, но изначально путь неизвестен.
Ответы (2 шт):
В Spring все значения переопределяются через двойное тире --.
Как-то пытаться делать это через код кажется мне очень плохой идеей. Такие вещи как путь до файла с логами в основном делают через переменные окружения или в команде запуска.
То есть команда запуска будет такая java -jar app.jar --logging.file.path=logfile.txt
А если через переменные окружения, то нужно отредактировать application.* ::
logging:
file:
path: ${LOGGIN_FILE_PATH:<DEFAULT_VALUE>}
И тогда Spring сам подхватит значение LOGGING_FILE_PATH из Environment (переменных окружения). Если же он не найдет значение, то будет использовать значение по умолчанию <DEFAULT_VALUE> (только писать без ковычек), которое вы задали после двоеточия
Через код это можно сделать так ::
public interface EnvironmentProperties {
String LOGGING_FILE_PATH = "LOGGING_FILE_PATH";
}
И в методе main(String[] args) ::
@SpringBootApplication
public class TestApplication {
public static void main(String[] args) {
System.setProperty(EnvironmentProperties.LOGGING_FILE_PATH, args[0]);
SpringApplication.run(TestApplication.class, args);
}
}
Получилось реализовать таким образом:
public static void main(String[] args) {
String logfile = "";
try {
logfile = args[1];
} catch (Exception ignored) {}
new SpringApplicationBuilder(VkApplication.class)
.properties("logging.file.name=" + logfile).run(args);
if(logfile.isEmpty()) {
log.warn("Log file hasn't been present. Logging will out just in a console.");
}
}
Свойства назначил через SpringApplicationBuilder.