SpringBootログの使い方は?

1. ログの役割

1.1 ログとは何ですか?

  Spring BootSpring Bootロギングとは、アプリケーション内のイベントと情報を記録するメカニズムを指します。これはバグをチェックするために使用され、アプリケーションの問題を迅速に特定して解決するのに役立ちます。

機能:

  • 開発者のデバッグを支援: アプリケーションに問題がある場合、開発者はログ情報に基づいて問題を追跡し、特定できます。
  • アプリケーションの実行ステータスを理解する: ログには、アプリケーションの起動とシャットダウン、HTTP リクエストと応答、データベース操作など、アプリケーションのさまざまなイベントと情報を記録できます。
  • アプリケーションの安定性を維持する: 適切なログ レベルを設定することで、過剰なログ情報がアプリケーションのパフォーマンスに影響を与えるのを防ぐことができます。
  • セキュリティとコンプライアンスの要件に準拠する: アプリケーションのセキュリティとコンプライアンスの要件に従って、ユーザーのログイン情報、機密の操作記録など、いくつかの特定のログ情報を記録する必要があります。

2. カスタマイズされたログの印刷

  プロジェクトを作成し た後SpringBoot、「実行」をクリックすると、次の内容がコンソールにポップアップ表示されます。

  これらは実際にはシステムに付属するログです。では、ログをカスタマイズするにはどうすればよいでしょうか?

2.1 ログオブジェクトを取得する

  


import org.slf4j.Logger; //必须导这个包
import org.slf4j.LoggerFactory;

@RestController
public class TestController {

    //1.得到日志对象(当前类的日志),
    private static final Logger log = LoggerFactory.getLogger(TestController.class);
    
    ......
    
    ......
}
复制代码

  注意すべき点がいくつかあります。1 つ目は、ログ オブジェクトLoggerパッケージ  にはログ フレームワークが組み込まれていて slf4j開発者が一貫して異なるログ フレームワークを呼び出すことができることです。2 つ目は、一般に各クラスに独自のログがあります。ファイル パラメータとメソッド パラメータが推奨されます。現在のクラスの場合は であり、このログ ファイルは簡単に変更できないため、 ですSpring BootSlf4jAPIgetLoggerprivate static final

2.2 オブジェクトにログを出力させる

  Logger ログを出力するためのさまざまな方法を提供します。

@ResponseBody //返回非静态页面
@Controller

public class TestController {

    //1.得到日志对象(当前类的日志)
    private static final Logger log = LoggerFactory.getLogger(TestController.class);

    @RequestMapping("/hi")
    public String Hi(){
        //打印日志的方法
        log.trace("我是trace");
        log.debug("我是debug");
        log.info("我是info");
        log.warn("我是warn");
        log.error("我是error");

        return "Hello World!";
    }
}
复制代码

  まずプログラムを実行しましょう:

  このメソッドにアクセスするとき (ブラウザ入力パス)

  このメソッドにアクセスした後にのみログが表示されることがわかります。これはログの役割を反映している可能性があります。ログの出力がすべてであるのに、なぜこれほど多くのメソッドが提供されているのでしょうか? 印刷された内容は何を意味しますか? 明確に 5 つのメソッドを記述したのに、なぜ 3 つだけが出力されるのでしょうか? 後で 1 つずつ答えます。

2.3 ログのフォーマット

  ログ出力形式:

3. ログレベル

  作成した 5 つのメソッドのうち 3 つだけを出力したのはなぜですか? これはログレベルに関係します。

