TeraTermの自動ログ取得ではなく、マクロでログを制御する方法

皆さん。TeraTerm(テラターム)の自動ログ取得設定はされていますか?

一番ポピュラーな設定が「設定」メニューから「その他の設定」を選択。「ログ」タブからログファイル名・ログ保存先を設定して「自動的にログ取得を開始する」をチェックしておく方法ですよね。
「設定」メニューから「その他の設定」を選択 「ログ」タブから自動ログ取得を設定

詳しくは ⇒ Tera Termログ取得-自動でログの取得を開始する設定

サーバ操作を行う上で、操作ログを取得しておく事は非常に重要です。(後からあの時どんなコマンド打っただろうとか、あの時の実行結果はどんな表示だったろうとか見返す事が多々あるからなんです)

しかし時においては、デスクトップ上にログを取りたいとか、自動ログ取得設定ではなく個別に操作したい場合がありますよね。(手動操作の場合は、一旦ログ取得を停止し、再度ログの取得を開始する事で対応可能です)

しかし、TeraTermマクロでログ取得を制御したい場合においては、自動ログ取得を設定していると、そちらが優先(先に開始される)されてしまう為にうまく機能しないんです。

しかしご安心を!

そこでここでは、「設定」-「その他の設定」の「ログ」タブから自動的にログ取得を開始する設定を行っている場合においても、マクロ側で設定した内容(ログの取得場所・ファイル名等々)でログ取得を開始する方法をご紹介したいと思います。

ポイントとしては、サーバ等に接続した際に、ログ取得がなさているかを判別し、取られている場合は一旦ログ取得を停止し再度マクロ側の制御で「デスクトップ」にログ取得を開始するって感じです。

それでは設定方法を確認していきましょう。

スポンサーリンク

自動ログ取得設定を行っていなかがらも、マクロでログ取得を制御

ログを取得しているかどうかの判別は「loginfo(バージョン4.73以降)」コマンドを利用して行います。

具体的には、以下のような記述方法になります。

実行コマンド
loginfo [logfilename]

変数[logfilename]にログファイル名が記録され、ログ取得時のフラグ状態が[result]に格納されます。ログが取得されていない場合は、[result]に「-1」が格納されます。

使用例
loginfo logfilename
if resut == -1 then
   ;; ログは取得はされていないので、そのままログ取得を開始
   logopen "ログファイル名" 0 1
else
   ;; ログが取得中の為、一旦停止してから再度ログ取得を開始
   logclose
   logopen "ログファイル名" 0 1
endif

それではサーバ接続からログ取得開始までのマクロをご紹介します。

パスワード認証のSSH接続での例になります。分かり易いように接続サーバ・ユーザ名・パスワードはTTLファイル内に直書きしています。(セキュリティ的にマズイとかは、言いっこなしでお願いします)

マクロ側でログ取得を制御マクロ

;==============================================
;; ①接続先ホスト/ユーザ名/パスワード設定 
HOSTADDR = 'IPアドレス' 
USERNAME = 'ユーザ名'
PASSWORD = 'パスワード'
;==============================================
;; ②ログファイル名の設定(ログフィルのフルパス)
;;;; ②-1、ユーザのデスクトップのパスを取得
getspecialfolder FULLPATH 'Desktop'
;;;; ②-2、ログファイル名を指定
getdate LOG_NAME '\&h_%Y%m%d_%H%M%S.log'
;;;; ②-3、フルパス完成(合体)
strconcat FULLPATH LOG_NAME
 
;; ③SSH接続コマンド作成
COMMAND = HOSTADDR 
strconcat COMMAND ':22 /ssh /2 /auth=password /user=' 
strconcat COMMAND USERNAME 
strconcat COMMAND ' /passwd=' 
strconcat COMMAND PASSWORD
 
;; ④サーバ接続
connect COMMAND
 
;; ⑤ログが取得されているかの確認
loginfo logfilename
if resut == -1 then
   ;; ログは取得はされていないので、そのままログ取得を開始
   logopen FULLPATH 0 1
else
   ;; ログが取得中の為、一旦停止してから再度ログ取得を開始
   logclose
   logopen FULLPATH 0 1
endif
 
;; ⑥マクロ終了
end

解説

①接続先ホスト/ユーザ名/パスワード設定

接続ホスト・ユーザ名・パスワード等を変数に設定しています。

②ログファイル名の設定(ログフィルのフルパス)

マクロ内で取得するログファイルのフルパスを指定しています。

ログファイルの保存先は、ユーザの「デスクトップ」を「getspecialfolder」コマンドで取得。ログファイル名はホスト名・日付を指定し、ログファイル名のフルパスを作成します。

例)
C:\Users\ユーザ名\Desktop\IPアドレスorホスト名_年月日_時分秒.log

③SSH接続コマンド作成

SSH接続に必要なコマンドの作成を行っています。

④サーバ接続

「connect」コマンドでサーバーに接続します。

⑤ログが取得されているかの確認

「loginfo」コマンドで、その時点でログ取得されているか確認します。もしログ取得がなされていない場合「result」に「-1」が格納されます。その場合は普通に「logopen」コマンドでログ取得を開始します。

もしログ取得がなされている場合は、その他の数値が格納されますので、一度「logclose」でログ取得を停止します。その後「logopen」コマンドでログ取得を開始します。

⑥マクロ終了

ログ取得が開始されたらマクロを終了します。終了後もセッションは維持され通常の操作が可能です。

おわりに

この方法にも一点問題があります。

それは、一度自動ログ取得が開始されますので、本当に必要なログファイル以外にも不要なファイルが作成されるという事です。

まあこの辺りはあまり気にせず、一度使ってみてください。

スポンサーリンク

コメントを残す

このページの先頭へ