1. ログの役割
1.1 ログとは何ですか?
Spring Boot
Spring 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 Boot
Slf4j
API
getLogger
private 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
复制代码
この設定項目は、ログ ファイルの最大サイズを指定するために使用されます。サポートされる単位には KB
、MB
、GB
などが含まれます。, ログ ファイルが指定されたサイズに達すると、新しいログ ファイルが自動的に作成され、ログ情報の記録が継続されます。上記のコードを例として挙げます。複数のリクエストの後:
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!";
}
}
复制代码