SpringBootの構成ログフレームワークの詳細な説明(乳母レベルのチュートリアル)

この記事では、主にSpringBootフレームワークの構成ログフレームワークについて説明します。これは、すべての人の学習や仕事に一定の参照学習値があります。それを必要とする友人は、以下のエディターと一緒に学習しましょう。

最初にログフレームワークについて簡単に説明しましょう

ログフレームワークは、プロジェクトでのワークベンチ出力、非同期ログ記録、および自動アーカイブ(ログをファイルに出力)を完了するのに役立ちます。フレームワークの段階的な形成では、ログフレームワークは抽象化レイヤーと実装レイヤーに分割されます。

いわゆる抽象化レイヤーは、統合インターフェースレイヤーとも呼ばれます。以前は、ログ処理を完了するためにインターフェースレイヤーをコードに直接実装していましたが、インターフェースレイヤーが変更されると、変更の度合いが非常に大きくなります。コードは高度に結合されているため、理解してください。

コードの結合度を下げるために、2つのレイヤーに分割されています。これで、ログ実装は、インターフェイスレイヤーとログ実装レイヤーの関連するjarパッケージを直接インポートできます。基本的に、コードをまったく記述せずにログ処理をすばやく実装できます。

フレームの選択

市場には多くのロギングフレームワークがあります。JUL(java.util.logging)、JCL(Apache Commons Logging)、Log4j、Log4j2、Logback、SLF4j、jboss-loggingなど。Spring Bootは、フレームワークのコンテンツでJCLを使用します。Spring -boot-starter-loggingはslf4j + logbackの形式を採用しています。SpringBootは自動的に適応(jul、log4j2、logback)し、構成を簡素化することもできます。

この部分のファサードはインターフェース層を指し、右側は実装クラスです。
左側でファサード(抽象化レイヤー)を選択し、右側で実装を選択します。

ログファサード:SLF4J;
ログ実装:ログバック;

一般的なログファサード(インターフェースレイヤー)には、SLF4Jを使用します。理由:JCLは長期間更新されていません。最後の更新は2014年でした。jbossの一般的な特定のフレームワークが使用されるため、我ら。

Logbackは通常、実装層で使用されます。理由:JULは比較的良くありません。SLF4J、Log4j、およびLogbackは同じ人によって作成され、LogbackはLog4jのアップグレードバージョンです。Log4j2も完璧ですが、完璧すぎて、多くのフレームワークが適応されていません。

Slf4jの簡単な使用

実際の開発では、通常、実装クラスを直接削除するのではなく、インターフェイス層のメソッドを削除します。

slf4j jarとlogback実装jarをシステムにインポートします。Spring-boot-starter-webにはspring-boot-starter-web自体が付属しているため、jarパッケージをインポートする必要はありません。

import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 
public class HelloWorld {
    
     
	public static void main(String[] args) {
    
    
		 Logger logger = LoggerFactory.getLogger(HelloWorld.class); 
		 logger.info("Hello World"); 
	 } 
}

各ログ実装フレームワークには、独自の構成ファイルがあります。slf4jを使用した後も、構成ファイルはログ実装フレームワーク自体の構成ファイルになります。

SpringBootでの構成手順

1.他のフレームワークログパッケージを除外します

一般的なプロジェクトでは、ログ実装フレームワークを選択すると、これを一律に使用します。使用するフレームワークの多くには独自のログフレームワークがあります。現時点では、パッケージを除外し、独自のログパッケージを除外する必要があります。、jarを回避するパッケージの競合。

パケットを除外するとエラーが報告されませんか?
SLF4jは中間パッケージを提供します。これらの中間パッケージは、元のログフレームワークの置き換えに基づく変換関数であり、フレームワークが正常に実行できることを保証します。これらの置換パッケージは、spring-boot-starter-webが導入されたときに追加されましたこれら2つのパッケージの機能は、log4jフレームワークとjulフレームワークがすべてslf4jを均一使用することです。したがって、これらのフレームワークに付属するjarパッケージを除外するだけです。彼を入れないでください。
ここに画像の説明を挿入します
pomの例:

<dependency>
	<groupId>org.apache.httpcomponents</groupId>
	<artifactId>httpclient-cache</artifactId>
	<!-- 依从 spring-boot 管理版本 -->
	<version>4.5.2</version>
	<scope>compile</scope>
	<exclusions>
		<exclusion>
			<!-- 使用 jcl-over-slf4j 代替 -->
			<groupId>commons-logging</groupId>
			<artifactId>commons-logging</artifactId>
		</exclusion>
	</exclusions>
</dependency>

