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 指定時) |
c-modernization-kit sample team
1.0.0
2026/03/09
本モジュールはスレッドセーフです。
すべての出力制御は trace-util が内部で排他制御を行います。
Copyright (C) CompanyName, Ltd. 2026. All rights reserved.
static const char *log_basename ( const char *path )パスの末尾ファイル名部分を返す。
‘/’ または ’' の最後の出現以降の文字列を返します。
区切り文字が存在しない場合は path をそのまま返します。
POTR_EXPORT int POTR_API potrLogConfig ( PotrLogLevel level, const char *log_file, int console )ロガーを設定します。
本関数は potrOpenService() の前に呼び出してください。
複数回呼び出した場合は最後の設定が有効になります。
成功時は POTR_SUCCESS、log_file が開けない場合は POTR_ERROR を返します。
log_file に指定したパスが書き込み不可の場合は POTR_ERROR を返します。
| 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 指定時) |
OS トレース (syslog / ETW) およびファイルへの出力フォーマット:
[file.c:line] messagestderr への出力フォーマット (タイムスタンプは UTC、L はレベル文字):
YYYY-MM-DD HH:MM:SS.mmm L [file.c:line] message| レベル | 値 | 出力内容 |
|---|---|---|
| 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 | ログ無効 (デフォルト) |
// 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);本関数はスレッドセーフです。
出力制御は trace-util が内部で排他制御を行うため、ログを出力中のスレッドが存在する場合でも 安全に設定を変更できます。
void potr_log_write ( PotrLogLevel level, const char *file, int line, const char *fmt, ... )ログメッセージを書き込みます (内部関数)。
g_log_level より低いレベルのメッセージは無視されます (高速パス)。
本関数を直接呼び出さず、POTR_LOG マクロを使用してください。
static trace_provider_t *s_trace = NULL;トレースプロバイダハンドル。trace_init() で一度だけ初期化する。