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

Log4J:FATAL undtagelse på shutdown hook, kan ikke finde ud af hvorfor

Log4j2 prøv at bruge shutdown hook for at lukke logningstjenesten korrekt.

Nedlukningskroge udføres parallelt, og derfor er undtagelsen ikke systematisk.

Der er en fejlrapport vedrørende dette problem.

Du kan deaktivere shutdown hook i din konfigurationsfil :

<configuration shutdownHook="disable" ...>

Se også dette link på log4j2's side:

https://logging.apache.org/log4j/2.x/manual/webapp.html

Hvis du inkluderer denne afhængighed, vil den ikke forsøge at tilføje en shutdown-hook.

<dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-web</artifactId>
        <version>${log4j.version}</version>
 </dependency>

Som allerede nævnt her log4j-web er krukken til dette problem. Det fungerede uden problemer for jetty-9.2.1.v20140609 .

libraryDependencies += "org.apache.logging.log4j" % "log4j-web" % "2.5"

Hvis du tjekker log4j-web (op til v2.9), har den log4j.shutdownHookEnabled=false

Men med Servlet 3.0 og Tomcat 7.0.73 , måtte fjerne log4j fra jarsToSkip nøgle på conf/catalina.properties .

Mærkelige ting kan ske. Hvad mig angår, implementerer jeg to .war s, begge ved hjælp af Non blocking Logger , arbejdede for den ene tjeneste, men ikke for den anden. Tomcat 7 /Websphere 8 genstart ryddede dog op.

Årsag til behovet for clean up logging resource er beskrevet i Brug af Log4j 2 i webapplikationer -

når Servlet Container lukker ned, eller webappen er ude af drift. Det er vigtigt, at logressourcer bliver ryddet ordentligt op (databaseforbindelser lukket, filer lukket osv.).

På grund af arten af ​​ClassLoader I webapps kan Log4j-ressourcer ikke ryddes op på normal vis. Log4j skal "startes", når webappen udrulles og "lukkes ned", når webappen ophæves.

Læs venligst dette officielle dokument - Brug af Log4j 2 i webcontainere, det er nyttigt.


Java tag