Zusammensetzung der Log4j-Komponente
Log4j besteht aus drei wichtigen Komponenten:
1. Priorität der Protokollinformationen (Logger)
2. Das Ausgabeziel der Protokollinformationen (Appender)
3. Ausgabeformat (Layout) der Protokollinformationen.
Zusammenfassung:
Zu den Prioritäten der Protokollinformationen von hoch nach niedrig gehören ERROR, WARN, INFO und DEBUG, die jeweils zur Angabe der Wichtigkeit dieser Protokollinformationen verwendet werden.
Das Ausgabeziel der Protokollinformationen gibt an, ob das Protokoll auf der Konsole oder in einer Datei gedruckt wird.
Das Ausgabeformat steuert den Anzeigeinhalt der Protokollinformationen.
Log4j-Einführung
Log4j ist ein Open-Source-Projekt von Apache. Durch die Verwendung von Log4j können wir das Ziel der Protokollinformationsübertragung an Konsolen, Dateien, GUI-Komponenten und sogar Socket-Server, NT-Ereignisrekorder, UNIX-Syslog-Daemons usw. steuern Durch die Definition der Ebene der einzelnen Protokollinformationen können wir den Protokollgenerierungsprozess detaillierter steuern. log4j – Protokoll für Java (Java-Protokoll).
Log4j-Download-Adresse: http://logging.apache.org/log4j/2.x/download.html
Log4j-Konfigurationsdateiformat
Log4j unterstützt zwei Konfigurationsdateiformate:
1. Dateien im XML-Format
2. Dateien im Eigenschaftenformat
Sie können die Konfigurationsdatei auch gar nicht verwenden, sondern die Log4j-Umgebung im Code konfigurieren. Durch die Verwendung von Konfigurationsdateien wird Ihre Anwendung jedoch flexibler.
Log4j-Definitionskonfigurationsdatei
1. Konfigurieren Sie den Root-Logger
Seine Syntax ist:
Parameterbeschreibung:
level ist die Priorität der Protokollierung, die in OFF, FATAL, ERROR, WARN, INFO, DEBUG, ALL oder die von Ihnen definierte Ebene unterteilt ist.
Aus: Die höchste Stufe, mit der die gesamte Protokollierung ausgeschaltet wird
Schwerwiegend: Gibt an, dass jedes schwerwiegende Fehlerereignis zum Beenden der Anwendung führt.
Fehler: Zeigt an, dass ein Fehlerereignis zwar auftritt, sich jedoch nicht auf den weiteren Betrieb des Systems auswirkt.
Warnung: Zeigt an, dass eine potenzielle Fehlersituation auftreten wird
Info: Wird im Allgemeinen auf einer grobkörnigen Ebene verwendet und betont den gesamten laufenden Prozess der Anwendung
Debuggen: Im Allgemeinen und auf einer grobkörnigen Ebene, wobei der gesamte laufende Prozess der Anwendung im Vordergrund steht.
Alle: Die niedrigste Ebene, mit der die gesamte Protokollierung aktiviert wird.
Log4j empfiehlt die Verwendung von nur vier Ebenen. Die Prioritäten von hoch nach niedrig sind ERROR, WARN, INFO und DEBUG. Über die hier definierten Ebenen können Sie das Ein- und Ausschalten der entsprechenden Protokollinformationsebene in der Anwendung steuern.
appenderName bezieht sich auf den Ort, an dem die Protokollinformationen ausgegeben werden, und es können mehrere Ausgabeziele gleichzeitig angegeben werden.
2. Konfigurieren Sie den Appender für die Ausgabe der Protokollinformationen
Seine Syntax ist:
log4j.appender.appenderName.option1 = Wert1
...
log4j.appender.appenderName.option = valueN
org.apache.log4j.ConsoleAppender(Konsole)
org.apache.log4j.FileAppender(Datei)
org.apache.log4j.DailyRollingFileAppender (erzeugt jeden Tag eine Protokolldatei)
org.apache.log4j.RollingFileAppender (erzeugt eine neue Datei, wenn die Dateigröße die angegebene Größe erreicht)
org.apache.log4j.WriterAppender (sendet Protokollinformationen im Streaming-Format an einen beliebigen angegebenen Ort)
3. Konfigurieren Sie das Format der Protokollinformationen
Die Syntax lautet:
log4j.appender.appenderName.layout.option1 = value1 …
log4j.appender.appenderName.layout.option = valueN
org.apache.log4j.HTMLLayout (Layout im HTML-Tabellenformat),
org.apache.log4j.PatternLayout (kann Layoutmuster flexibel angeben),
org.apache.log4j.SimpleLayout (enthält die Ebene und Informationszeichenfolge der Protokollinformationen),
org.apache.log4j.TTCCLayout (enthält Protokollgenerierungszeit, Thread, Kategorie usw. Informationen)
Log4J verwendet ein Druckformat, das der printf-Funktion in der C-Sprache ähnelt, um Protokollinformationen zu formatieren. Die Druckparameter sind wie folgt:
%mGibt die im Code angegebene Nachricht aus
%p Ausgabepriorität, nämlich DEBUG, INFO, WARN, ERROR, FATAL
%r gibt die Anzahl der Millisekunden aus, die vom Start der Anwendung bis zur Ausgabe der Protokollinformationen gedauert haben.
%c gibt die Kategorie aus, zu der es gehört, normalerweise den vollständigen Namen der Klasse.
%tGeben Sie den Namen des Threads aus, der das Protokollereignis generiert hat
%n gibt ein Wagenrücklauf- und Zeilenvorschubzeichen aus, das auf der Windows-Plattform „rn“ und auf der Unix-Plattform „n“ ist.
%d gibt das Datum oder die Uhrzeit des Protokollzeitpunkts aus. Das Standardformat ist auch nachträglich möglich, z. B.: %d{yyyMMMddHH:mm:ss,SSS}. 2002 22:10 :28.921
%l Gibt den Ort aus, an dem das Protokollereignis aufgetreten ist, einschließlich des Kategorienamens, des Threads, in dem es aufgetreten ist, und der Zeilennummer im Code. Beispiel: Testlog4.main(TestLog4.java:10)
%x: Gibt die NDC (verschachtelte Diagnoseumgebung) aus, die dem aktuellen Thread zugeordnet ist und insbesondere in Multi-Client- und Multi-Thread-Anwendungen wie Javaservlets verwendet wird.
%%: Geben Sie ein „%“-Zeichen aus. %F: Geben Sie den Dateinamen aus, in dem die Protokollmeldung generiert wird
%L: Zeilennummer im Ausgabecode
%m: Geben Sie die im Code angegebene Nachricht und die generierten spezifischen Protokollinformationen aus
%n: Gibt ein Wagenrücklauf- und Zeilenvorschubzeichen aus, das auf der Windows-Plattform „/r/n“ und auf der Unix-Plattform „/n“ ist. Bei der Ausgabe von Protokollinformationen können Sie Modifikatoren zwischen % und dem Moduszeichen hinzufügen Steuern Sie die minimale und maximale Breite sowie die Textausrichtung.
wie:
1)%20c: Geben Sie den Namen der Ausgabekategorie an. Die Mindestbreite beträgt 20. Wenn der Kategoriename kleiner als 20 ist, wird er standardmäßig rechtsbündig ausgerichtet.
2) %-20c: Geben Sie den Namen der Ausgabekategorie an. Die Mindestbreite beträgt 20. Wenn der Kategoriename kleiner als 20 ist, gibt das „-“-Zeichen die Linksausrichtung an.
3)%.30c: Geben Sie den Namen der Ausgabekategorie an. Die maximale Breite beträgt 30. Wenn der Kategoriename größer als 30 ist, werden die zusätzlichen Zeichen auf der linken Seite abgeschnitten, wenn er jedoch weniger als 30 beträgt keine Leerzeichen sein.
4)%20.30c: Wenn der Kategoriename weniger als 20 Zeichen umfasst, füllen Sie Leerzeichen aus und richten Sie ihn rechtsbündig aus. Wenn der Name länger als 30 Zeichen ist, schneiden Sie die Zeichen auf der linken Seite ab.
Konfigurationsmethode von log4j.xml
<?xml version="1.0"kodierung="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="appender1"
>
<param name="File" value="logfile08.html" />
<param name="MaxFileSize" value="1MB" />
<param name="MaxBackupIndex" value="5" />
<Layout>
</layout>
</appender>
<root>
<level value="debug" />
<appender-ref ref="appender1" />
</root>
</log4j:configuration>
Bevor Sie Log4j im Programm verwenden, importieren Sie zunächst commons-logging.jar und logging-log4j-1.2.9.jar in den Klassenpfad und legen Sie log4j.properties im src-Stammverzeichnis ab. Um log4j in einer Klasse zu verwenden, deklarieren Sie zunächst eine statische Variable Loggerlogger=Logger.getLog("classname") Es kann jetzt verwendet werden.
Die Verwendung ist wie folgt: logger.debug("debugmessage") oder logger.info("infomessage").
1. Holen Sie sich den Logger
Bei Verwendung von Log4j besteht der erste Schritt darin, einen Logger zu erhalten, der für die Steuerung der Protokollinformationen verantwortlich ist.
Seine Syntax ist:
publicstaticLoggergetLogger(Stringname)
Ruft den Logger mit dem angegebenen Namen ab und erstellt bei Bedarf einen neuen Logger für diesen Namen. Name nimmt im Allgemeinen den Namen dieser Klasse an, z. B.:
staticLoggerlogger=Logger.getLogger(ServerWithLog4j.class.getName())
2. Lesen Sie die Konfigurationsdatei
Nach Erhalt des Loggers besteht der zweite Schritt darin, die Log4j-Umgebung zu konfigurieren. Die Syntax lautet:
BasicConfigurator.configure(): Automatische und schnelle Verwendung der Standard-Log4j-Umgebung.
PropertyConfigurator.configure(StringconfigFilename): Liest die mit der Java-Eigenschaftendatei geschriebene Konfigurationsdatei.
DOMConfigurator.configure(Stringfilename): Lesen Sie die Konfigurationsdatei im XML-Format.
3. Datensatzinformationen einfügen (formatierte Protokollinformationen)
Wenn die oben genannten zwei notwendigen Schritte abgeschlossen sind, können Sie problemlos Protokollierungsanweisungen mit unterschiedlichen Prioritäten an der gewünschten Stelle einfügen. Die Syntax lautet wie folgt:
Logger.debug(Objectmessage);
Logger.info(Objectmessage);
Logger.warn(Objectmessage);
Logger.error(Objectmessage);
Programmdemonstration
1. Verwenden Sie ein Programm, um Protokollinformationen auszugeben
import java.io.IOException;
import org.apache.commons.logging.impl.Log4JLogger;
import org.apache.log4j.BasicConfigurator;
import org.apache.log4j.FileAppender;
import org.apache.log4j.Layout;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.SimpleLayout;
/**
*
* @Version: 1.1
*
* @Autor: Su Ruonian<a href="mailto:[email protected]">E-Mail senden</a>
*
* @since: 1.0 Erstellungszeit: 1.1.2013 15:19:42 Uhr
*
* @function: Geben Sie das Protokoll über Code aus
*
*/
öffentliche Klasse Log4jPrintByCode {
privater statischer Logger logger = Logger.getLogger(Log4jPrintByCode.class);
privates Layout-Layout = new SimpleLayout();
privater FileAppender fileAppender;
//Konstruktionsabhängigkeiten verwenden und beim Erstellen von Objekten initialisieren
public Log4jPrintByCode(Layout-Layout, Level-Level,String distDir){
BasicConfigurator.configure(); //Standardkonfigurationsinformationen verwenden, log4j.properties muss nicht geschrieben werden
versuchen {
init(layout,level, distDir);
} Catch (Ausnahme e) {
e.printStackTrace();
}
}
public void init(Layout-Layout, Level-Ebene,String distDir) löst eine Ausnahme aus{
logger.setLevel(level); //Legen Sie die Protokollausgabeebene fest
fileAppender = new FileAppender(layout,distDir,false);
logger.addAppender(fileAppender); //Ausgabeterminal hinzufügen
}
public static void main(String[] args) {
SimpleLayout-Layout = new SimpleLayout();
String logDir = "log4jcode.Log";
Log4jPrintByCode log4jCode = new Log4jPrintByCode(layout,Level.INFO,logDir);
//Die folgenden Informationen werden ausgegeben
log4jCode.logger.info("Protokollinformationen drucken von log4j");
log4jCode.logger.warn("log warn print by log4j");
log4jCode.logger.error("Protokollfehler drucken von log4j");
}
öffentliches Layout getLayout() {
Rückgabelayout;
}
public void setLayout(Layout-Layout) {
this.layout = Layout;
}
public FileAppender getFileAppender() {
return fileAppender;
}
public void setFileAppender(FileAppender fileAppender) {
this.fileAppender = fileAppender;
}
}
// Informationen auf Infoebene aufzeichnen
if (logger.isInfoEnabled()) {
logger.info("Dies ist eine Infonachricht von Dao.");
}
2.Log4J gibt dieselben Protokollinformationen an mehrere Ziele aus
/* Datenbank wechseln */
benutze db_log4j;
/* Protokollinformationstabelle */
Tabelle tb_log( erstellen
logId int nicht null auto_increment Kommentar 'Seriennummer',
createDate varchar(45) Standard-Nullkommentar „Zeit der Protokollgenerierung“,
Thread varchar(45) Standard-Null-Kommentar „aktueller Thread“,
Level varchar(45) Standard-Null-Kommentar „Aktuelle Protokollebene“,
Klasse varchar(45) Standard-Nullkommentar „Protokollklasse generieren“,
Nachricht varchar(245) Standard-Null-Kommentar „Protokollspezifische Informationen“,
Primärschlüssel (logId)
);
Die Anwendungsinstanz gibt Protokollinformationen gleichzeitig an die Konsole, Datei und Datenbank aus.
Erstellen Sie Datenbanken und Tabellen
/* Datenbank wechseln */
benutze db_log4j;
/* Protokollinformationstabelle */
Tabelle tb_log( erstellen
logId int nicht null auto_increment Kommentar 'Seriennummer',
createDate varchar(45) Standard-Nullkommentar „Zeit der Protokollgenerierung“,
Thread varchar(45) Standard-Null-Kommentar „aktueller Thread“,
Level varchar(45) Standard-Null-Kommentar „Aktuelle Protokollebene“,
Klasse varchar(45) Standard-Nullkommentar „Protokollklasse generieren“,
Nachricht varchar(245) Standard-Null-Kommentar „Protokollspezifische Informationen“,
Primärschlüssel (logId)
);
#Definieren Sie den A1-Ausgang zum Controller
log4j.appender.A1=org.apache.log4j.ConsoleAppender
#Definieren Sie den Layoutmodus von A1 als PaternLayout
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
# Definieren Sie das Ausgabeformat von A1
log4j.appender.A1.layout.ConversionPattern=%4p [%t] (%F:%L) - %m%n
#A2-Ausgabe in Datei definieren
log4j.appender.A2=org.apache.log4j.RollingFileAppender
#Definieren Sie, in welche Datei A2 ausgibt
log4j.appender.A2.File=./log/sysLog.log
#Definieren Sie die maximale Länge der A2-Ausgabedatei
log4j.appender.A2.MaxFileSize = 1 KB
#Definieren Sie die Anzahl der Sicherungsdateien für A2
log4j.appender.A2.MaxBackupIndex = 3
#Definieren Sie den Layoutmodus von A2 als PatternLayout
log4j.appender.A2.layout=org.apache.log4j.PatternLayout
#Definieren Sie den Ausgabemodus von A2
log4j.appender.A2.layout.ConversionPattern=%d{yyyy-MM-dd hh:mm:ss}:%p %t %c - %m%n
#A3-Ausgabe in die Datenbank definieren
log4j.appender.A3=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.A3.URL=jdbc:mysql://localhost:3306/db_log4j
log4j.appender.A3.driver=com.mysql.jdbc.Driver
log4j.appender.A3.user=root
log4j.appender.A3.password=root
#Definieren Sie das Layout von A3 und die ausgeführten SQL-Anweisungen
log4j.appender.A3.layout=org.apache.log4j.PatternLayout
log4j.appender.A3.layout.ConversionPattern=INSERT INTO tb_log(createDate,thread,level,class,message) Values('%d','%t','%-5p','%c','%m ')
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
/**
*
* @Version: 1.1
*
* @Autor: Su Ruonian<a href="mailto:[email protected]">E-Mail senden</a>
*
* @since: 1.0 Erstellungszeit: 1.1.2013 16:13:59 Uhr
*
* @function: Steuern Sie die Ausgabe von Protokollinformationen an mehrere Ziele über Konfigurationsdateien
*
*/
öffentliche Klasse Log4jPrintByConfigure {
private static Logger logger = Logger.getLogger(Log4jPrintByConfigure.class);
public static void main(String[] args) löst eine Ausnahme aus {
//Laden Sie die Protokollkonfigurationsdatei log4j.properties
PropertyConfigurator.configure("configure/log4j.properties");//Die Datei wird im Konfigurationsordner im selben Verzeichnis wie src gespeichert
//Wenn unter src platziert, sollten die Parameter „bin/log4j.properties“ oder „src/log4j.properties“ lauten. Es wird empfohlen, bin als Standard zu verwenden.
//Die folgenden Informationen werden ausgedruckt
logger.debug("logger print DEBUG message");
logger.info("logger print INFO message");
logger.warn("logger druckt WARN-Nachricht");
logger.error("logger print ERROR message");
logger.fatal("Hier ist eine FATAL-Nachricht");
}
}