(5)Spring Bootとログ

まず、ログフレームワーク

     Xiao Zhang:大規模な分散システムを開発しました。

  1.  System.out.println( "");主要なデータをコンソールに出力し、それを削除しますか?ファイルに書き込みますか?
  2. システムのいくつかの実行時情報を記録するためのフレームワーク、ログフレームワーク、zhanglogging.jar、
  3. 背の高いいくつかの機能?非同期モード?自動アーカイブ?xxxx?zhanglogging-good.jar?
  4. 前のフレームを削除しますか?新しいフレームワークを導入し、以前の関連APIであるzhanglogging-prefect.jarを再変更します。
  5. JDBC ---データベースドライバ;

統一されたインターフェース層、ログファサード(ログの抽象的な層)を書いた。

特定のログ実装をプロジェクトにインポートします。以前のログフレームワークはすべて実装された抽象レイヤーです。

(1)市場でのログフレームワーク。

JUL、JCL、Jboss-logging、logback、log4j、log4j2、slf4j ...

ログファサード(ログの抽象層) ログの実装

 JCL(Jakarta Commons Logging)(廃止) 

 SLF4j(Simple Logging Facade for Java)

 jboss-logging(一般的には使用されません)

Log4j(高度なログバックなし)

 JUL(java.util.logging)(jdkに付属)

Log4j2(Apache開発は特に優れていますが、多くのフレームワークはまだ適応されていません)

 ログバック

左側でファサード(抽象的なレイヤー)を選択し、右側で実装を選択します。

  • ログファサード:SLF4J;
  • ログの実現:Logback;
  • SpringBoot:最下層はSpringフレームワークであり、SpringフレームワークはデフォルトでJCLを使用します。

SpringBootはSLF4jとlogbackを選択します。

 第二に、SLF4jログ      slf4j公式サイトリンクの使用

(1)システムでSLF4jを使用する方法。

    将来の開発では、loggingメソッドの呼び出しは、ログの実装クラスを直接呼び出すのではなく、ログ抽象化レイヤーでメソッドを呼び出す必要があります。

slf4j jarおよびlogback実装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を使用した後構成ファイルはログ実装フレームワークの独自の構成ファイルになります。

(2)レガシー問題(以前のフレームワークは独自のロギングフレームワークを使用し、最後のシステムは多くの異なるロギングフレームワークを使用していました)

  • slf4j + logback
  • 春(コモンズロギング)
  • Hibernate(jboss-logging)
  • MyBatis、xxxx

他のフレームワークと私がslf4jを使用して一緒に出力した場合でも、ロギングフレームワークのレコードを統合する方法は?

ç¹å»æ¾å¤§

  • システム内のすべてのログをslf4jに統合する方法。
  1. まず、システム内の他のログフレームワークを除外します
  2. 次に、元のロギングフレームワークをミドルウェアに置き換えます
  3. 次に、slf4jの他の実装をインポートします     

3、Spring Bootログ関係

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

SpringBootはこれをログ機能に使用します。

    <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
    </dependency>

基礎となる依存関係

 

要約:

  1. SpringBootの最下層でも、ロギングにslf4j + logbackを使用します
  2. SpringBootは他のログもslf4jに置き換えました。
  3. 中間交換パッケージ?(カラムパッケージ用のビームを盗む)
@SuppressWarnings("rawtypes")
public abstract class LogFactory {

    static String UNSUPPORTED_OPERATION_IN_JCL_OVER_SLF4J =
          "http://www.slf4j.org/codes.html#unsupported_operation_in_jcl_over_slf4j";
    
           //中间包  实际是对log4j日志 new slf4j的对象 进行替换过度

    static LogFactory logFactory = new SLF4JLogFactory();

                                

   他のフレームワークを導入したい場合はどうなりますか?このフレームワークのデフォルトのログ依存関係を削除する必要がありますか?

   Springフレームワークはcommons-loggingを使用します。

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>commons-logging</groupId>
                    <artifactId>commons-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

結論:

      SpringBootは自動的にすべてのログを適応させることができ、最下層はslf4j + logbackを使用してログを記録します。他のフレームワークを導入する場合、このフレームワークが依存するログフレームワークを除外するだけで済みます。

4、Spring Bootログの使用

   (1)Spring Boot 2.2.5公式ウェブサイトログの指示のデフォルト設定   

         

  •   SpringBootは、デフォルトでログを設定するのに役立ちます。
  // 记录器
    Logger LOGGER = LoggerFactory.getLogger(SpringBootTest.class);
    @Test
    public void contextLoad(){
        // System.out.println();
        /**
         * 日志级别由高到低
         * 日志级别:ERROR,WARN,INFO,DEBUG,或TRACE。
         * 可以调整输出的日志级别;日志就只会在这个级别以以后的高级别生效
         */
        LOGGER.trace("日志踪迹");
        LOGGER.debug("日志debug模式");
        //SpringBoot默认给我们使用的是info级别的
        //,没有指定级别的就用SpringBoot默认规定的级别;root级别
        LOGGER.info("日志提示信息");
        LOGGER.warn("日志警告信息");
        LOGGER.error("日志提示错误信息");
    }

ログ出力フォーマットの説明:

