Couchbase Lite 機能解説：ロギングAPI




## 概要
Couchbase LiteのロギングAPIについて解説します。


ログ出力には、次のふたつのストリームがあります。

#### ファイルベースロギング

ファイルベースロギングでは、ログはログレベルでフィルタリングされた個別のログファイルに書き込まれます。
また、各ログレベルは個別のポリシーを持ちます。

#### コンソールベースロギング

コンソールロギングを使用すると、問題の調査のために通常のファイルベースのロギングに干渉することなく、特定のデバッグシナリオに合わせて診断出力を調整できます。

#### カスタムロギング

Loggerインターフェースを使用してカスタムロギングクラスを実装できます。



## コンソールベースロギング

コンソールログはファイルログとは独立しています。そのため、ファイルログストリームを損なうことなく変更を加えることができます。

コンソールログは、デフォルトで有効になっています。デフォルト設定を変更するには、`Database.log`のメソッドを使用して必要な値を設定します。

次の例では、コンソールベースのログのドメインとレベルを定義しています。


```JAVA
Database.log.getConsole().setDomain(LogDomain.ALL_DOMAINS);  
Database.log.getConsole().setLevel(LogLevel.VERBOSE); 
```

指定したLogDomainのログを無効にするには、LogLevelを`None`に設定します。


## ファイルベースロギング

ファイルベースのログはデフォルトで無効になっています。


### フォーマット

利用可能なファイルベースのログ形式は、以下の通りです。

- バイナリ: ストレージとパフォーマンスに最も効率的です。ファイルベースログのデフォルトフォーマットです。
- 平文(プレインテキスト)

### 構成
コンソールログと同様に、ログレベルを設定できます。

ファイルベースのロギングでは、`LogFileConfiguration`クラスのプロパティを使用して以下を指定することができます。

- ログファイルを保存するディレクトリへのログファイルパス

- ログファイルフォーマット: デフォルトはバイナリです。必要に応じて、プレーンテキストのログを出力できます。

- ログファイルの最大サイズ（バイト）。この制限を超えると、新しいログファイルが開始されます。

- ローテーションされたログファイルを保持する最大数

以下は、上記設定の適用例です。


```JAVA
final File path = context.getCacheDir();

LogFileConfiguration LogCfg =
  new LogFileConfiguration(path.toString()); ①
LogCfg.setMaxSize(10240); ②
LogCfg.setMaxRotateCount(5);　③ 
LogCfg.setUsePlainText(true); ④
Database.log.getFile().setConfig(LogCfg);
Database.log.getFile().setLevel(LogLevel.INFO); ⑤
```

①ログファイルディレクトリを設定します。
②ログファイルの最大サイズ（バイト）を設定します。
③最大回転数をデフォルト（1）から5に変更します(この場合、5つのローテーションされたログファイルとアクティブなログファイルの6つのファイルが一度に存在する可能性があります）。
④フォーマットをプレインテキストに変更します。
⑤ログ出力レベルをデフォルト（「警告」）から「情報」に変更します。



## カスタムロギング
Couchbase Liteでは、コールバック関数を登録してCouchbase Liteログメッセージを受信できます。メッセージは、外部のログフレームワークを使用してログに記録できます。

これを行うには、アプリは`Logger`インターフェースを実装する必要があります。加えて、`log.setCustom()`を使用してカスタムロギングを有効にする必要があります。

### ロガーインターフェースの実装
ここでは、ロガーインターフェイスを実装するコードを紹介します。


```JAVA
class LogTestLogger implements Logger {
    @NonNull
    private final LogLevel level;

    public LogTestLogger(@NonNull LogLevel level) { this.level = level; }

    @NonNull
    @Override
    public LogLevel getLevel() { return level; }

    @Override
    public void log(@NonNull LogLevel level, @NonNull LogDomain domain, @NonNull String message) {
    }
}
```

### カスタムログの有効化


```JAVA
Database.log.setCustom(new LogTestLogger(LogLevel.WARNING)); 
```

ここでは、カスタムロガーを「警告」のレベルに設定しています。


## バイナリログのデコード
`cbl-log`ツールを使用して、バイナリログファイルをデコードできます。


### macOS

`wget`を使用してcbl-logツールをダウンロードします。

```shell
wget https://packages.couchbase.com/releases/couchbase-lite-log/3.0.0-beta02/couchbase-lite-log-3.0.0-beta02-macos.zip
```

zipファイルを解凍し、`bin`ディレクトリへ移動し、`cbl-log`を実行します。

```shell
cbl-log logcat LOGFILE <OUTPUT_PATH>
```

### CentOS

`wget`を使用してcbl-logツールをダウンロードします。

```shell
wget https://packages.couchbase.com/releases/couchbase-lite-log/3.0.0-beta02/couchbase-lite-log-3.0.0-beta02-centos.zip
```

zipファイルを解凍し、`bin`ディレクトリへ移動し、`cbl-log`を実行します。

```shell
cbl-log logcat LOGFILE <OUTPUT_PATH>
```

### Windows


PowerShellを使用してcbl-logツールをダウンロードします。

```shell
Invoke-WebRequest https://packages.couchbase.com/releases/couchbase-lite-log/3.0.0-beta02/couchbase-lite-log-3.0.0-beta02-windows.zip -OutFile couchbase-lite-log-3.0.0-beta02-windows.zip
```

zipファイルを解凍し、`bin`ディレクトリへ移動し、`cbl-log.exe`を実行します。

```shell
cbl-log.exe logcat LOGFILE <OUTPUT_PATH>
```

## 関連情報

https://docs.couchbase.com/couchbase-lite/3.0/android/troubleshooting-logs.html