Super detaillierte Erklärung des Logback-Log-Eintrags

Grundinformation

Protokoll : Es ist die Fähigkeit, die Situation im laufenden Zustand des Systems (Verbindungszeitlimit, Benutzerbetrieb, Auslösen von Ausnahmen usw.) genau und genau zu beschreiben.
Protokoll-Framework : Es integriert ein Toolkit, mit dem Protokollinformationen und standardisiert werden können Ausgabe.

Logback-Vorteile

Was sind die Vorteile des Logback-Frameworks? Zunächst müssen wir verstehen, wozu das Framework mir helfen kann.

  1. Benutzerdefinierter Ausgabepfad, einfache Wartung später (praktisch für Betriebs- und Wartungspartner)

    能够将日志信息存储到本地文件或存储到数据库中去,而且根据滚动策略设置一天一个文件
    
  2. Passen Sie das Ausgabeformat des Protokolls nach Ihren Wünschen an

    可以通过配置文件修改日志文件的具体内容,在不改变原有业务代码的情况下改变输出格式,方便调试
    
  3. Tragen Sie Protokollkontextinformationen bei sich

    上下文中包含着时间戳、类的所在路径、所占用的堆栈信息和占用的线程等等
    
  4. Sie können auswählen, was zur Laufzeit ausgegeben werden soll

     运行无误的时候,我们只在乎返回的运行信息;运行出错的时候,选择返回错误信息
    
  5. Bequeme Konfiguration und hohe Leistung

     框架与业务代码耦合小,正常业务之外的审计和运维需求,与系统性能无关
    

Rahmenkonfiguration

Es gibt zwei gängige Konfigurationsschemata für die Rückmeldung:

  1. Konfigurieren Sie in der application.properties/application.yml, die mit dem SpringBoot-Projekt geliefert wird (diese Konfiguration ist einfach und SpringBoot wurde integriert).
    Dies ist im Allgemeinen für persönliche Lernprojekte geeignet und kann für eine schnelle Entwicklung empfohlen werden
    Anwendung
  2. Erstellen Sie eine Konfigurationsdatei logback.xml separat unter der Ressourcendatei, um eine komplexere Konfiguration zu erhalten. (Empfohlen, die Konfigurationsinformationen sind ausreichend detailliert)

Gesamtcode

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="300 seconds" debug="false">
	<!-- 定义参数参数  -->
	<!-- TRACE<DEBUG<INFO<WRAN<ERROR -->
	<property name="log.level" value="debug"/>
	<property name="log.maxHistory" value="30"/>
	<property name="log.filePath" value="E:/study"/>
	<property name="log.pattern"
	 value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} -%msg%n"/>
	<!-- 控制台设置 -->
	<appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender">
		<encoder>
			<pattern>${log.pattern}</pattern>
		</encoder>
	</appender>
	<!-- DEBUG -->
	<appender name="debugAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<!-- 文件路径 -->
		<file>${log.filePath}/logs/debug.log</file>
		<!-- 滚动策略 -->
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<!-- 文件名称 -->
			<fileNamePattern>
				${log.filePath}/debug/debug.%d{yyyy-MM-dd}.log.gz
			</fileNamePattern>
			<!-- 文件最大保存历史数量 -->
			<maxHistory>${log.maxHistory}</maxHistory>
		</rollingPolicy>
		
		<encoder>
			<pattern>${log.pattern}</pattern>
		</encoder>
		<!-- 过滤器(仅保留debug优先级的日志信息) -->
		<filter class="ch.qos.logback.classic.filter.LevelFilter">
			<level>DEBUG</level>
			<onMatch>ACCEPT</onMatch>
			<onMismatch>DENY</onMismatch>
		</filter>
	</appender>
	
	<!-- INFO -->
	<appender name="infoAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<!-- 文件路径 -->
		<file>${log.filePath}/logs/info.log</file>
		<!-- 滚动策略 -->
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<!-- 文件名称 -->
			<fileNamePattern>
				${log.filePath}/info/info.%d{yyyy-MM-dd}.log.gz
			</fileNamePattern>
			<!-- 文件最大保存历史数量 -->
			<maxHistory>${log.maxHistory}</maxHistory>
		</rollingPolicy>
		
		<encoder>
			<pattern>${log.pattern}</pattern>
		</encoder>
		<!-- 过滤器(仅保留info优先级的日志信息) -->
		<filter class="ch.qos.logback.classic.filter.LevelFilter">
			<level>INFO</level>
			<onMatch>ACCEPT</onMatch>
			<onMismatch>DENY</onMismatch>
		</filter>
	</appender>
	
	<!-- ERROR -->
	<appender name="errorAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<!-- 文件路径 -->
		<file>${log.filePath}/logs/webapps/error.log</file>
		<!-- 滚动策略 -->
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<!-- 文件名称 -->
			<fileNamePattern>
				${log.filePath}/error/error.%d{yyyy-MM-dd}.log.gz
			</fileNamePattern>
			<!-- 文件最大保存历史数量 -->
			<maxHistory>${log.maxHistory}</maxHistory>
		</rollingPolicy>
		
		<encoder>
			<pattern>${log.pattern}</pattern>
		</encoder>
		<!-- 过滤器(仅保留error优先级的日志信息) -->
		<filter class="ch.qos.logback.classic.filter.LevelFilter">
			<level>ERROR</level>
			<onMatch>ACCEPT</onMatch>
			<onMismatch>DENY</onMismatch>
		</filter>
	</appender>
	
		<!-- 该 logger 只会记录debug 优先级别以上的日志信息 -->
		<!-- 子logger -->
 	<logger name="com.hyxiao.logback.test" level="${log.level}" additivity="true">
 		<!-- 与append相绑定,logger文件会往这三个对象输出日志信息 -->
		<appender-ref ref="debugAppender"/>
		<appender-ref ref="infoAppender"/>
		<appender-ref ref="errorAppender"/>
	</logger>
	<!-- 父logger(上面的logger为子logger),当根logger没有设置 level 时 -->
	<!-- 则会继承父logger设置的lever等级,即输出 info(warn、error) 级别的信息 -->
	<root level="info">
		<appender-ref ref="consoleAppender"/>
	</root>
