Java >> Java tutorial >  >> Tag >> Log4j

Log4j Konverteringsmønster Eksempel

Logning er en kritisk funktion i enhver applikation. I denne tutorial vil jeg vise dig, hvordan du implementerer nogle nyttige Log4j Konverteringsmønstre til at skrive logningsmekanismen i Java-udvikling.

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 Unix-baserede systemer, Log4j eller SLF4j eller enhver 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 logningsoplysninger i forskellige stilarter

1.2 Log4j-konverteringsmønster

For at huske, en Log4j Konverteringsmønster angiver, at logmeddelelserne formateres ved at bruge en kombination af bogstaver, konverteringstegn og formatmodifikatorerne. Overvej følgende mønster:

log4j.appender.ConsoleAppender.layout.ConversionPattern=[%-5p] %d %c - %m%n

Hvor:

  • Procenttegnet (% ) er et præfiks for alle konverteringstegn
  • -5p er formatmodifikatoren for konverteringstegnet p (dvs. prioritet). Dette retfærdiggør prioritetsnavnet med mindst 5 tegn

Ovenstående konverteringsmønster vil formatere logmeddelelserne til noget som dette:

[DEBUG] 2017-11-14 21:57:53,661 DemoClass - This is a debug log message.
[INFO ] 2017-11-14 21:57:53,662 DemoClass - This is an information log message.
[WARN ] 2017-11-14 21:57:53,662 DemoClass - This is a warning log message.

Følgende tabel opsummerer kort konverteringstegnene defineret af Log4j framework:

Hvad skal udskrives Konverteringstegn Ydeevne
Kategorinavn (eller loggernavn) c Hurtig
Fuldt kvalificeret klassenavn C Langsom
Dato og tid d
d{format}
Langsomt, hvis du bruger JDK's formatere.
Hurtigt, hvis du bruger Log4j Formatere.
Filnavn på Java-klassen F Ekstremt langsom
Placering (klasse, metode og linjenummer) l Ekstremt langsom
Kun linjenummer L Ekstremt langsom
Logmeddelelse m Hurtig
Metodenavn M Ekstremt langsom
Prioritet (niveau) p Hurtig
Ny linjeseparator n Hurtig
Trådnavn t Hurtig
Forløbet tid (i millisekunder) r Hurtig
Trådens indlejrede diagnostiske kontekst x Hurtig
Trådens kortlagte diagnostiske kontekst X Hurtig
Procenttegn %% Hurtig

1.3 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 tillader udviklere 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 end DEBUG beskeder i produktionsmiljøet
  • Loggeramme 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 bruge PatternLayout man kan inkludere et tidsstempel, klassenavn osv.

Åbn nu Eclipse Ide, og lad os begynde at bygge applikationen!

2. Log4j-konverteringsmønstereksempel

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 Krukke. 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. 1: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. 2:Opret Maven Project

I vinduet New Maven Project vil det bede dig om at vælge en projektplacering. Som standard vil 'Brug standardarbejdspladsplacering' være valgt. Marker afkrydsningsfeltet 'Opret et simpelt projekt (spring over arketypevalg)', og klik bare på knappen næste for at fortsætte.

Fig. 3:Projektdetaljer

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. 4:Arketypeparametre

Klik på afslut og oprettelsen af ​​et maven-projekt vil blive afsluttet. Hvis du observerer, har den downloadet maven-afhængighederne og en pom.xml fil vil blive oprettet. Den 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>Log4jConversionPattern</groupId>
	<artifactId>Log4jConversionPattern</artifactId>
	<version>0.0.1-SNAPSHOT</version>
</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 for at opsætte logningsrammerne. 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/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>Log4jConversionPattern</groupId>
	<artifactId>Log4jConversionPattern</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>
	<dependencies>
		<!-- https://mvnrepository.com/artifact/log4j/log4j -->
		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>1.2.17</version>
		</dependency>
	</dependencies>
</project>

3.2 Java-klasseoprettelse

Lad os oprette de nødvendige Java-filer. Højreklik på src/main/java mappe, New -> Package .

Fig. 5:Java-pakkeoprettelse

Et nyt pop-vindue åbnes, hvor vi indtaster pakkenavnet som:com.jcg.log4j .

Fig. 6:Java-pakkenavn (com.jcg.log4j)

Når pakken er oprettet, skal vi oprette implementeringsklassen. Højreklik på den nyoprettede pakke, New -> Class .

