1. Übersicht
1.1 Hintergrund
Protokollierung ist in unserer täglichen Entwicklung sehr wichtig. Das Hinzufügen der Protokollierung in Anwendungen basiert im Allgemeinen auf drei Zwecken: Überwachung der Änderungen der Variablen im Code, wobei sie regelmäßig in Dateien für die statistische Analyse durch andere Anwendungen aufgezeichnet werden; Verfolgung der Code -Laufzeit -Trajektorie als Grundlage für zukünftige Audits; Als Debugger in der integrierten Entwicklungsumgebung fungieren und Code -Debugginginformationen in die Datei oder Konsole drucken.
1.2 Einführung
Log4J (Log for Java) ist ein Open -Source -Projekt von Apache, das eine heikle Möglichkeit zum Verwalten von Protokollen bietet. Über eine Konfigurationsdatei können wir das Ausgabeformat und das Ziel jedes Protokolls mit mehreren Auswahlmöglichkeiten steuern. Durch das Definieren der Informationsstufe können wir auch flexibel Feedback -Informationen im Code wechseln. Einfach ausgedrückt ist Log4J eine API -Bibliothek, mit der Entwickler die Protokollausgabe verwalten können. Die wichtigste Funktion ist, dass die Konfigurationsdatei die Priorität von Protokollinformationen, das Ausgabeziel der Protokollinformationen und das Ausgabeformat der Protokollinformationen flexibel festlegen kann.
2.Log4j -Konfiguration
2.1Log4J -Klassendiagramm
2.2 Definieren der Konfigurationsdatei
Log4j kann dynamisch durch Java -Programme eingestellt werden. Der offensichtliche Nachteil dieser Methode ist: Wenn Sie die Protokollausgabeebene und andere Informationen ändern müssen, müssen Sie die Java -Datei ändern und dann neu kompilieren, was sehr problematisch ist.
Durch die Verwendung von Konfigurationsdateien wird unsere Anwendung flexibler für die Konfiguration von Protokollen und Protokollausgabemethoden umfassen Ausgangspriorität, Ausgabeziel und Ausgabeformat. Log4j unterstützt zwei Konfigurationsdateiformate, eine ist eine XML -Datei und die andere ist eine Java -Feature -Datei log4j.properties (key = value).
2.3 Konfigurationsdatei log4j.properties
Wenn log4j zum ersten Mal aufgerufen wird, sucht LOG4J die Datei im Klassenpfad (../Web-inf/class/ natürlich, solange das Verzeichnis im Klassenpfad enthalten ist) und die vollständige Konfiguration der Datei lesen. Diese Konfigurationsdatei gibt Log4J mit welchem Format an, welche Informationen dort ausgeben müssen, wo es sich befindet. Entsprechend müssen wir drei Aspekte konfigurieren:
1. Root Directory (Level und Ziel);
2. Ziel (Konsole, Datei usw.);
3. Ausgabestil (So anzeigen Protokollinhalte anzeigen)
Beispiele sind wie folgt:
#Set -Protokollausgangsebene
log4j.rootlogger = debug, Appender1
#Output to console
log4j.appender.appender1 = org.apache.log4j.conoleAppender
#Style ist ttcclayout
log4j.appender.appender1.layout = org.apache.log4j.ttcclayout
2.4. LOG4J Drei Komponenten Beschreibung
Log4J verfügt über drei Hauptkomponenten: Logger, Appender (Ausgabequelle) und Layout (Layout). Das Kombinieren dieser drei Komponenten ermöglicht eine einfache Protokollierung des Typs und der Informationsstufe und kann den Stil und die Position der Protokollausgabe zur Laufzeit steuern. Das Folgende sind die drei Komponenten:
2.4.1 Logger Logger
Das Logger -Objekt wird verwendet, um das System zu ersetzen. OUT oder System.ERRs Protokollautor, mit dem Programmierer die Ausgabe von Protokollinformationen zur Verfügung gestellt werden.
Der Root Logger ist mit der Syntax konfiguriert:
log4j.rootlogger = [Level], appendername, appendername,…
Unter ihnen ist Level die Priorität der Protokollierung, unterteilt in Off, Fatal, Irrtum, Warn, Info, Debugug, All oder Custom Levels. Log4J empfiehlt nur vier Ebenen, wobei Priorität von hoch bis niedrig ist, nämlich Fehler, Warnen, Info und Debuggen. Auf der hier definierten Ebene können Sie die Switches auf die entsprechende Ebene der Protokollinformationen in der Anwendung steuern. Wenn hier beispielsweise die Info -Ebene definiert ist, werden alle Informationen zur Debug -Ebene in der Anwendung nicht ausgedruckt. Appendername gibt an, wo die Protokollinformationen ausgegeben werden. Mehrere Ausgangsziele können gleichzeitig angegeben werden.
2.4.2 Ausgabeziel Appender
Das LOG4J -Protokollsystem ermöglicht die Protokollausgabe an verschiedenen Stellen, wie z. B. Konsole (Konsole), Dateien (Dateien), neue Dateien werden basierend auf Tagen oder Dateigröße generiert und an andere Orte in Form von Streams usw. gesendet.
Konfigurieren Appender, seine Syntax wird ausgedrückt als:
log4j.appender.appendername = vollständig
"vollständig.qualified.name.of.appender.class" kann eines der folgenden fünf Ziele angeben:
1) .org.apache.log4j.conoleAppender (Konsole)
2) .org.apache.log4j.fileAppender (Datei)
3) .org.apache.log4j.dailyrollingFileAppender (täglich eine Protokolldatei generieren)
4) .org.apache.log4j.rollingFileAppender (eine neue Datei wird generiert, wenn die Dateigröße die angegebene Größe erreicht)
5) .org.apache.log4j.WriterAppender (Senden Sie Protokollinformationen im Stream -Format an einen bestimmten Ort)
(1). KonsoleAppender -Option
(2) .FileAppender -Optionen
(3) .DailyRollingFileAppender Option
Das heißt, das entsprechende Format lautet wie folgt:
1) '.' Yyyy-mm: monatlich
2) '.' Yyyy-ww: Weekly
3) '.' Yyyy-MM-DD: Jeden Tag
4) '.' Yyyy-mm-dd-a: zweimal am Tag
5) '.' Yyyy-mm-dd-hh: stündlich
6) '.' Yyyy-mm-dd-hh-mm: pro Minute
4. RollingFileAppender -Optionen
2.4.3 Format (Layout) Layout
Manchmal möchte ich meine eigene Protokollausgabe gemäß meinen Vorlieben formatieren. LOG4J kann ein Layout hinter dem Appender anhängen, um diese Funktion auszuführen.
Konfigurieren Sie das Layout, seine Syntax wird ausgedrückt als:
log4j.appender.appendername.layout = vollständig
Das Layout bietet wie folgt vier Log -Ausgabestile:
(1) .org.apache.log4j.htmllayout (Layout in HTML -Tabellenformular),
(2) .org.apache.log4j.patternLayout (der Layoutmodus kann flexibel angegeben werden),
(3) .org.apache.log4j.Implelayout (enthält die Ebene und Informationszeichenfolge von Protokollinformationen),
(4) .org.apache.log4j.ttcclayout (einschließlich Protokollgenerierungszeit, Thread, Kategorie usw. Informationen)
Htmllayout -Optionen
LocationInfo = true: Der Standardwert ist falsch, geben Sie den Java -Dateinamen und die Zeilennummer aus
Titel = meine App -Datei: Der Standardwert ist log4J -Protokollnachrichten.
2. Musterlayout -Optionen
ConversionSpattern =%M%N: Gibt an, wie die angegebene Nachricht formatiert wird.
Was hier erklärt werden muss, ist die Bedeutung mehrerer Symbole im Protokollinformat:
Modifikatoren können zwischen % und Muster Zeichen hinzugefügt werden, um ihre minimale Breite, maximale Breite und Textausrichtung zu kontrollieren. wie:
1)%20c: Geben Sie den Namen der Ausgangskategorie an, die Mindestbreite 20. Wenn der Name der Kategorie weniger als 20 beträgt, wird sie standardmäßig rechts ausgerichtet.
2)%-20c: Gibt den Namen der Ausgangskategorie an, die minimale Breite 20. Wenn der Name der Kategorie weniger als 20 beträgt, gibt das "-" -Steichen die linke Ausrichtung an.
3)%. 30c: Geben Sie den Namen der Ausgangskategorie an. Die maximale Breite beträgt 30. Wenn der Name der Kategorie größer als 30 ist, werden die zusätzlichen Zeichen auf der linken Seite abgeschnitten, aber wenn sie weniger als 30 sind, gibt es keine Leerzeichen.
4)%20.30c: Wenn der Name der Kategorie weniger als 20 ist, füllen Sie den Raum aus und richten Sie ihn richtig aus. Wenn sein Name länger als 30 Zeichen ist, schneiden Sie die zusätzlichen Zeichen links ab.
2.5.Log4j -Konfigurationsbeispiel
Durch die Einfachheit der Log4J -Konfiguration wird sie über immer mehr Anwendungen verteilt: Log4J -Konfigurationsdateien implementieren einen vollständigen Satz von Funktionen wie Ausgabe an die Konsole, Dateien, Rollback -Dateien, Senden von Protokollpost, Ausgabe an Datenbank -Log -Tabellen und benutzerdefinierte Tags.
log4j.rootlogger = debug, console, a1, im log4j.addivity.org.apache = true
n Bewerben Sie sich für die Konsole
log4j.appender.console = org.apache.log4j.conSeAppenderLog4j.appender.Threshold = Debug log4j.appender.console.target = system.outlog4j.appender.console.layout = org.apache.log4j.Patterlayout log4j.appender.console.layout.ConversionPattern =%d-%c-%-4r [%t]%-5p%c%x-%m%n
n Bewerben Sie sich für Dateien
log4j.appender.file = org.apache.log4j.fileAppenderLog4j.appender.file.file = file.loglog4j.appender.file.append = falselog4j.appender.file.layout = org.apache.log4j.patterlayoutlog4j.appender.file.Layout.PatterlayoUtlog4J.Appendel.file.Layout.PatterlayoutPlog4j.Appendel.file.Layout.Layout.LayoutPlogs.Layout.Layout.LAYUTPUTPLE - %c - % -4r [ %t] %-5p %c %x - %m %n
n Bewerben Sie sich für den Datei -Rollback
log4j.appender.rolling_file = org.apache.log4j.rollingFileAppenderLog4j.appender.rolling_file.Threshold = errorLog4j.appender.rolling_file.file Ender.rolling_file.maxFileSize = 10kblog4j.appender.rolling_file %-5p %c %x - %m %n
n auf Socket beantragen
log4j.appender.socket = org.apache.log4j.rollingFileAppenderLog4j.appender.socket.remotehost = localhost log4j.appender.socket.port = 5001Log4j.appender.socket.locationInfo = true log4j.appender.SOCKET.layout=org.apache.log4j.PatternLayoutlog4j.appender.SOCET.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD]%n%c[CATEGORY]%n%m[MESSAGE]%n%n%n# Log Factor 5 Appender log4j.appender.lf5_appender = org.apache.log4j.lf5.lf5appender log4j.appender.lf5_appender.maxNumberofRecords = 2000n An Protokolle an E -Mail senden
log4j.appender.mail = org.apache.log4j.net.smtpappenderLog4j.appender.mail.threshold = fatallog4j.appender.mail.buffersize = 10Log4j.appender.mail.from=web@www.wuset.comlog4j.appender.mail.smtphost=www.wusetu.comlog4j.appender.mail.subject=log4J Message log4j.appender.MAIL.To=web@www.wusetu.comlog4j.appender.MAIL.layout=org.apache.log4j.PatternLayout log4j.appender.MAIL.layout.ConversionPattern=%d-%c-%-4r[%t]%-5p%c%x-%m%n
n für Datenbank
log4j.appender.database = org.apache.log4j.jdbc.jdbcappenderLog4j.appender.database.url = jdbc: mysql: // localhost: 3306/testlog4j.appender.database.driver = comysql.jdbc.driver log4j.appender.database.user = rootLog4j.appender.database.password = log4j.appender.database.sql = in log4j (message) Werte einfügen (' %d - %c - % -4R [ %t] %-5p %c %x - %M %n ') log4j.appender.database.layout = org.apache.log4j.patternLayout log4j.appender.database.layout.ConversionPattern =%d-%c-%-4r [%t]%-5p%c%x-%m%nLog4j.appender log4j.appender.a1.datepattern = yyyymmddhh'.log4j'log4j.appender.a1.layout = org.apache.log4j.xml.xmllayoutn benutzerdefinierte Appender
log4j.appender.im = net.cybercorlin.util.logger.appender.imappenderLog4j.appender.im.host = mail.cybercorlin.net log4j.appender.im.username = userername log4j.appender.im.password = password = kennwort log4j.appender.recispient = [email protected]=org.apache.log4j.PatternLayoutlog4j.appender.im.layout.ConversionPattern =[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
3. Konfigurieren Sie log4j für Spring in der Webanwendung
Zunächst müssen Sie der Datei web.xml die folgende Konfigurationsanweisung hinzufügen:
<!-- To avoid conflicts between projects, define a unique webAppRootKey--> <context-param> <param-name>webAppRootKey</param-name> <param-value>myProject.root</param-value> </context-param> <!-- Load the configuration file log4j.properties --> <context-param> <param-name>log4jConfigLocation</param-name> <Param-value> /web-inf/classes/config/log4j/log4j.properties </param-value> </context-param> <!-Legen Sie das Zeitintervall für das Aktualisieren der Protokollkonfigurationsdatei fest, hier auf 60er- <param-value> 60000 </param-value> </context-param> <!-Laden Sie den LOG4J-Listener im Spring Framework log4jconfiglistener-> <hörer> <Listener-Class> org.springFramework.web.util.loG4jconFiglistener </listener-classe> </listener-classe> </listener-classe> </listener-classe> </listener-classe> </listener-klasse>
Es wird empfohlen, den Wert der Eigenschaft log4JConfigLocation auf: /web-inf/classes/log4j.properties festzulegen, damit wir bei einigen Tests Protokollinformationen korrekt aufzeichnen können, wenn wir die Webanwendung nicht starten. Log4jconfiglistener ist eine von Spring bereitgestellte Werkzeugklasse. Es öffnet einen Log4J -Überwachungs -Thread und erkennt alle 60 Sekunden lang Protokollkonfigurationsänderungen (log4jreFreshInterval -Variable -Definition), sodass der Webdienst nicht jedes Mal neu gestartet werden muss, um die neue Konfiguration anzuwenden. In Tomcat werden keine Systemeigenschaften basierend auf Webanwendungen getrennt. Daher muss für jede Webanwendung ein einzigartiger "WebaPootKey" definiert werden, und wir haben es WebApp.root benannt. Nach dem Start der Umgebung wird log4JConfigListener den Wert in die Variable webapp.root injiziert.
4. Verwenden Sie log4j im Code
4.1. Holen Sie sich den Rekorder
Mit Log4J besteht der erste Schritt darin, einen Protokollrekorder zu erhalten, der für die Steuerung der Protokollinformationen verantwortlich ist.
öffentlicher statischer Logger getLogger (String -Name)
Holen Sie sich den Logger nach dem angegebenen Namen und erstellen Sie bei Bedarf einen neuen Protokoll für den Namen. Der Name wird in dieser Klasse allgemein benannt, wie beispielsweise:
statischer Logger logger = logger.getLogger (serverwithlog4j.class.getname ())
4.2. Lesen Sie die Konfigurationsdatei
Nach dem Erhalt des Loggers konfiguriert der zweite Schritt die Log4J -Umgebung mit der Syntax als:
Wenn Sie log4j.properties im Stammverzeichnis des Projekts platzieren, können Sie diesen Satz auch nicht schreiben, und das Programm findet automatisch die Konfigurationsdatei.
BasicConfigurator.Configure (): Automatisch und schnell die Standard -Log4J -Umgebung verwenden. PropertyConfigurator.configure (String configFileName): Lesen Konfigurationsdateien mit den Feature -Dateien von Java.
DomConfigurator.Configure (String -Dateiname): Konfigurationsdateien in XML -Formular lesen.
Log4J wird mit den oben genannten 3 Konfiguratoren initialisiert, und die Verwendung von PropertyConfigurator ist für alle Systeme geeignet. Die folgende Erklärung.
PropertyConfigurator.Configure ("log4j.properties");Für das allgemeine Java -Projekt kann log4j ohne die obige Anweisung initialisiert werden. LOG4J ermittelt die Konfigurationsdatei unter ClassPath automatisch und initialisieren sie. Wenn log4j die Konfigurationsdatei nicht automatisch initialisieren kann, muss die obige Methode initialisiert werden.
Hinweis: Beim Initialisieren der Konfigurationsdatei ist es am besten, sie nur einmal auszuführen, wenn das System startet. Wenn es mehrmals ausgeführt wird, ist einer eine Verschwendung von Ressourcen, und der andere ist, dass für die alte Version von LOG4J Probleme bei der Verwendung von DailyrollingFileAppender auftreten können.
4.3. Datensatzinformationen einfügen (Formatprotokollinformationen)
Wenn die beiden vorangegangenen erforderlichen Schritte ausgeführt werden, können Sie die Protokollierungsanweisungen unterschiedlicher Prioritätsniveaus überall einfügen, wo Sie protokollieren möchten. Die Syntax ist wie folgt:
Logger.debug (Objektnachricht);