</configuration>

Code-Analyse

  • Das erste ist das übergeordnete Konfigurations-Tag. Im Allgemeinen muss dieses Tag keine Attribute hinzufügen (optional).
<configuration scan="true" scanPeriod="300 seconds" debug="false">

Setzen Sie scan = "true", die Konfigurationsdatei wird neu geladen, wenn sie sich ändert. Die Standardeinstellung ist true.
Setzen Sie scanPeriod = "300 Sekunden". Nach dem Öffnen des Scans wird innerhalb von 300 Sekunden nach Änderungen in den Konfigurationsdateien gesucht.
Set Debug = „false“, wenn auf false gesetzt, das System wird nicht die Protokollinformationen an der Unterseite der logback Ausgabe, die der Laufstatus logback ist

  • Legen Sie gefolgt vom Sub-Tag der Eigenschaft die Rückmeldungsparameter fest (optional).
	<property name="log.level" value="debug"/>
	<property name="log.maxHistory" value="30"/>
	<property name="log.filePath" value="E:/study"/>
	<property name="log.pattern"
	 value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} -%msg%n"/>

log.level bezieht sich auf die Protokollstufe der Rückmeldung. Die Debug-
Protokollebene ist in fünf Ebenen unterteilt, nämlich TRACE <DEBUG <INFO <WRAN <ERROR.
Wenn die Ebene auf Debug eingestellt ist, wird die Ausgabe entsprechend der Priorität ausgegeben. Debug und Info werden nacheinander ausgegeben. Für die vier Informationsebenen Wran und Fehler reicht die Trace-Priorität nicht aus.
Das Prioritätsdiagramm der Rückmeldung lautet wie folgt:
Priorität
log.maxHistory bezieht sich auf die maximale Anzahl
des Dateispeicherverlaufs. Log.filePath bezieht sich auf den
Stammpfad der Dateispeicherung. Log.pattern bezieht sich auf das endgültige Format der Protokolldarstellung.

%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} -%msg%n

% d: Bezieht sich auf das Zeitformat {Jahr, Monat, Tag, Stunde, Minute, Sekunde}
[% thread]: Welcher Thread zur Ausführung gehört
% -5level: Die Ebene wird von links mit einer Breite von 5 Zeichen angezeigt. und der Einzug ist 5-stellig, um die Protokollstufeninformationen
% logger {50} -% msg: Protokollinformationsausgabe anzuzeigen, in der Klasse
% n: Zeilenumbruch

  • Als nächstes folgt der Appender-Untertag

Encoder-Eigenschaft ($ {log.pattern} wurde im Eigenschaftstag konfiguriert und kann direkt in Anführungszeichen gesetzt werden)

    <appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender">
        <layout class="ch.qos.logback.classic.PatternLayout">
			<pattern>${log.pattern}</pattern>
        </layout>
    </appender>