   日志输出格式:
        %d表示日期时间,
        %thread表示线程名,
        %-5level:级别从左显示5个字符宽度
        %logger{50} 表示logger名字最长50个字符,否则按照句点分割。 
        %msg:日志消息,
        %n是换行符
    -->
    %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n

# 调整日志隔离级别 wxw目录下的调成trace   springboot 默认是root级别
#logging.level.com.wxw=trace
        
# 默认是控制台输出
# 写入spring.log指定的目录。名称可以是确切的位置,也可以相对于当前目录。
#logging.file.path=springboot/log

# 指定目录 logging.file.name :写入指定的日志文件。名称可以是确切的位置,也可以相对于当前目录。
#logging.file.name=springboot/boot.log

#  在控制台输出的日志的格式
#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

ロギングプロパティ:

logging.file.name logging.file.path 説明文

(いいえ)

(いいえ)

 

コンソールの記録のみ。

特定のファイル

(いいえ)

my.log

指定したログファイルに書き込みます。名前は、正確な場所にすることも、現在のディレクトリからの相対にすることもできます。

(いいえ)

特定のディレクトリ

/var/log

spring.log指定されたディレクトリに書き込みます。名前は、正確な場所にすることも、現在のディレクトリからの相対にすることもできます。

(2)カスタムログ設定

       クラスパスに適切なライブラリを含めることで、さまざまなロギングシステムをアクティブ化Environmentできます。また、クラスパスのルートディレクトリまたは次のSpring プロパティで指定された場所に適切な構成ファイルを  提供することで、さまざまなロギングシステムをさらにカスタマイズできますlogging.config

  •  デフォルトのロギングを無効にするorg.springframework.boot.logging.LoggingSystemsystemプロパティを使用して、Spring Bootが特定のロギングシステムを使用するように強制できます。この値は、実装の完全修飾クラス名である必要がありますLoggingSystem値を使用して、Spring Bootのログ設定を完全に無効にすることもできますnone。
  • 各ログフレームワークの独自の構成ファイルをクラスパスの下に配置します。SpringBootはデフォルトの構成を使用しません
ロギングシステム カスタマイズ

ログバック

logback-spring.xml、  logback-spring.groovy、  logback.xml、または logback.groovy

Log4j2

log4j2-spring.xml または log4j2.xml

JDK(Java Util Logging)

logging.properties

         

注:

  • logback.xml:ログフレームワークによって直接認識されます。
  • logback-spring.xml:ログフレームワークはログ構成アイテムを直接ロードしません。ログ構成はSpring Bootによって解析され、Spring Bootの高度なプロファイル機能を使用できます
  • Springboot環境はオープンモードに切り替わります、(1)プロパティ/ yml設定ファイル(2)コマンドライン設定
<springProfile name="staging">
    <!-- configuration to be enabled when the "staging" profile is active -->
      可以指定某段配置只在某个环境下生效
</springProfile>

たとえば、次のとおりです。

<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
        <!--
        日志输出格式:
            %d表示日期时间,
            %thread表示线程名,
            %-5level:级别从左显示5个字符宽度
            %logger{50} 表示logger名字最长50个字符,否则按照句点分割。 
            %msg:日志消息,
            %n是换行符
        -->
        <layout class="ch.qos.logback.classic.PatternLayout">
            <springProfile name="dev">
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} ---->
                      [%thread] ---> %-5level %logger{50} - %msg%n</pattern>
            </springProfile>
            <springProfile name="!dev">
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} ==== [%thread] ==== 
                                     %-5level %logger{50} - %msg%n</pattern>
            </springProfile>
        </layout>
    </appender>

ログ構成ファイルとしてlogback.xmlを使用し、プロファイル機能も使用すると、次のエラーが発生します

no applicable action for [springProfile]

5、Spring Bootスイッチングログフレームワーク

  slf4jのログ適応図に従って、関連する切り替えを実行できます。

  (1)slf4j + log4jの方法。

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
  <exclusions>
    <exclusion>
      <artifactId>logback-classic</artifactId>
      <groupId>ch.qos.logback</groupId>
    </exclusion>
    <exclusion>
      <artifactId>log4j-over-slf4j</artifactId>
      <groupId>org.slf4j</groupId>
    </exclusion>
  </exclusions>
</dependency>

<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-log4j12</artifactId>
</dependency>

log4j2に切り替える

 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <exclusion>
                    <artifactId>spring-boot-starter-logging</artifactId>
                    <groupId>org.springframework.boot</groupId>
                </exclusion>
            </exclusions>
        </dependency>

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>

 

元の記事を108件公開 58のような 50,000以上の訪問

おすすめ

転載: blog.csdn.net/qq_41893274/article/details/104741988