Fig. 7:Java-klasseoprettelse

Et nyt pop-vindue åbnes og indtast filnavnet som:Log4jPattern . Implementeringsklassen vil blive oprettet inde i pakken:com.jcg.log4j .

Fig. 8:Java-klasse (Log4jPattern.java)

3.2.1 Implementering af hjælpeklasse

Lad os skrive et hurtigt Java-program, der indeholder en simpel prioritet, kategori, metodenavn og meddelelsesmønster og skrive logmeddelelsen til konsollen.

Log4j Simple Conversion Pattern

[%p] %c %M - %m%n

Hvor:

  • %n skal bruges til at tilføje et nyt linjetegn i slutningen af ​​hver besked

Tilføj følgende kode til det.

Log4jPattern.java

package com.jcg.log4j;

import org.apache.log4j.Logger;

public class Log4jPattern {

	static Logger logger = Logger.getLogger(Log4jPattern.class);

	public static void main(String[] args) {

		logger.info("This Is A Log Message ..!");
	}
}

3.3 Log4j-konfigurationsfil

Log4j vil normalt blive konfigureret ved hjælp af en egenskabsfil eller en 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 læg den i src/main/resources folder. Tilføj følgende kode til det:

log4j.xml

<?xml version="1.0" encoding="UTF-8"?>
<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="[%p] %d [%t] %x %c %M - %m%n" />
        </layout>
    </appender>
    <root>
        <level value="INFO" />
        <appender-ref ref="console" />
    </root>
</log4j:configuration>

4. Kør programmet

For at køre programmet skal du højreklikke på Log4jPattern klasse, Run As -> Java Application . Udviklere kan fejlsøge eksemplet og se, hvad der sker efter hvert trin. God fornøjelse!

Fig. 9:Kør applikation

5. Projektdemo

Koden viser følgende status som output.

  • Simpelt konverteringsmønster:[%p] %c %M - %m%n
    Output
    [INFO] com.jcg.log4j.Log4jPattern main - This Is A Log Message ..!
  • Standard konverteringsmønster:[%p] %d %c %M - %m%n
    Output
    [INFO] 2017-11-14 20:30:20,434 com.jcg.log4j.Log4jPattern main - This Is A Log Message ..!
    
  • Konverteringsmønstre, hvor dato og klokkeslæt har betydning:Nogle gange er det afgørende at måle tid i logoutputtet. Som standard er %d konverteringstegn udsender dato og klokkeslæt i ISO8601 format. Udviklere kan dog bruge en datoformatspecifikation til eksplicit at formatere datoen og klokkeslættet. For f.eks.:
    • Hvis udviklere har brug for tidsgranularitet til millisekunder:[%p] %d{MM-dd-yyyy HH:mm:ss,SSS} %c %M - %m%n
      Output
      [INFO] 11-14-2017 20:36:01,331 com.jcg.log4j.Log4jPattern main - This Is A Log Message ..!
      
    • ISO8601 Datoformatspecifikation:[%p] %d{ISO8601} %c %M - %m%n
      Output
      [INFO] 2017-11-14 20:37:21,116 com.jcg.log4j.Log4jPattern main - This Is A Log Message ..!
      
    • Ved brug af DATE formatspecifikation:[%p] %d{DATE} %c %M - %m%n
      Output
      [INFO] 14 Nov 2017 20:38:36,355 com.jcg.log4j.Log4jPattern main - This Is A Log Message ..!
      
    • Ved brug af ABSOLUTE datoformatspecifikation:[%p] %d{ABSOLUTE} %c %M - %m%n
      Output
      [INFO] 20:47:49,096 com.jcg.log4j.Log4jPattern main - This Is A Log Message ..!
      
  • Konverteringsmønstre, hvor trådkontekst betyder noget:Til fejlretning af multitrådede applikationer, Log4j giver følgende konverteringstegn:
    • %t :Trådnavn
    • %x :Trådens indlejrede diagnostiske kontekst
    • %X :Trådens kortlagte diagnostiske kontekst

    Mønster:[%p] %d [%t] %x %c %M - %m%n
    Output

    [INFO] 2017-11-14 21:24:29,147 [main] com.jcg.log4j.Log4jPattern main - This Is A Log Message ..!
    

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 Konverteringsmønster Eksempel.core java Java Java 8 log4j

Java tag