Log4j Aktiver/deaktiver logføring eksempel
Lad os sige, at udviklere vil deaktivere eller aktivere Log4j
ramme ved blot at klikke på nogle afkrydsningsfelter. Fordelen ved dette er, at når udviklere bruger Log4j
rammer i produktionsmiljøet og ønsker at aktivere logning til enhver tid, behøver de bare ikke at ændre XML
eller egenskabsfilen fra den lokale maskine, og upload den derefter. I denne vejledning vil jeg vise dig, hvordan du aktiverer eller deaktiverer Log4j
mekanisme gennem en simpel webapplikation.
1. Introduktion
Udskrivning af beskeder til konsollen er en integreret del af udviklingstesten og fejlretningen af et Java-program. Hvis udviklere arbejder på en serversideapplikation, hvor de ikke kan se, hvad der foregår inde på serveren, så er deres eneste synlighedsværktøj en log fil.
Uden logfiler kan udviklere ikke foretage nogen fejlfinding eller se, hvad der foregår inde i applikationen. Java har ret praktisk System.out.println()
metoder til at udskrive noget på konsollen, som også kan dirigeres til en logfil, men det er ikke tilstrækkeligt til en virkelig Java-applikation.
Hvis udviklere kører et Java-program i Linux eller i de Unix-baserede systemer, Log4j
eller SLF4j
eller en hvilken som helst anden logningsramme tilbyder mange flere funktioner, fleksibilitet og forbedring af meddelelseskvalitet, hvilket ikke er muligt ved hjælp af System.out.println()
udsagn.
1.1 Hvad er Log4j?
Log4j er en enkel, fleksibel og hurtig Java-baseret logningsramme. Det er trådsikkert og understøtter internationalisering. Vi har hovedsageligt 3 komponenter at arbejde med Log4j
:
- Logger :Den bruges til at logge meddelelserne
- Tillæg :Det bruges til at publicere logningsoplysningerne til destinationen som fil, database, konsol osv.
- Layout :Det bruges til at formatere logoplysninger i forskellige stilarter
1.1.1 Log4j Logger Class
Logger
klasse giver metoderne til logningsprocessen. Vi kan bruge getLogger()
metode til at få Logger
objekt. Syntaksen er angivet nedenfor:
static Logger log = Logger.getLogger(YourClassName.class);
Logger
klasse har 5
logningsmetoder, der bruges til at udskrive status for en applikation:
Beskrivelse | Metodesyntaks | |
---|---|---|
debug(Objektmeddelelse) | Det bruges til at udskrive meddelelsen med niveauet org.apache.log4j.Level.DEBUG . | offentlig void debug(Objektmeddelelse) |
fejl(Objektmeddelelse) | Det bruges til at udskrive meddelelsen med niveauet org.apache.log4j.Level.ERROR . | offentlig ugyldig fejl (Objektmeddelelse) |
info(Objektmeddelelse) | Det bruges til at udskrive meddelelsen med niveauet org.apache.log4j.Level.INFO . | offentlig ugyldig info(Objektmeddelelse) |
fatal(Objektmeddelelse) | Det bruges til at udskrive meddelelsen med niveauet org.apache.log4j.Level.FATAL . | offentlig ugyldig fatal(Objektmeddelelse) |
advarsel(Objektmeddelelse) | Det bruges til at udskrive meddelelsen med niveauet org.apache.log4j.Level.WARN . | offentlig void warn(Objektmeddelelse) |
trace(Objektmeddelelse) | Det bruges til at udskrive meddelelsen med niveauet org.apache.log4j.Level.TRACE . | offentlig ugyldig sporing (Objektmeddelelse) |
For at opsummere er prioritetsniveauet givet nedenfor.
Trace < Debug < Info < Warn < Error < Fatal
Hvor org.apache.log4j.Level.FATAL
har den højeste prioritet og org.apache.log4j.Level.Trace
den laveste .
1.1.2 Log4j Appender Interface
Appender
er en grænseflade, som primært er ansvarlig for at udskrive logningsmeddelelserne til de forskellige destinationer såsom konsol, filer, sockets, database osv. I Log4j
vi har forskellige typer Appender
implementeringsklasser:
Fig. 1:Log4j-tillæg
1.1.3 Log4j Layout Class
Layout
komponent angiver det format, som log-sætningerne skrives ind i destinationslageret af Appender
. I Log4j
vi har forskellige typer Layout
implementeringsklasser:
Fig. 2:Log4j Layout
1.2 Hvorfor foretrækker Log4j frem for System.out.println?
Nedenfor er nogle af grundene, som er nok til at forstå begrænsningen ved at bruge System.out.println()
:
- Enhver logningsramme inklusive giver udviklere mulighed for at logge fejlfindingsoplysninger til et logniveau, der kan bruges som filtreringskriterier, dvs. man kan deaktivere meddelelsen, der tilhører et bestemt logniveau. For eksempel ville udviklere være mere bekymrede for at se
WARN
beskeder endDEBUG
beskeder i produktionsmiljøet - Logningsramme kan producere bedre output og metadata, som hjælper med at fejlfinde og fejlfinde. For f.eks.
Log4j
gør det muligt at udskrive formateret output ved at angive et formateringsmønster, dvs. ved at brugePatternLayout
man kan inkludere et tidsstempel, klassenavn osv.
Åbn nu Eclipse Ide, og lad os begynde at bygge applikationen!
2. Log4j Aktiver/deaktiver logføring eksempel
Nedenfor er de trin, der er involveret i udviklingen af denne applikation.
2.1 Anvendte værktøjer
Vi bruger Eclipse Kepler SR2, JDK 8 og Log4j Jar. Når det er sagt, har vi testet koden mod JDK 1.7, og det fungerer godt.
2.2 Projektstruktur
Lad os først gennemgå den endelige projektstruktur, hvis du er i tvivl om, hvor du skal oprette de tilsvarende filer eller mappe senere!
Fig. 3:Ansøgningsprojektstruktur
2.3 Projektoprettelse
Dette afsnit vil demonstrere, hvordan man opretter et Java-baseret Maven-projekt med Eclipse. I Eclipse Ide skal du gå til File -> New -> Maven Project
.
Fig. 4:Opret Maven Project
I vinduet New Maven Project vil det bede dig om at vælge projektplacering. Som standard er 'Brug standardarbejdspladsplacering ’ vil blive valgt. Bare klik på næste knap for at fortsætte.
Fig. 5:Projektdetaljer
Vælg 'Maven Web App ' Archetype fra listen over muligheder, og klik på næste.
Fig. 6:Arketypevalg
Den vil bede dig om at 'Indtast gruppen og artefakt-id'et for projektet'. Vi vil indtaste detaljerne som vist på billedet nedenfor. Versionsnummeret vil som standard være:0.0.1-SNAPSHOT
.
Fig. 7:Arketypeparametre
Klik på Udfør, og oprettelsen af et maven-projekt er fuldført. Hvis du observerer, har den downloadet maven-afhængighederne og en pom.xml
filen vil blive oprettet. Det vil have følgende kode:
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>Log4jEnableDisableEx</groupId>
<artifactId>Log4jEnableDisableEx</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
</project>
Vi kan begynde at tilføje de afhængigheder, som udviklere ønsker, såsom Log4j
, Junit osv. Lad os begynde at bygge applikationen!
3. Applikationsbygning
Nedenfor er de trin, der er involveret i udviklingen af denne applikation.
3.1 Maven-afhængigheder
I dette eksempel bruger vi den mest stabile Log4j
version (dvs. log4j-1.2.17
) for at konfigurere logningsrammen. Den opdaterede filen vil have følgende kode:
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>Log4jEnableDisableEx</groupId>
<artifactId>Log4jEnableDisableEx</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>Log4jEnableDisableEx Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>
<build>
<finalName>Log4jEnableDisableEx</finalName>
</build>
</project>
3.2 Java-klasseoprettelse
Lad os oprette de nødvendige Java-filer. Højreklik på src/main/java
mappe, New -> Package
.
Fig. 8:Java-pakkeoprettelse
Et nyt pop-vindue åbnes, hvor vi indtaster pakkenavnet som:com.jcg.log4j.enable.disable
.
Fig. 9:Java-pakkenavn (com.jcg.log4j.enable.disable)
Når pakken er oprettet, skal vi oprette implementeringsklassen. Højreklik på den nyoprettede pakke, New -> Class
.
Fig. 10:Java-klasseoprettelse
Et nyt pop-vindue åbnes og indtast filnavnet som:LogServlet
. Implementeringsklassen vil blive oprettet inde i pakken:com.jcg.log4j.enable.disable
.
Fig. 11:Java-klasse (LogServlet.java)
3.2.1 Implementering af WebServlet Controller Class
Lad os skrive et hurtigt Java-program for hurtigt at aktivere eller deaktivere Log4j
konfiguration. Tilføj følgende kode til det:
LogServlet.java
package com.jcg.log4j.enable.disable;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
@WebServlet("/loggingServlet")
public class LogServlet extends HttpServlet {
static Logger logger = Logger.getLogger(LogServlet.class);
private static final long serialVersionUID = 1L;
/***** @see HttpServlet#HttpServlet() *****/
public LogServlet() {
super();
}
/***** @see doPost(HttpServletRequest req, HttpServletResponse resp) *****/
public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
handleRequest(req, resp);
}
/***** @see handleRequest(HttpServletRequest req, HttpServletResponse resp) *****/
public void handleRequest(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
logger.debug("!.... Application Process Is Started ....!");
resp.setContentType("text/html");
PrintWriter writer = resp.getWriter();
String value[] = req.getParameterValues("log4jMode");
if(value != null) {
for(String mode : value) {
logger.debug("Reading Log4j Enable Or Disable Decision?= " + mode);
/**** Setting Log4j Priority Mode As 'DEBUG' ****/
if(mode.equalsIgnoreCase("DEBUG")) {
logger.setLevel(Level.DEBUG);
logger.debug("Enabled 'DEBUG' Mode ....!");
}
/**** Setting Log4j Priority Mode As 'INFO' ****/
else if(mode.equalsIgnoreCase("INFO")) {
logger.setLevel(Level.INFO);
logger.info("Enabled 'INFO' Mode ....!");
}
/**** Setting Log4j Priority Mode As 'WARN' ****/
else if(mode.equalsIgnoreCase("WARN")) {
logger.setLevel(Level.WARN);
logger.warn("Enabled 'WARN' Mode ....!");
}
/**** Setting Log4j Priority Mode As 'ERROR' ****/
else if(mode.equalsIgnoreCase("ERROR")) {
logger.setLevel(Level.ERROR);
logger.error("Enabled 'ERROR' Mode ....!");
}
/**** Setting Log4j Priority Mode As 'OFF' ****/
else {
logger.setLevel(Level.OFF);
}
logger.debug("!.... Application Process Is Completed ....!");
writer.println("<h1>Selected Log4j Mode Is " + mode + ".</h1>");
}
}
writer.close();
}
}
3.3 Log4j-konfigurationsfil
Log4j
vil normalt blive konfigureret ved hjælp af en egenskabsfil eller XML
fil. Så når logerklæringerne er på plads, kan udviklere nemt kontrollere dem ved hjælp af den eksterne konfigurationsfil uden at ændre kildekoden. log4j.xml
filen er en Log4j
konfigurationsfil, som holder egenskaber i nøgleværdi-par. Som standard er LogManager
leder efter en fil med navnet log4j.xml
i CLASSPATH
.
For at konfigurere logningsrammen skal vi implementere en konfigurationsfil, dvs. log4j.xml
og sæt den ind i src/main/resources
folder. Tilføj følgende kode til det:
log4j.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM
"http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">
<log4j:configuration debug="true" xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="console" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-7p %d [%t] %c %x - %m%n" />
</layout>
</appender>
<root>
<level value="OFF" />
<appender-ref ref="console" />
</root>
</log4j:configuration>
3.4 Oprettelse af JSP View
Lad os skrive en simpel JSP
visning, der indeholder de forskellige Log4j
prioritetstilstand afkrydsningsfelter og en knap til at indsende HTML
form. Tilføj følgende kode det:
index.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Log4j</title>
<script src="https://examples.javacodegeeks.com/wp-content/litespeed/localres/aHR0cHM6Ly9hamF4Lmdvb2dsZWFwaXMuY29tL2FqYXgvlibs/jquery/3.2.1/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
// Selecting One Checkbox At A Time
$(':checkbox').on('change', function() {
var th = $(this),
name = th.prop('name');
if (th.is(':checked')) {
$(':checkbox[name="' + name + '"]').not($(this)).prop('checked', false);
}
});
$('#loggingEnableDisable').on('submit', function(event) {
var isChecked = false;
var checkbox = document.getElementsByName("log4jMode");
for (var i = 0; i < checkbox.length; i++) {
if (checkbox[i].checked) {
isChecked = true;
break;
}
}
if (isChecked) {
$('#loggingEnableDisable').submit();
} else {
document.getElementById('error').innerHTML="Please select a checkbox .....!";
event.preventDefault();
}
});
});
</script>
</head>
<body>
<h1>Enable Or Disable Log4j</h1>
<form id="loggingEnableDisable" action="loggingServlet" method="post" enctype="application/x-www-form-urlencoded">
<!--Debug Mode -->
<input type="checkbox" id="ex_check1" name="log4jMode" value="DEBUG" /><span id="debugId">'Debug' Mode</span>
<!-- Info Mode -->
<input type="checkbox" id="ex_check2" name="log4jMode" value="INFO" /><span id="infoId">'Info' Mode</span>
<!-- Warn Mode -->
<input type="checkbox" id="ex_check3" name="log4jMode" value="WARN" /><span id="warnId">'Warn' Mode</span>
<!-- Error Mode -->
<input type="checkbox" id="ex_check4" name="log4jMode" value="ERROR" /><span id="errorId">'Error' Mode</span>
<!-- Off -->
<input type="checkbox" id="ex_check5" name="log4jMode" value="OFF" /><span id="errorId">Off</span>
<input type="submit" id="submitBtn" value="Send" />
</form>
<div id="error" style="color: red; padding: 12px 0px 0px 23px;"></div>
</body>
</html>
4. Kør programmet
Da vi er klar til alle ændringerne, lad os kompilere projektet og implementere applikationen på Tomcat7-serveren. For at implementere applikationen på Tomat7 skal du højreklikke på projektet og navigere til Run as -> Run on Server
.
Fig. 12:Sådan implementeres applikation på Tomcat
Tomcat vil implementere applikationen i sin web-apps-mappe og vil starte dens udførelse for at implementere projektet, så vi kan gå videre og teste det i browseren.
5. Projektdemo
Åbn din yndlingsbrowser og tryk på følgende URL. Outputsiden vil blive vist, hvor udviklere hurtigt kan vælge Log4j
niveau i henhold til forretningskravet.
http://localhost:8085/Log4jEnableDisableEx/
Servernavn (localhost) og port (8085) kan variere i henhold til din tomcat-konfiguration. Udviklere kan fejlsøge eksemplet og se, hvad der sker efter hvert trin. God fornøjelse!
Fig. 13:Log4j Aktiver/deaktiver webside
Valgt tilstand:DEBUG
DEBUG 2017-11-18 17:18:07,143 [http-bio-8085-exec-5] com.jcg.log4j.enable.disable.LogServlet - Enabled 'DEBUG' Mode ....!
DEBUG 2017-11-18 17:18:07,145 [http-bio-8085-exec-5] com.jcg.log4j.enable.disable.LogServlet - !.... Application Process Is Completed ....!
Valgt tilstand:INFO
DEBUG 2017-11-18 17:18:26,301 [http-bio-8085-exec-8] com.jcg.log4j.enable.disable.LogServlet - !.... Application Process Is Started ....!
DEBUG 2017-11-18 17:18:26,303 [http-bio-8085-exec-8] com.jcg.log4j.enable.disable.LogServlet - Reading Log4j Enable Or Disable Decision?= INFO
INFO 2017-11-18 17:18:26,303 [http-bio-8085-exec-8] com.jcg.log4j.enable.disable.LogServlet - Enabled 'INFO' Mode ....!
Valgt tilstand:ADVARSEL
WARN 2017-11-18 17:18:43,407 [http-bio-8085-exec-10] com.jcg.log4j.enable.disable.LogServlet - Enabled 'WARN' Mode ....!
Valgt tilstand:FEJL
ERROR 2017-11-18 17:18:56,885 [http-bio-8085-exec-4] com.jcg.log4j.enable.disable.LogServlet - Enabled 'ERROR' Mode ....!
Det er alt for dette indlæg. God læring!!
6. Konklusion
Det er alt for at få udviklerne i gang med Log4j
eksempel. Vi vil se nærmere på flere funktioner i de næste indlæg. Jeg håber, at denne artikel tjente dig, hvad end du ledte efter. Udviklere kan downloade eksempelapplikationen som et Eclipse-projekt i afsnittet Downloads.
7. Download Eclipse Project
Dette var et eksempel på Log4j
Eksempel.core java Java java 7 log4j xml