L'environnement est le même que dans l'article que j'ai écrit plus tôt. Préparation de l'environnement d'exécution de Tomcat dans IntelliJ Community
Pour résumer grossièrement, cela ressemble à ce qui suit.
type | Logiciel |
---|---|
Langue | Java SE 8 |
API serveur | JavaEE |
Log API | Log4j2 |
IDE | IntelliJ Community |
Outil de création | Gradle |
récipient | Tomcat |
S'il s'agit d'un projet JavaEE, il a peut-être déjà été créé, mais créez un répertoire comme suit.
Créez également des répertoires "classes" et "lib" dans WEB-INF.
Ajoutez ce qui suit aux dépendances de build.gradle.
dependencies {
//Rendre log4j disponible
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'
}
Lors de l'écriture d'un journal, il est gênant d'écrire le code préparatoire à chaque fois, créez donc une classe wrapper comme suit. Pour le code, je me suis référé au lien ci-dessous. Spring MVC petit diamètre, un petit détour, journalisation de petit diamètre
import org.apache.logging.log4j.LogManager;
import java.io.File;
/**
*Effectuer le processus de journalisation
*/
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();
//Obtenir le nom de la classe
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));
}
}
Dans EndPoint, appelez et utilisez comme suit.
Log4j logger = Log4j.getInstance();
logger.info("Écrivez le contenu du journal ici");
Les niveaux de journaux suivants sont préparés dans log4j et la méthode d'enroulement est définie en conséquence.
fatal > error > warn > info > debug > trace
Explication approfondie de Log4J
Le fichier de configuration log4j2 est décrit dans un fichier xml nommé "log4j2.xml". De plus, dans Tomcat, vous pouvez le charger automatiquement en le plaçant dans le dossier webapp-> WEB-INF-> classes. Voici un exemple de la façon de remplir 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:Nom de fichier pour sortir le journal
filePattern:Schéma des fichiers à compresser lorsque les journaux sont accumulés
-->
<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:Nom du package pour la sortie du journal
level:Niveau de sortie du journal
additivity:S'il faut sortir le journal supérieur
-->
<Logger name="Logger" level="info" additivity="true">
<AppenderRef ref="rolling"/>
</Logger>
</Loggers>
</Configuration>
Pour plus d'informations, consultez les liens ci-dessous.
Dans le projet Gradle, le chemin relatif se trouve directement sous le projet, le répertoire du fichier est donc
. -> log
Cependant, dans Tomcat, la racine du chemin relatif est le dossier d'installation de tomcat, donc
.-> webapps->
En fait, ajoutez le code suivant à build.gradle.
//exécuter avant d'exécuter la tâche de guerre
war.doFirst {
//Obtenir le fichier enfant
java.io.File[] flist = (new java.io.File("./src/main/webapp/WEB-INF/classes")).listFiles();
for(i in flist) {
//Jugement du nom de fichier
switch (i.getName()) {
case "log4j2.xml":
//Renommer
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;
}
}
}
//Exécuter après l'exécution de la tâche de guerre
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;
}
}
}
Lors de la création d'un fichier pour chaque exécution de tâche de guerre, git ne le reconnaît pas comme un fichier de gestion -> Vous devriez pouvoir le définir dans un xml
Recommended Posts