Rotation

en ja

log_ctrl がログとして認識するファイル名は次の2形式です。

<log_name>.log
<log_name>.log.YYYY-MM-DD

例:

cobotta4_server.log
cobotta4_server.log.2026-03-31
cobotta4_server.log.2026-04-06

現在ログ

日付suffixを持たない、

<log_name>.log

が現在ログです。

現在ログには current のような特別な日付名や仮想ファイル名はありません。

data = client.read("cobotta4_server")

は、

cobotta4_server.log

を読みます。

ローテーション済みログ

data = client.read(
    "cobotta4_server",
    date="2026-04-06",
)

は、

cobotta4_server.log.2026-04-06

を読みます。

日付は厳密に YYYY-MM-DD 形式として検証されます。

日付一覧

dates = client.dates(
    "cobotta4_server"
)

dates() は、実際に存在する、

<log_name>.log.YYYY-MM-DD

を調べ、正しい日付suffixを持つファイルだけを返します。

戻り値は新しい日付から順にソートされます。

[
    "2026-04-06",
    "2026-03-31",
    "2026-03-30",
]

日付は連続しているとは限りません。存在しない日付を補完しません。

また、現在の <log_name>.log は dates() の戻り値には含まれません。

log_names()

log_names() は、現在ログとローテーション済みログの両方から log_name を抽出します。

したがって、

old_device.log.2026-02-19

だけが存在し、

old_device.log

が存在しない場合でも、

client.log_names()

には "old_device" が含まれます。

現在ログの有無は別途、

client.exists("old_device")

で確認できます。

ローテーション管理の責務

log_ctrl 自身は、

  • ログの書き込み

  • ローテーション

  • 保持世代数の管理

  • 古いログの削除

を行いません。

これらはログを書き込む側の責務です。log_ctrl はディレクトリに実在するファイルだけを参照します。

想定外ファイル

log_names() と dates() は上記のログ命名規則に合うファイルだけを解析します。

一方、トラブル調査用の、

client.raw_files()

は命名規則でフィルタせず、log_dir 以下の全ファイルを返します。

そのため、ログ命名規則外のファイルでも、

client.read_raw(relative_path)

で内容を取得できます。

パス制限

通常の read()、tail()、exists()、dates() では log_name にパスを含めることはできません。また log_name 自体に .log を含めることもできません。

read_raw() は相対パスを受け取りますが、解決後のパスが log_dir の外へ出る指定は拒否されます。絶対パスも使用できません。