# porter/libsrc/porter/infra/potrLog.c

# 1 ファイル

## 1.1 porter/libsrc/porter/infra/potrLog.c

porter ロガー実装。

trace-util のプロキシモジュールです。
OS レベルのトレース出力 (Linux: syslog、Windows: ETW)、 ファイルトレース、stderr 出力のすべてを trace-util に委任します。

OS | 出力先
--- | ---
Linux | syslog (trace-util 経由)、ログファイル (trace-util 経由)、stderr (trace-util 経由、console 指定時)
Windows | ETW (trace-util 経由)、ログファイル (trace-util 経由)、stderr (trace-util 経由、console 指定時)

### 1.1.1 作者

c-modernization-kit sample team

### 1.1.2 バージョン

1.0.0

### 1.1.3 日付

2026/03/09

### 1.1.4 スレッド セーフティ

本モジュールはスレッドセーフです。
すべての出力制御は trace-util が内部で排他制御を行います。

### 1.1.5 著作権

Copyright (C) CompanyName, Ltd. 2026. All rights reserved.

# 2 関数

## 2.1 log_basename

    static const char *log_basename ( const char *path )

パスの末尾ファイル名部分を返す。

‘/’ または ’' の最後の出現以降の文字列を返します。
区切り文字が存在しない場合は path をそのまま返します。

## 2.2 potrLogConfig

    POTR_EXPORT int POTR_API potrLogConfig ( PotrLogLevel level, const char *log_file, int console )

ロガーを設定します。

本関数は potrOpenService() の前に呼び出してください。
複数回呼び出した場合は最後の設定が有効になります。

### 2.2.1 引数

- level [in] 出力する最低ログレベル。POTR_TRACE_NONE でログ無効 (デフォルト)。
- log_file [in] ログファイルのパス。NULL または空文字列を指定するとファイル出力なし。
- console [in] 0 以外を指定すると標準エラー出力 (stderr) にも出力します。

### 2.2.2 戻り値

成功時は POTR_SUCCESS、log_file が開けない場合は POTR_ERROR を返します。

### 2.2.3 警告

log_file に指定したパスが書き込み不可の場合は POTR_ERROR を返します。

### 2.2.4 出力先

OS | 出力先
--- | ---
Linux | syslog (trace-util 経由)、ログファイル (trace-util 経由、log_file 指定時)、stderr (trace-util 経由、console 指定時)
Windows | ETW (trace-util 経由)、ログファイル (trace-util 経由、log_file 指定時)、stderr (trace-util 経由、console 指定時)

### 2.2.5 ログフォーマット

OS トレース (syslog / ETW) およびファイルへの出力フォーマット:

    [file.c:line] message

stderr への出力フォーマット (タイムスタンプは UTC、L はレベル文字):

    YYYY-MM-DD HH:MM:SS.mmm L [file.c:line] message

### 2.2.6 ログレベル一覧

レベル | 値 | 出力内容
--- | --- | ---
POTR_TRACE_CRITICAL | 0 | 致命的エラー
POTR_TRACE_ERROR | 1 | 操作失敗
POTR_TRACE_WARNING | 2 | NACK・REJECT・回復可能な異常
POTR_TRACE_INFO | 3 | サービス開始・終了・接続状態変化
POTR_TRACE_VERBOSE | 4 | ソケット操作・設定値・パケット送受信・スレッド動作
POTR_TRACE_NONE | 5 | ログ無効 (デフォルト)

### 2.2.7 使用例

    // INFO 以上をファイルと stderr に出力
    potrLogConfig(POTR_TRACE_INFO, "/var/log/porter.log", 1);

    // VERBOSE 以上をファイルのみに出力
    potrLogConfig(POTR_TRACE_VERBOSE, "/tmp/porter.log", 0);

    // ログを無効化
    potrLogConfig(POTR_TRACE_NONE, NULL, 0);

### 2.2.8 スレッド セーフティ

本関数はスレッドセーフです。
出力制御は trace-util が内部で排他制御を行うため、ログを出力中のスレッドが存在する場合でも 安全に設定を変更できます。

## 2.3 potr_log_write

    void potr_log_write ( PotrLogLevel level, const char *file, int line, const char *fmt, ... )

ログメッセージを書き込みます (内部関数)。

g_log_level より低いレベルのメッセージは無視されます (高速パス)。
本関数を直接呼び出さず、POTR_LOG マクロを使用してください。

### 2.3.1 引数

- level [in] ログレベル。
- file [in] ソースファイル名 (__FILE__)。
- line [in] 行番号 (__LINE__)。
- fmt [in] printf 形式のフォーマット文字列。
- … [in] フォーマット引数。

# 3 変数

## 3.1 s_trace

    static trace_provider_t *s_trace = NULL;

トレースプロバイダハンドル。trace_init() で一度だけ初期化する。