У меня есть ситуация, в которой я хочу Log4J 2 , чтобы определить, какой каталог использовать для ведения журнала. Псевдокод выглядит следующим образом:
property LOG_DIR = "./logs" // default
if (isDIR(${env:LOG_DIR}) {
LOG_DIR = "${env:LOG_DIR}"
} else if (isDir(${sys:catalina.base}) {
LOG_DIR = "${sys:catalina.base}/logs"
}
Конфигурация, которую я имею для свойств (в log4j2.xml
), выглядит следующим образом:
<Configuration status="DEBUG">
<Properties>
<Property name="LOG_DIR">${sys:catalina.base}/logs:-logs</Property>
<Property name="LOG_PATTERN">%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] %t/%c:%L | %m%n</Property>
<Property name="JAVA_HEADER">${java:version} - ${java:os}</Property>
</Properties>
<!-- Other configuration here -->
</configuration>
Как мне кажется, это должно выглядеть так:
<!-- Is this permitted? What happens if there's no Catalina Base AND no LOG_DIR env var? -->
<Property name="LOG_DIR">${env:LOG_DIR}:${sys:catalina.base}/logs:-logs</Property>
В чем я не уверен, так это как получить оба параметра ${env:LOG_DIR}
и ${sys:catalina.base}
в свойстве LOG_DIR
в конфигурации (до значения по умолчанию logs
). Возможно ли это даже без программного решения? (Я бы хотел избежать программного решения, так как этот конфиг будет шаблоном для нескольких проектов, некоторые из которых являются библиотеками в приложениях SE. Я хотел бы избежать включения библиотеки, предназначенной только для настройки Log4J
.) Как Насколько я знаю, до дефолта может быть только один поиск. Я не знаю, разрешено ли вложение или создание цепочек.