2.デフォルトの構成を理解する

いくつかのデフォルト構成は、springboot自動アセンブリで構成されます。構成なしでロギングフレームワークを使用する場合でも、彼はいくつかの基本的な機能を実行することもできます。

このjarパッケージの下に、デフォルトの構成が表示されます。
ここに画像の説明を挿入します
ここに画像の説明を挿入します

ここから、彼のデフォルトの構成レベルはinfoであることがわかります。

3.グローバル構成を使用してデフォルト値を変更します

デフォルトでは、SpringBootはログのみをコンソールに出力します。
複雑な関数が必要ない場合は、同じログをファイルに出力するだけです。
application.properityに次の構成を追加するだけです。

#在当前磁盘的根路径下创建log文件夹和里面的MyProject文件夹;使用 spring.log 作为默认文件
logging.path=/log/MyProject

# 可以指定完整的路径;不指定磁盘路径在当前项目下生成springboot.log日志
logging.file=G:/springboot.log

#设置具体包的日志级别(这里将与MyBatis相关的mapper包设置为debug级别,效果就是在日志中输出sql语句)
logging.level.cn.gzl.Mapper=debug

ログ出力形式:

%dは日付と時刻、
%threadはスレッド名、
%-5level:レベルは左から5文字の幅で表示されます
%logger {50}はロガー名が最大50文字であることを意味し、それ以外の場合は分割されます期間ごと。
%msg:ログメッセージ、
%nは改行文字です

上記は、ログ出力形式識別子の意味です。その意味を理解した後、グローバル構成に構成を追加することにより、必要なコンソール情報を変更できます。

# 在控制台输出的日志的格式 
logging.pattern.console=%d{
    
    yyyy‐MM‐dd} [%thread] %5level %logger{
    
    50}%msg%n 
# 指定文件中日志输出的格式 
logging.pattern.file=%d{
    
    yyyy‐MM‐dd} === [%thread] === %5level === %logger{
    
    50} ==== %msg%n

4.構成ファイルを指定します

各ログフレームワークの独自の構成ファイルをクラスパスの下に置くだけです。SpringBootはデフォルトの構成を使用しません。

ログバックを使用します。通常、次の2つを使用します

logback.xml:ロギングフレームワークによって直接認識されます;
logback-spring.xml:ロギングフレームワークはログの構成アイテムを直接ロードしません。ログ構成はSpringBootによって解析され、SpringBootの高度なプロファイル機能は次のようになります。中古。

<springProfile name="staging"> 
	<!‐‐ configuration to be enabled when the "staging" profile is active ‐‐> 
	可以指定某段配置只在某个环境下生效 
</springProfile>

完全なlogback-spring.xml構成ファイル

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds">
    <include resource="org/springframework/boot/logging/logback/base.xml" />

	<contextName>ph-logback</contextName>
	<property name="log.path" value="c:/logback/logback.log" />

	<!-- 输出的控制台 -->
	<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
		<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
			<level>INFO</level>
		</filter>
		<encoder>
			<pattern>%d{
    
    HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{
    
    36} - %msg%n
			</pattern>
		</encoder>
	</appender>

	<!-- 输出到文件 -->
	<appender name="file"
		class="ch.qos.logback.core.rolling.RollingFileAppender">
		<!--日志名,用到了上面配置的路径-->
		<file>${
    
    log.path}</file>
		<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
			<fileNamePattern>${
    
    log.path}.%d{
    
    yyyy-MM-dd}.%i.log</fileNamePattern>
			<!-- 单个文件最大100M -->			
			<maxFileSize>100MB</maxFileSize>
			<!-- 保留30天的日志 -->
			<maxHistory>30</maxHistory>
		</rollingPolicy>

		<encoder>
			<pattern>%date %level [%thread] %logger{
    
    36} [%file : %line] %msg%n
			</pattern>
		</encoder>
	</appender>
	
	<!-- 开发环境 -->
	<springProfile name="dev">
		<logger name="com.xjgx" level="INFO"/>
	</springProfile>
	
	<!-- 生产环境 -->
	<springProfile name="prod">
		<logger name="com.xjgx" level="ERROR"/>
	</springProfile>

	
	<!-- 日志级别 -->
	<root level="info">
		<appender-ref ref="console" />
		<appender-ref ref="file" />
	</root>
	
	<!--设置具体包的隔离级别-->
    <logger name="com.xjgx.domain.mapper" level="DEBUG"></logger>
    <logger name="com.xjgx.domain.slave.mapper" level="DEBUG"></logger>

 </configuration>

おすすめ

転載: blog.csdn.net/weixin_43888891/article/details/111134602