Ich habe versucht, Log4j2 auf einem Java EE-Server zu verwenden

Über die Umwelt

Die Umgebung ist dieselbe wie in dem Artikel, den ich zuvor geschrieben habe. Vorbereiten der Ausführungsumgebung von Tomcat in der IntelliJ Community

Um es grob zusammenzufassen, sieht es wie folgt aus.

Art Software
Sprache Java SE 8
Server-API JavaEE
Log API Log4j2
IDE IntelliJ Community
Werkzeug erstellen Gradle
Container Tomcat

Erstellen Sie einen Webapp-Ordner

Wenn es sich um ein JavaEE-Projekt handelt, wurde es möglicherweise bereits erstellt. Erstellen Sie jedoch ein Verzeichnis wie folgt. -> src-> main-> webapp () -> WEB-INF () (*) Verzeichnis zum Erstellen Stellen wir außerdem die Verzeichnisse richtig auf "webapp" und "WEB-INF" ein.

Erstellen Sie außerdem die Verzeichnisse "classes" und "lib" in WEB-INF.

Log4j2 zum Projekt hinzugefügt

Fügen Sie den Abhängigkeiten von build.gradle Folgendes hinzu.

dependencies {
    //Log4j verfügbar machen
    compile group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.11.1'
    compile group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.11.1'
    compile group: 'org.apache.logging.log4j', name: 'log4j-web', version: '2.11.1'
}

Erstellen Sie eine Logger-Klasse

Wenn Sie ein Protokoll schreiben, ist es schwierig, den vorbereitenden Code jedes Mal zu schreiben. Erstellen Sie daher eine Wrap-Klasse wie folgt. Für den Code habe ich auf den unten stehenden Link verwiesen. Spring MVC kleiner Durchmesser, kleiner Umweg, Protokollierung kleiner Durchmesser

import org.apache.logging.log4j.LogManager;

import java.io.File;

/**
 *Führen Sie den Protokollierungsprozess durch
 */
public class Log4j {

    private static Log4j logger = null;

    private Log4j() {
    }

    public static synchronized Log4j getInstance() {
        if (logger == null) {
            logger = new Log4j();
        }
        return logger;
    }

    private String getMessage(final String msg) {
        String thisClassName = this.getClass().getName();
        //Klassennamen abrufen
        String SuperClassName = Logger.class.getName();
        Thread t = Thread.currentThread();
        StackTraceElement[] stackTraceElements = t.getStackTrace();
        int pos = 0;
        for (StackTraceElement stackTraceElement : stackTraceElements) {
            String steClassName = stackTraceElement.getClassName();
            if (thisClassName.equals(steClassName) || SuperClassName.equals(steClassName)){
                break;
            }
            pos++;
        }
        pos += 2;
        StackTraceElement m = stackTraceElements[pos];
        return m.getClassName() + ":" + m.getMethodName() + "() \n" + msg;
    }

    private String getErrorMessage(final Exception e) {
        StringBuilder sb = new StringBuilder();
        StackTraceElement[] st = e.getStackTrace();
        if (st != null && st.length > 0) {
            sb.append("Class:")
                    .append(e.getClass().getName())
                    .append("¥n")
                    .append("Detail:")
                    .append(e.getMessage())
                    .append("¥n");
            for (StackTraceElement s : st) {
                sb.append(s.toString())
                        .append("¥n");
            }
        }
        return sb.toString();
    }

    public void debug(final String msg) {
        LogManager.getLogger(this.getClass()).debug(getMessage(msg));
    }

    public void info(final String msg) {
        LogManager.getLogger(this.getClass()).info(getMessage(msg));
    }

    public void info(final Object obj, final String msg) {
        LogManager.getLogger(obj.getClass()).info(msg);
    }
    public void warn(final String msg) {
        LogManager.getLogger(this.getClass()).warn(getMessage(msg));
    }

    public void error(final Exception e) {
        LogManager.getLogger(e.getClass()).error(getErrorMessage(e));
    }

    public void trace(final String msg) {
        LogManager.getLogger(this.getClass()).trace(getMessage(msg));
    }

    public void fatal(final String msg) {
        LogManager.getLogger(this.getClass()).fatal(getMessage(msg));
    }
}

Rufen Sie in EndPoint Folgendes auf und verwenden Sie es wie folgt.

Log4j logger = Log4j.getInstance();
logger.info("Schreiben Sie hier den Protokollinhalt");

