Java >> Java tutorial >  >> Tag >> Log4j

Hvordan bruger jeg flere substitutioner i opslag til Log4J 2-konfigurationer? Er det muligt?

Jeg har en situation, hvor jeg vil have Log4J 2 for at bestemme, hvilken mappe der skal bruges til logning. Pseudokoden er som følger:

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"
}

Den konfiguration, jeg har for egenskaber (i 00 ) er som følger:

<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>

Sådan synes jeg det skal se ud:

<!-- 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>

Det, jeg ikke er sikker på, er, hvordan man får begge dele 12 og 29 muligheder i 39 egenskab i konfigurationen (før standarden 46 ). Er dette overhovedet muligt uden en programmatisk løsning? (Jeg vil gerne undgå en programmatisk løsning, da denne konfiguration vil være en skabelon for flere projekter, hvoraf nogle er biblioteker i SE-applikationer. Jeg vil gerne undgå at inkludere et bibliotek, der kun er til konfiguration af 54 .) Så vidt jeg ved, kan der kun være ét opslag før standarden. Jeg ved ikke, om indlejring eller lænkning er tilladt.

Svar

I dag stødte jeg på det samme problem, og jeg faldt over dette spørgsmål. Jeg prøvede i min egen ende, og jeg var i stand til at løse problemet og opnå det ønskede resultat.

<Property name="LOG_DIR">${env:LOG_DIR:-${sys:catalina.base:-/logs}}/somexyz.log</Property>

sys: Det står for System environment variable, dette er for hele pc'en eller din nuværende bruger.

env: Det er køretidsmiljøvariablen, som du konfigurerer i runner i Intellij eller lignende.

Ifølge log4J2 lookup officielle side:Det generelle format for Lookup er 69 eller 73 .

Nu, i henhold til dit krav, vil du se, om en filsti er konfigureret i runtime-miljøet eller ej, hvis ja, så gem alle loghændelsesdata på det sted. Hvis ingen fil er konfigureret i runtimeenvironment, så kig efter systemmiljøet, hvis stien er konfigureret der, så gem alle logningsoplysninger der ellers gem alle logningsoplysninger til en standardsti, dvs. 85 .

Brug nedenstående kode, og det vil fungere for dig.

<Property name="LOG_DIR">${env:LOG_DIR:-${sys:catalina.base:-/logs}}/somexyz.log</Property>

Hvis filstien er konfigureret i runtime-miljøet, så gem den der, ellers tjek om stien er konfigureret i systemmiljøet (PC) og gem den der, ellers gem den i standardstien /logs .


Java tag