【Tera Term】ログ保存をマクロで制御するときの注意点と対応方法

マクロ

【注意点】Tera Term マクロ実行時のログ保存動作

Tera Term のマクロでは、logopenlogclose を使用してログの保存の開始/終了やログ保存先パスなどを制御できます。ただし、注意点があります。

Tera Term の設定における [その他の設定 > ログ] 画面にて以下画像のように [自動的にログ採取を開始する] にチェックを入れている場合、マクロの logopen で指定した内容ではなく、[その他の設定 > ログ] 画面で設定した内容が優先されます。

この事象への単純な対応方法としては、マクロを実行する前に [自動的にログ採取を開始する] のチェックを外して設定保存してからマクロを実行することですが、マクロを実行する度に[設定変更/設定戻し]をするのは面倒です。

そこで以下では Tera Term の設定変更ではなくマクロ側の処理で対応する方法を記載します。

【対応方法】logopen する前にログ保存状況をチェックする

Tera Term の設定で [自動的にログ採取を開始する] にチェックを入れている状況においてマクロで機器にログインした場合、ログイン直後から [その他の設定 > ログ] 画面の設定に基づいてログ保存が開始されている状態になっています。

そこで、マクロの処理内容を以下のような流れにします。

  1. 機器にログインする
  2. ログ保存が開始されているかを確認する
  3. もしログ保存が開始されていたら、ログ保存を終了する (logclose)
  4. ログ保存を開始する (logopen)
  5. コマンド実行などの処理を行う
  6. ログ保存を終了する (logclose)
  7. 機器からログアウトする

ログ保存状況の確認方法

マクロで現在のログ保存状況を確認するためには loginfo 関数を使用します。

loginfo は以下の構文で使用します。

loginfo の構文

  • loginfo <任意の変数名>

戻り値

  • ログ保存を開始している場合、指定した変数にログファイル名(フルパス)が格納される
  • 変数 result に状況に応じて整数値が格納される
    • ログ保存をしていない場合は「-1」
    • ログ保存をしている場合は on のフラグの合計値
      • 1 → バイナリフラグ
      • 2 → アペンドフラグ
      • 4 → プレインテキストフラグ
      • 8 → タイムスタンプフラグ
      • 16 → ダイアログ非表示フラグ

ここではログ保存をしているかどうかを確認したいため、loginfo を実行した結果「変数 result に -1 が格納されているかどうか」を確認します。

具体的なマクロコードは以下のようになります。

;ログ保存状況をチェック
loginfo filename

;ログ保存されていたら logclose
if result != -1 then
    logclose
endif

result が -1 でない場合はログが保存されていると言えるので、result が -1 でない場合は logclose を実行してログ保存を終了させます。

マクロテンプレート

今回説明した内容を反映したマクロテンプレートは以下のようになります。

;機器にログイン(SSHの場合)
connect "x.x.x.x /ssh /auth=password /user=xxx /passwd=xxx"

;ログ保存状況をチェック
loginfo filename

;ログ保存されていたら logclose
if result != -1 then
    logclose
endif

;改めてログ保存開始
logopen "<ログファイルパス>" 0 0

;コマンド実行などの処理
xxxxx

;ログ保存を終了
logclose

;機器からログアウト
xxxx

参考資料

https://ttssh2.osdn.jp/manual/4/ja/macro/command/loginfo.html

タイトルとURLをコピーしました