2014-09-23 10 views
13

Ho una nuova applicazione che viene scritta usando log4j2, per sfruttare alcune delle sue nuove funzionalità. Una delle librerie che usa è un po 'più vecchia ed è stata costruita con log4j 1.x. Sto riscontrando un problema in cui il nuovo codice nell'applicazione scrive nel log, ma il codice nella vecchia libreria non scrive nel log. Ho persino una classe che è una sottoclasse di qualcosa nella vecchia libreria e viene anche chiamata per codice nella vecchia libreria, e anche questo codice non scriverà nel log. Ho configurato l'applicazione per utilizzare log4j2 versione 2.0.2, e ho escluso log4j esplicitamente quando si fa riferimento alla vecchia libreria come dipendenza di maven.Mixing log4j 1.xe log4j 2

Come posso ottenere il codice nella vecchia libreria di registrazione nello stesso file del mio nuovo codice?

riscrivere la vecchia biblioteca deve essere pensato come ultima istanza opzione

risposta

24

Sei consapevole che log4j2 include un ponte per log4j-1.2? Si può usare per rimuovere il vecchio log4j-1.2.17.jar, e includere questi tre vasi:

  • log4j-api-2.x.jar
  • log4j-core-2.x.jar
  • log4j-1.2-api-2.x.jar

Questo si tradurrà in tutte le chiamate che l'applicazione fa all'API log4-1.2 per essere indirizzati alla realizzazione log4j2. Le FAQ hanno uno diagram che potrebbe chiarire le cose. (Non dimenticare di rimuovere il vecchio jar log4j-1.2 dal classpath!)

+1

Sembra che mi mancasse anche 'log4j-jcl', ma ora ho la registrazione funzionante, grazie! – FrustratedWithFormsDesigner

+0

Funziona quando si dispone di appendici personalizzati? –

+0

Appendici Log4j2 personalizzati: sì. Appendici personalizzati di log4j 1.2: no. Questo è un adattatore API, l'implementazione è cambiata. Avrai bisogno di portare estensioni personalizzate a Log4j2. –