DEBUG-Pegeleinstellung

	<!-- DEBUG -->
	<appender name="debugAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<!-- 文件路径 -->
		<file>${log.filePath}/logs/debug.log</file>
		<!-- 滚动策略 -->
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<!-- 文件名称 -->
			<fileNamePattern>
				${log.filePath}/debug/debug.%d{yyyy-MM-dd}.log.gz
			</fileNamePattern>
			<!-- 文件最大保存历史数量 -->
			<maxHistory>${log.maxHistory}</maxHistory>
		</rollingPolicy>
		
		<encoder>
			<pattern>${log.pattern}</pattern>
		</encoder>
		<!-- 过滤器(仅保留debug优先级的日志信息) -->
		<filter class="ch.qos.logback.classic.filter.LevelFilter">
			<level>DEBUG</level>
			<onMatch>ACCEPT</onMatch>
			<onMismatch>DENY</onMismatch>
		</filter>
	</appender>

INFO Level Einstellungen

	<!-- INFO -->
	<appender name="infoAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<!-- 文件路径 -->
		<file>${log.filePath}/logs/info.log</file>
		<!-- 滚动策略 -->
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<!-- 文件名称 -->
			<fileNamePattern>
				${log.filePath}/info/info.%d{yyyy-MM-dd}.log.gz
			</fileNamePattern>
			<!-- 文件最大保存历史数量 -->
			<maxHistory>${log.maxHistory}</maxHistory>
		</rollingPolicy>
		
		<encoder>
			<pattern>${log.pattern}</pattern>
		</encoder>
		<!-- 过滤器(仅保留info优先级的日志信息) -->
		<filter class="ch.qos.logback.classic.filter.LevelFilter">
			<level>INFO</level>
			<onMatch>ACCEPT</onMatch>
			<onMismatch>DENY</onMismatch>
		</filter>
	</appender>

Fehlerpegeleinstellung

	<!-- ERROR -->
	<appender name="errorAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<!-- 文件路径 -->
		<file>${log.filePath}/logs/webapps/error.log</file>
		<!-- 滚动策略 -->
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<!-- 文件名称 -->
			<fileNamePattern>
				${log.filePath}/error/error.%d{yyyy-MM-dd}.log.gz
			</fileNamePattern>
			<!-- 文件最大保存历史数量 -->
			<maxHistory>${log.maxHistory}</maxHistory>
		</rollingPolicy>
		
		<encoder>
			<pattern>${log.pattern}</pattern>
		</encoder>
		<!-- 过滤器(仅保留error优先级的日志信息) -->
		<filter class="ch.qos.logback.classic.filter.LevelFilter">
			<level>ERROR</level>
			<onMatch>ACCEPT</onMatch>
			<onMismatch>DENY</onMismatch>
		</filter>
	</appender>
  • Die letzten Sub-Tags sind Logger und Root, die zum Speichern von Protokollobjekten und zum Informieren der Rückmeldung über die Klasseninformationen verwendet werden, unter denen das Paket beachtet werden muss.
		<!-- 该 logger 只会记录debug 优先级别以上的日志信息 -->
		<!-- 子logger -->
 	<logger name="com.hyxiao.logback.test" level="${log.level}" additivity="true">
 		<!-- 与append相绑定,logger文件会往这三个对象输出日志信息 -->
		<appender-ref ref="debugAppender"/>
		<appender-ref ref="infoAppender"/>
		<appender-ref ref="errorAppender"/>
	</logger>
	<!-- 父logger(上面的logger为子logger),当根logger没有设置 level 时 -->
	<!-- 则会继承父logger设置的lever等级,即输出 info(warn、error) 级别的信息 -->
	<root level="info">
		<appender-ref ref="consoleAppender"/>
	</root>

Das obige Attribut "Additivität" ist standardmäßig auf "true" gesetzt. Wenn es auf "true" gesetzt ist, übergibt der untergeordnete Logger die gesammelten Informationen an das Stammverzeichnis. Hier wechselt der untergeordnete Protokollierer zum Root-Tag und fügt dem untergeordneten Element "appender-ref" hinzu logger (). Das heißt, der untergeordnete Logger kann auch die Ausgabe von Protokollinformationen auf der Konsole unterstützen.

Rezension

Logger : Wird hauptsächlich zum Speichern von Protokollobjekten und zum Definieren von Protokolltypen und -ebenen verwendet.
Appender : Wird verwendet, um das Ziel der Protokollausgabe anzugeben. Das Ziel kann eine Konsole, eine Datei usw. sein.
Layout : Formatieren Sie die Ausgabeinformationen des Protokolls.

~~~~ ~~~~ ~~~~

Es ist nicht einfach zu machen, wenn es hilft, bitte gib mir ein "Gefällt mir", danke! ! !

Ich denke du magst

Origin blog.csdn.net/hyx1249273846/article/details/113632780
Empfohlen
Rangfolge