Die folgenden Protokollebenen werden in log4j vorbereitet, und die Wrap-Methode wird entsprechend definiert.

fatal > error > warn > info > debug > trace

Gründliche Erklärung zu Log4J

Erstellen Sie die log4j2-Konfigurationsdatei

Die log4j2-Konfigurationsdatei wird in einer XML-Datei mit dem Namen "log4j2.xml" beschrieben. In Tomcat können Sie es auch automatisch laden, indem Sie es in den Ordner webapp-> WEB-INF-> classes legen. Hier ist ein Beispiel für das Ausfüllen von log4j2.xml.

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="off">

    <Properties>
        <Property name="loglayout">[%d{yyyy-MM-dd HH:mm:ss.SSS}], %-5p, %t, %c, %m%n</Property>
    </Properties>

    <Appenders>
        <!--
            fileName:Dateiname zur Ausgabe des Protokolls
            filePattern:Muster der Dateien, die komprimiert werden sollen, wenn Protokolle gesammelt werden
        -->
        <RollingFile name="rolling" fileName="./log/webapp.log" filePattern="./log/webapp-%d{yyyy-MM-dd}-%i.zip">
            <PatternLayout pattern="${loglayout}"/>
            <Policies>
                <OnStartupTriggeringPolicy/>
                <SizeBasedTriggeringPolicy size="20 MB"/>
                <TimeBasedTriggeringPolicy/>
            </Policies>
            <DefaultRolloverStrategy max="10"/>
        </RollingFile>
        <Console name="console" target="SYSTEM_OUT">
            <PatternLayout pattern="${ptn}" />
        </Console>
    </Appenders>

    <Loggers>
        <!--
            name:Paketname für die Protokollausgabe
            level:Protokollausgangspegel
            additivity:Gibt an, ob das obere Protokoll ausgegeben werden soll
        -->
        <Logger name="Logger" level="info" additivity="true">
            <AppenderRef ref="rolling"/>
        </Logger>
    </Loggers>
</Configuration>

Weitere Informationen finden Sie unter den folgenden Links.

Protokollausgabe mit Log4j2

Ändern Sie den Dateipfad, wenn es zu einem Krieg wird

Im Gradle-Projekt befindet sich der relative Pfad direkt unter dem Projekt, also das Dateiverzeichnis . -> log In Tomcat ist das Stammverzeichnis des relativen Pfads jedoch der Tomcat-Installationsordner .-> webapps-> -> WEB-INF-> log Muss sein. Es schien eine Möglichkeit zu geben, es in XML anzugeben. log4j2.xml // Für die Entwicklung log4j2_exe.xml // Für die Produktion Nur wenn dies ein Krieg ist log4j2_test.xml // Für die Entwicklung log4j2.xml // Für die Produktion Es entsprach durch Änderung des Namens in.

Fügen Sie build.gradle den folgenden Code hinzu.

//laufen, bevor die Kriegsaufgabe ausgeführt wird
war.doFirst {
    //Kinderdatei abrufen
    java.io.File[] flist = (new java.io.File("./src/main/webapp/WEB-INF/classes")).listFiles();
    for(i in flist) {
        //Beurteilung des Dateinamens
        switch (i.getName()) {
            case "log4j2.xml":
                //umbenennen
                i.renameTo(new java.io.File("./src/main/webapp/WEB-INF/classes/log4j2_test.xml"));
                break;

            case "log4j2_exe.xml":
                i.renameTo(new java.io.File("./src/main/webapp/WEB-INF/classes/log4j2.xml"));
                break;
        }
    }
}

//Nach Ausführung der Kriegsaufgabe ausführen
war.doLast {
    java.io.File[] flist = (new java.io.File("./src/main/webapp/WEB-INF/classes")).listFiles();
    for(i in flist) {
        switch (i.getName()) {
            case "log4j2_test.xml":
                i.renameTo(new java.io.File("./src/main/webapp/WEB-INF/classes/log4j2.xml"));
                break;

            case "log4j2.xml":
                i.renameTo(new java.io.File("./src/main/webapp/WEB-INF/classes/log4j2_exe.xml"));
                break;
        }
    }
}

Problem

Beim Erstellen einer Datei für jede Ausführung von Kriegsaufgaben erkennt git diese nicht als Verwaltungsdatei -> Einstellungen sollten in einer XML vorgenommen werden

Recommended Posts

