Quick Start

en ja

1. ログディレクトリを確認する

たとえばログディレクトリが次の状態だとします。

C:\opt\ese774\log\
├── cobotta3_server2.log
├── cobotta3_server2.log.2026-02-19
├── cobotta4_server.log
├── cobotta4_server.log.2026-04-06
├── cobotta4_server2.log
└── cobotta4_server2.log.2026-06-16

現在ログは、

<log_name>.log

ローテーション済みログは、

<log_name>.log.YYYY-MM-DD

です。

2. LogServer を起動する

from log_ctrl.server_grpc import log_grpc_server

GRPC_HOST = "0.0.0.0"
GRPC_PORT = 50060
LOG_DIR = r"C:\opt\ese774\log"

log_grpc_server(
    grpc_host=GRPC_HOST,
    grpc_port=GRPC_PORT,
    log_dir=LOG_DIR,
)

LOG_DIR は実際に存在するログディレクトリを指定します。存在しない場合、LogCtrl の生成時に NotADirectoryError になります。

3. クライアントを作成する

from log_ctrl.server_grpc import DeviceProxy

client = DeviceProxy(
    "log",
    server_ip="127.0.0.1",
    server_port=50060,
    set_timeout_sec=10.0,
    async_mode=False,
)

"log" は log_ctrl.server_grpc が register_device_proxy() で登録している DeviceProxy 名です。

4. まず log_name 一覧を取得する

特定のログ名をコードへ固定するのではなく、最初にサーバー上に実在するログを確認できます。

log_names = client.log_names()
print(log_names)

例:

[
    "cobotta3_server2",
    "cobotta4_server",
    "cobotta4_server2",
]

5. 日付一覧を取得する

log_name = log_names[0]

dates = client.dates(log_name)
print(dates)

dates() は実在する <log_name>.log.YYYY-MM-DD の日付だけを返します。現在の <log_name>.log は日付一覧には入りません。

6. 現在ログを取得する

log_names() には、ローテーション済みファイルしか残っていない log_name も含まれる可能性があります。現在ログを読む場合は exists() で確認できます。

if client.exists(log_name):
    data = client.read(log_name)
    print("bytes:", len(data))

read() の戻り値は bytes です。

文字列として扱う場合:

text = data.decode("utf-8")
print(text)

7. ローテーション済みログを取得する

dates = client.dates(log_name)

if len(dates) > 0:
    date = dates[0]

    data = client.read(
        log_name,
        date=date,
    )

    print("date:", date)
    print("bytes:", len(data))

dates() は新しい日付から順に返します。そのため dates[0] が一覧中の最新日付です。

8. トラブル調査用に実ファイル一覧を見る

files = client.raw_files()
print(files)

raw_files() はログとして解析できるファイルだけに限定せず、log_dir 以下に存在する全ファイルを相対パスで返します。

必要なら、その相対パスをそのまま read_raw() へ渡せます。

data = client.read_raw(
    "cobotta4_server.log.2026-04-06"
)

9. 終了する

client.close()

通常は try / finally で確実に閉じます。

try:
    print(client.log_names())
finally:
    client.close()