ネットワーク機器の設定確認やトラブル調査では、実行したコマンドの結果をログに残すことが求められます。Teratermマクロの logopen と logclose を使えば、ログ取得を自動化できます。
構文
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)をとりたい場合、タイムスタンプが入っていると差分だらけになるため、オフにしておくほうが扱いやすいです。