本文へスキップ
`Ctrl`+`K`

# 7.25. ログ

Groongaには2つのログファイルがあります。プロセスログとクエリーログです。プロセスログは groonga 実行ファイル の動作すべてに関することのログです。クエリーログはクエリー処理に関することだけのログです。

## 7.25.1. プロセスログ

プロセスログはデフォルトで有効になっています。プロセスログは `groonga --log-path` オプションでカスタマイズできます。各ログにはログレベルがあります。ログのレベルがGroongaプロセスのログレベルより小さいときはそのログは記録されません。ログレベルは `groonga -l` または log_level でカスタマイズできます。

### 7.25.1.1. フォーマット

プロセスログのフォーマットは以下の通りです。:

    #{TIME_STAMP}|#{L}| #{MESSAGE}

groonga-httpd や PGroonga といったマルチプロセスベースのアプリケーションでのフォーマットは以下の通りです。:

    #{TIME_STAMP}|#{L}|#{PID}: #{MESSAGE}

クエリーログ でも使われているコンテキストIDを出力することもできます。コンテキストIDも表示すると、 プロセスログ と クエリーログ の中にある関連するログを簡単に関連付けることができます。:

    #{TIME_STAMP}|#{L}|#{PID}|#{CONTEXT_ID}: #{MESSAGE}

PIDやコンテキストIDなどを表示する方法は `groonga --log-flags` を参照してください。

実行例:

    2011-07-05 08:35:09.276421|n| grn_init
    2011-07-05 08:35:09.276553|n| RLIMIT_NOFILE(4096,4096)

実行例（PIDを含む場合）:

    2011-07-05 08:35:09.276421|n|1129: grn_init
    2011-07-05 08:35:09.276553|n|1129: RLIMIT_NOFILE(4096,4096)

実行例（PIDとコンテキストIDを含む）:

    2025-01-27 16:39:40.709869|n|3901936|0x55788b59dbe0: grn_init: <14.0.9-27-gd6cd635>
    2025-01-27 16:39:40.710013|n|3901936|0x55788b59dbe0: vm.overcommit_memory kernel parameter should be 1: <0>: See INFO level log to resolve this
    2025-01-27 16:39:42.052517|n|3901936|0x55788b59dbe0: grn_fin (0)

### 7.25.1.2. `TIME_STAMP`

タイムスタンプのフォーマットは次の通りです。:

    YYYY-MM-DD hh:mm:ss.SSSSSS

フォーマット | 説明
--- | ---
`YYYY` | 年（4桁）
`MM` | 月（2桁）
`DD` | 日（2桁）
`hh` | 時（2桁）
`mm` | 分（2桁）
`ss` | 秒（2桁）
`SSSSSS` | マイクロ秒（6桁）

実行例:

    2011-07-05 06:25:18.345734

### 7.25.1.3. `L`

ログレベル（1文字）。文字がどのログレベルに対応するかは次の通りです。

フォーマット | 説明
--- | ---
`E` | 緊急
`A` | アラート
`C` | 危機的
`e` | エラー
`w` | 警告
`n` | 通知
`i` | 情報
`d` | デバッグ
`-` | ダンプ

実行例:

    E

### 7.25.1.4. `PID`

プロセスID。

実行例:

    1129

### 7.25.1.5. `MESSAGE`

自由形式でのログの詳細。

実行例:

    log opened.

## 7.25.2. クエリーログ

クエリーログはデフォルトでは無効になっています。 `groonga --query-log-path` オプションで有効にできます。

### 7.25.2.1. フォーマット

クエリーログのフォーマットは次の通りです。:

    #{TIME_STAMP}|#{MESSAGE}
    #{TIME_STAMP}|#{CONTEXT_ID}|#{QUERY_STATUS}#{QUERY}
    #{TIME_STAMP}|#{CONTEXT_ID}|#{QUERY_STATUS}#{ELAPSED_TIME} #{PROGRESS}
    #{TIME_STAMP}|#{CONTEXT_ID}|#{QUERY_STATUS}#{ELAPSED_TIME} #{RETURN_CODE}

実行例:

    2011-07-05 06:25:19.458756|45ea3034|>select Properties --limit 0
    2011-07-05 06:25:19.458829|45ea3034|:000000000072779 select(19)
    2011-07-05 06:25:19.458856|45ea3034|:000000000099998 output(0)
    2011-07-05 06:25:19.458875|45ea3034|<000000000119062 rc=0
    2011-07-05 06:25:19.458986|45ea3034|>quit

### 7.25.2.2. `TIME_STAMP`

タイムスタンプのフォーマットは次の通りです。:

    YYYY-MM-DD hh:mm:ss.SSSSSS

フォーマット | 説明
--- | ---
`YYYY` | 年（4桁）
`MM` | 月（2桁）
`DD` | 日（2桁）
`hh` | 時（2桁）
`mm` | 分（2桁）
`ss` | 秒（2桁）

`SSSSSS`

  マイクロ秒（6桁）

実行例:

    2011-07-05 06:25:18.345734

### 7.25.2.3. `CONTEXT_ID`

コンテキストのID。Groongaプロセスは並列に複数のリクエストを処理するためにコンテキストを作ります。各コンテキストは1つのリクエストにつき複数のログを出力します。このIDを使うとコンテキスト毎の一連のログを抽出できます。

実行例:

    45ea3034

### 7.25.2.4. `QUERY_STATUS`

フォーマット | 説明
--- | ---
`>` | クエリーが始まったことを示す文字。
`:` | クエリーが処理中であることを示す文字。
`<` | クエリーが完了したことを示す文字。

### 7.25.2.5. `MESSAGE`

自由形式でのログの詳細。

実行例:

    query log opened.

### 7.25.2.6. `QUERY`

処理対象のクエリー。

実行例:

    select users --match_columns hobby --query music

### 7.25.2.7. `ELAPSED_TIME`

クエリーの処理を開始してからの時間。単位はナノ秒。

実行例:

    000000000075770
    (It means 75,770 nanoseconds.)

### 7.25.2.8. `PROGRESS`

このときに処理した内容。

実行例:

    select(313401)
    (It means that 'select' is processed and 313,401 records are remained.)

### 7.25.2.9. `RETURN_CODE`

クエリーのリターンコード。

実行例:

    rc=0
    (It means return code is 0. 0 means GRN_SUCCESS.)