
# ロギング

ファミリーのすべてのパッケージと、それを使って作るアプリケーションは、`SpringLog` という 1 つのファサードを通してログを出します。

## 使う理由

ログの出力先はライブラリではなく、アプリケーションが決めるべきです。ファサードが 1 つなら、フレームワーク、スターター、自分のコードがすべて同じ方法でレコードを書き、表示内容と出力先を 1 か所で決められます。レベルはロガー名ごとに設定できるため、アプリケーションの一部だけデバッグ出力を有効にできます。

ロギングのバックエンドがない場合、`info` 以上のレコードが `[logger] LEVEL: message` の形式でコンソールに書かれます。`spring_boot_starter_logging` のようなバックエンドはハンドラーを置き換えます。Spring Boot を使う場合、レベルは `logging.level.*` プロパティから設定されます。

アプリケーションのログに `print` を使わないでください。レベルもロガー名もなく、出力先を変えられません。

## 例

```dart
import 'package:spring_core_dart/spring_core_dart.dart';
import 'package:my_app/spring_gen/src/beans.spring.dart'; // 生成されたファイル

@Service()
@Log() // `log` ゲッター: ロガー `my_app.Checkout`
class Checkout {
  void pay(String orderId) {
    log.info('order placed', fields: {'order': orderId});
    // クロージャーは debug が有効なときだけ呼ばれる。
    log.debug(() => 'paying $orderId');
  }
}
```

## ページ一覧

- [SpringLog](spring-log.md): ロガー、レベル、`@Log`、構造化フィールド、ハンドラー、コンソールの形式。

## 関連項目

- [Beans](../beans/index.md)
- [Configuration](../config/index.md)