Ich habe versucht, Log4j2 auf einem Java EE-Server zu verwenden
Ich habe versucht, einen Server mit Netty zu implementieren
Ich habe versucht, Java in einem Mac-Terminal auszuführen
Ich habe versucht, Java REPL zu verwenden
Ich habe versucht, ein Aktienchart mit Java (Jsoup) zu kratzen.
Ich habe eine Java EE-Umgebung auf AWS erstellt und versucht, eine Webanwendung auszuführen
Ich habe versucht, die Java8 Stream API zu verwenden
Ich habe versucht, JWT in Java zu verwenden
Ich habe versucht, Java Memo LocalDate zu verwenden
Ich habe versucht, Google HttpClient von Java zu verwenden
Ich habe versucht, das GitHub-Repository als Bibliotheksserver zu verwenden
Ich habe versucht, die Elasticsearch-API in Java zu verwenden
Ich habe versucht, OpenCV mit Java + Tomcat zu verwenden
Ich habe versucht, den Kalender mit Java auf der Eclipse-Konsole anzuzeigen.
Ich habe versucht, mit AI "A3RT" eine Talk-App in Java zu erstellen.
Ich habe versucht, Junit mit Mac VScode Maven zu verwenden
Ich habe versucht, Java einfach auf meinen Mac zu bringen
Java Ich habe versucht, einen einfachen Block zu brechen
Ich habe versucht, eine Java-Methode von ABCL zu verwenden
Versuchen Sie die Kommunikation mit gRPC auf einem Android + Java-Server
Ich habe versucht, den Block mit Java zu brechen (1)
Ich habe versucht, Gson zu benutzen
Ich habe versucht, TestNG zu verwenden
Ich habe versucht, Galasa zu benutzen
[Java] Ich habe versucht, über den Verbindungspool eine Verbindung mit Servlet (Tomcat) & MySQL & Java herzustellen
Erstellen Sie eine Java-Entwicklungsumgebung mit jenv auf Ihrem Mac
Ich habe versucht, eine Datenbankverbindung in der Android-Entwicklung zu verwenden
Ich habe versucht, SQS mit AWS Java SDK zu betreiben
Ich habe versucht, eine Clova-Fähigkeit in Java zu erstellen
Ich habe versucht, eine Anmeldefunktion mit Java zu erstellen
Ich habe versucht, YOLO v4 unter Ubuntu und ROS zu verwenden
Ich habe versucht, mit OCR eine PDF-Datei mit Java zu verarbeiten
Verwenden der Datenbank (SQL Server 2014) aus einem Java-Programm 2018/01/04
Was ich beim Erstellen eines Servers in Java gelernt habe
Ich habe versucht, die erweiterte for-Anweisung in Java zu verwenden
Ich habe versucht, die DB-Zugriffsanwendung unter IKS + Db2 in IBM Cloud auszuführen (6. Vorbereitung der DB-Zugriffsanwendung (Java)).
Ich möchte es zusätzlich implementieren, während ich Kotlin auf einer Site verwende, auf der Java ausgeführt wird
Ich habe versucht, Azure Cloud-Init zu verwenden
Ich habe versucht, Apache Wicket zu verwenden
Machen Sie einen Diamanten mit Java
Ich habe versucht, Metaprogrammierung mit Java
Ich habe versucht, mit Chocolatey eine Java8-Entwicklungsumgebung zu erstellen
Ich habe versucht, TabLayout unter Android eine Trennlinie hinzuzufügen
Versuchen Sie, mit Helidon einen WebAP-Server auf dem Mikro zu starten
Ich habe versucht, in Java von einer Zeichenfolge in einen LocalDate-Typ zu konvertieren
Ich habe versucht, Dapr in Java zu verwenden, um die Entwicklung von Mikroservices zu erleichtern
Versuchen Sie Hello World mit einfachem Java im Docker-Container
Ich habe einen RESAS-API-Client in Java erstellt
Ich habe versucht, eine PDF-Datei mit Java part2 zu verarbeiten
Ich habe versucht, die CameraX-Bibliothek mit Android Java Fragment zu verwenden
Ich habe eine Docker-Datei erstellt, um Glassfish 5 mit Oracle Java zu starten
[Java] Ich habe versucht, ein Janken-Spiel zu erstellen, das Anfänger auf der Konsole ausführen können
Ich habe jetzt versucht, Anakia + Jing zu verwenden
Führen Sie die Java EE-Anwendung unter CICS aus
OSX 10.15 (Catalina) Verwenden von Java mit β