ネットワーク

Teratermマクロでログを自動取得する|logopenとlogclose

ネットワーク機器の設定確認やトラブル調査では、実行したコマンドの結果をログに残すことが求められます。Teratermマクロの logopenlogclose を使えば、ログ取得を自動化できます。

構文

logopen <ファイルパス> <バイナリフラグ> <追記フラグ>
logclose

使用例

FileName = 'test-FW_20210601.txt'
getdir MacroPath
makepath LogFilePath MacroPath FileName

; ログ開始(既存ファイルがあれば追記)
logopen LogFilePath 0 1

sendln 'show version'
wait '#'

; ログ終了
logclose

フラグの意味

引数 意味
バイナリフラグ 0 テキストモード(通常はこちら)
バイナリフラグ 1 バイナリモード(制御コードもそのまま記録)
追記フラグ 0 既存ファイルを上書きする
追記フラグ 1 既存ファイルに追記する

同じ機器のログを何度も取る場合、上書き(0)にしていると前回のログが消えます。作業ログとして残したいなら追記(1)にしてください。

ログの保存先を指定する

getdir:マクロがあるフォルダを取得

getdir MacroPath

MacroPath にマクロファイルが置かれているフォルダのパスが入ります。

makepath:フォルダパスとファイル名を結合

makepath LogFilePath MacroPath FileName

フォルダのパスとファイル名を、区切り文字(\)を補って結合します。自分で strconcat\ を足すより安全です。

この2つを組み合わせることで、マクロと同じフォルダにログが出力されるようになります。マクロをどこに置いても動くので、複数人で使い回すときに便利です。

logcloseを忘れるとどうなるか

logclose を書かないと、ログファイルが開いたままになります。TeraTermを閉じれば解放されますが、次のマクロが同じファイルを開けずにエラーになることがあります。

接続に失敗してマクロを end で終了する場合も、その前に logclose を入れてください。

testlink
pause 2
if result <> 2 then
  logclose
  messagebox "接続できませんでした。" "接続エラー"
  end
endif

ログにタイムスタンプを入れる

TeraTermの設定でタイムスタンプを有効にしていれば、ログの各行に時刻が入ります。マクロから設定する場合は次のように書きます。

setdebug 0
logopen LogFilePath 0 1

行ごとの時刻が必要かどうかは用途によります。設定変更前後の比較(diff)をとりたい場合、タイムスタンプが入っていると差分だらけになるため、オフにしておくほうが扱いやすいです。

関連記事

-ネットワーク