Мне нужно передать какое-то значение, чтобы включить определенный код в майском приложении (в данном случае это необязательно включить запись статистики в файл в определенных условиях, но это может быть что-нибудь общее).
Мое java-приложение установлено как сервис. Так что каждый способ, о котором я думал, имеет некоторые недостатки:
- Добавить еще один параметр в main (): громоздко, поскольку клиенты уже установили инструмент, и командную строку нужно будет менять каждый раз.
- Добавление java -DmyEnvVar = A_VALUE в мою командную строку: то же, что и выше.
- Установите переменную среды: по крайней мере, служба должна быть перезапущена, и даже тогда вы должны позаботиться о том, под каким пользователем работает служба и т. Д.
- Добавление свойства в файл конфигурации: я предпочитаю, чтобы это не отображалось в файле конфигурации, чтобы пользователь его не видел, это что-то для отладки и т. Д.
Так что я подумал, что, может быть, есть какой-то способ (или взлом) использовать log4j logger для передачи этого значения в мой код. Я уже думал об одном способе, хотя он очень ограничен:
Добавить фиктивный класс в мою кодовую базу com.dummy.DevOptions
открытый класс DevOptions {
public static final Logger logger = Logger.getLogger (DevOptions.class);
В моем коде используйте его так:
if (DevOptions.logger.isInfoEnabled ()) {
// делаю мои дополнительные вещи
}
// ...
if (DevOptions.logger.isDebugEnabled ()) {
// делать другие вещи
}
Это позволяет мне использовать различение между различными значениями, и я мог бы увеличить число, добавив больше регистраторов в DevOptions. Но мне интересно, есть ли более чистый способ, возможно, путем настройки регистраторов только в log4j.xml ??