3.1 ログレベルの種類

  SpringBootログ レベルは、出力ログの冗長性を制御するために使用されます。

  ログレベルはそれぞれ異なるログ情報に対応しており、レベルが上がるほど詳細なログ情報が出力されます。さまざまなログ レベルの意味は次のとおりです。

  • トレース: トレース、少し、最低レベルを意味します。
  • debug: デバッグが必要な場合にキー情報を出力します。
  • info: 通常の印刷情報 (デフォルトのログレベル);
  • warn: 警告。使用には影響しませんが、注意が必要です。
  • error: エラー メッセージ、上位レベルのエラー ログ情報。
  • 致命的: 致命的、コード例外によりプログラムの実行を終了させるイベント。

  SpringBoot低レベルから高レベルまでの中程度のログ レベルは次のとおりですtrace < debug < info < warn < error < fatal。デフォルトのレベルは ですinfo

  ログの出力規則: 現在のレベルとそれ以上のログのみ出力可能(fatalは出力されない) 上記5種類の方法はログのレベルに応じて対応している※レベルが表示されるfatal()場合は方法がないので注意fatalプログラムは終了します。

  これが、上に 5 つのメソッドが書かれているのに、印刷されるのは 3 つだけである理由です。

3.2 ログレベルのカスタマイズ

SpringBoot設定ファイル  でログ レベルを設定できますapplication.properties

# 自定义日志级别
logging.level.root=error
复制代码

  今:

  上記はルートパスのレベルを設定するものですが、同時に異なるディレクトリに設定することもできます。

# 自定义日志级别

# 对根目录设置
logging.level.root=error
# 对controller 目录设置一个级别
longing.level.com.example.demo.controller=trace  
# 它们不会冲突,除了 com.example.demo.controller 下为 trace,其它地方都为error。
复制代码

  デフォルトのログはDemoApplicationスタートアップ クラスで出力されます。

4. ログの永続化

  永続化とは、ログをハードディスク上に配置し、ログ ファイルとして保存することを意味し、この手順は非常に重要です。

4.1 設定ファイルのパス

  構成ファイルに構成ファイルへのパスを設定します。

# 设置日志文件的目录
logging.file.path=D:\\logging\\  
复制代码

  このパスは自分で作成する必要はありません。自動的に作成され、実行を開始してアクセスします。

  デフォルトでは、自分で書き込んだログの内容を含むファイルがディレクトリに作成されます。そこで質問は、インターフェイス メソッドに複数回アクセスすると、コンテンツが上書きされるのでしょうか?

  答えは「いいえ」です。後で追加されます。

4.2 設定ファイル名

  ファイル名までさらに絞り込むことができます。

# 设置日志文件的文件名,注意这里是 name 属性
logging.file.name=D:\logging\mySpring.log
复制代码

  ここで別の質問があります。プログラムが長時間実行される場合 (本番環境など)、ログが大量に存在するはずです。それらを 1 つのファイルに保存するのは明らかに非現実的です。では、ログを自動的に分割するにはどうすればよいでしょうか。複数のファイル?

  ログファイルの保存サイズの最大値を設定できます。

# 设置日志大小的最大大小 1KB(一般不会这么小,这里用于演示)
logging.logback.rollingpolicy.max-file-size=1KB
复制代码

  この設定項目は、ログ ファイルの最大サイズを指定するために使用されます。サポートされる単位には KBMBGB などが含まれます。, ログ ファイルが指定されたサイズに達すると、新しいログ ファイルが自動的に作成され、ログ情報の記録が継続されます。上記のコードを例として挙げます。複数のリクエストの後:

5. lombokを使ってログを出力する

  lombokこれは他のメソッドを作成するのに役立つフレームワークでありget、set、非常に便利です。

lombok 出力ログ  の使用は 実際には非常に簡単で、注釈を追加するだけです。

@Controller
@ResponseBody
@Slf4j //加上这个注解,它会自己生成一个日志对象,对象名叫“log”,直接引用。
public class LogController {

    @RequestMapping("/hi")
    public String hi(){
        log.trace("我是trace");
        log.debug("我是debug");
        log.info("我是info");
        log.warn("我是warn");
        log.error("我是error");
        
        return "Hello World!";
    }
}
复制代码

おすすめ

転載: blog.csdn.net/2301_76607156/article/details/130557912