Teratermでマクロを作成し、ログを取得させるようにした人であれば知っていると思うが、Teratermのログ取得は、TERATERMI.INIで自動取得設定がされていた場合、そちらが優先されてしまう。 つまり、Teratermマクロ側で指定した場所、名前ではなく、TERATERM.INIで指定した場所、名前で記録される。もちろん、そのログの中身も同様だ。
今回は、Teraterm側で自動ログ取得が有効になっている場合であっても、ログの取得をマクロ側で制御するための方法を記述する。 なお、この方法はTeratermのバージョンが4.73以降の場合に利用できる。
Teratermのログ取得の優先順位がTERATERM.INI > Teratermマクロである事は先ほど述べたが、これをマクロ側で管理させるようにするには、どうすればよいのだろうか? 対処方法は単純で、TERATERM.INI側で制御しているログの記録をマクロで一度停止し、マクロ側でログの記録を再開させる事で対応が可能だ。しかし、ただ停止→記録再開だと、TERATERM.INI側で制御していたログの記録とマクロ側で記録したログの場所や名前が違う場合、別ファイルとして扱われてしまう。
これに対処するため、TERATERM.INIで制御していたログを移動、名称を変更し、マクロ側でログの記録再開時に追記させる事で対応できる。 現在記録しているログ情報を取得するには、Teraterm Ver4.73より導入された「loginfo」関数を用いる事で対応可能だ。
以下に、サンプルコードを記載する。
●Sample.ttl
;============================================
; Filename : ttllog.ttl
; Description : Teratermでログの自動取得が有効になっている場合でも、マクロ側でログを管理する際のサンプル
; Author : Blacknon
; Created : 2014/12/30
; modified :
;============================================
;; Teraterm側のログ情報を定義する。
;; 本サンプルでは、以下のように定める。
;; ●ログはTeratermマクロの設置されているディレクトリ配下の「log」ディレクトリ
;; ●ログ名は「yyyymmDD_HHMMss_ホスト名.log」
;; 接続先、ユーザ名、パスワードを設定する。
HOST_CONNECT_IP='サーバのIPアドレス'
HOST_CONNECT_USER='ユーザ名'
HOST_CONNECT_PASS='パスワード'
;; 1.ログ作成用にカレントディレクトリの情報を取得する
Getdir CurrentDir
CURRENTPATH = CurrentDir
Strconcat CURRENTPATH '\'
;; 2.ログ名に利用する日付情報を取得する
Getdate Str_Getdate
Strcopy Str_Getdate 1 4 Str_Year
Strcopy Str_Getdate 6 2 Str_Mon
Strcopy Str_Getdate 9 2 Str_Day
;; 3.ログ名に利用する時刻情報を取得する
Gettime Str_Gettime
Strcopy Str_Gettime 1 2 Str_Hour
Strcopy Str_Gettime 4 2 Str_Min
Strcopy Str_Gettime 7 2 Str_Sec
;; 4.接続処理を行う
COMMAND = HOST_CONNECT_IP
Strconcat COMMAND ':22 /ssh /2 /auth=password /user='
Strconcat COMMAND HOST_CONNECT_USER
Strconcat COMMAND ' /passwd='
Strconcat COMMAND HOST_CONNECT_PASS
Connect COMMAND
;; 5.マクロのログ名を設定する
LOGPATH = CURRENTPATH
Strconcat LOGPATH Str_Year
Strconcat LOGPATH Str_Mon
Strconcat LOGPATH Str_Day
Strconcat LOGPATH '_'
Strconcat LOGPATH Str_Hour
Strconcat LOGPATH Str_Min
Strconcat LOGPATH Str_Sec
Strconcat LOGPATH '_'
Strconcat LOGPATH HOST_CONNECT_IP
Strconcat LOGPATH '.log'
;; 6.現在取得しているTeratermログの情報を取得する
Loginfo NOW_LOGFILE
;; Resultの値が-1の場合、ログは記録されていない
If result <> -1 Then
;一度、ログの記録を停止する
LogClose
;先ほどまで取得していたログを新しいログ名でコピーする
Filecopy NOW_LOGFILE LOGPATH
;取得していたログファイルを削除する
Filedelete NOW_LOGFILE
ENDIF
Logopen LOGPATH 0 1 1 1
END