はじめに
あけましておめでとうございます。
年明けボケでブログをサボっていましたが、再開します。
突然ですが、皆様はターミナルクライアントは何を使用していますか?
私と同じく職種経験が長くない方や初学者の方は、WindowsだとTeraterm、Macであれば、純正のターミナルかIterm2などを使っている方が多いのではないのでしょうか。
今回は、そのMacにおけるターミナルの自動ログ保存設定をするまでの奮闘を記事にしてみました。
サボった上に息抜き回みたいですが、どなたかのお役にたてれば嬉しいです。
とにかく結論を!という方は、目次から結論に飛んでください!
まずは、どんな手法があるか検索
調べたところ以下のような手法があり一つずつ試していきました。
- ターミナルのプロファイル設定から、シェル起動時の実行コマンドにscriptコマンドを指定してログを書き出す。
- ターミナルの.bashrcや.zshrcなどにscriptコマンドで出力したいログファイルを指定して書き出す。
- iTermの標準機能で、ログ出力を有効化してローカルのフォルダを指定する。
- tmuxなどを用いて、詳細設定でログ出力する(ことができるらしい)
ほかにも手法はあったのですが、簡単な手法(1,2,3など)を採用しようとすると、ANSIの制御文字列が残る問題に直面していました。。
catやlessコマンドであれば、ANSIを表示せずに見れるという記事もありましたが、、、どうしても除去したうえでVSCodeなどのテキストエディタでログファイルを閲覧したいと思い、調べ続けたところ、ANSIを除去できるツールを発見しました!その名もANSI filterです。
こちらをhomebrewでインストールして、.zshrcに後述のように記載したところ、無事、ログファイルを自動保存できました。
結論
以下が実施した内容です。
- .zshrcに
script
コマンドを記載して、コマンドをログファイルに出力する - それだけだとANSI制御文字が残ってしまうので、anisifilterをかけて除去する
- シェルを終了する時は、2回
Exit
を叩いて抜ける
.zshrcに記載した内容
if [ -z "$STARTED" ]; then
export STARTED=yes
LOG_PATH_START="/Users/{ユーザー名}/{terminallogなど}/`date "+%Y-%m-%d_%H%M%S"`.log"
script $LOG_PATH_START
trap 'LOG_PATH_END="/Users/{ユーザー名}/{terminallogなど}/`date "+%Y-%m-%d_%H%M%S"`.log"; ansifilter -i $LOG_PATH_START -o $LOG_PATH_END; unset $STARTED' EXIT
fi
2024年2月7日追記
テキストエディタをcursorに移行したタイミングで突如動かなくなり調査したところ、export STARTED=yesを保持し続けて、ログ取得されなくなっていた。ターミナルAppだと問題ないので、VScodeなど統合ターミナルを使用すると発生した。trapコマンドにunset $STARTEDでyesをリセットすることで解決した。
まとめ
最後まで御覧いただきありがとうございました!!
今年はコンテナ、Kubernetes中心に学習進めていきます!
よろしくお願いします!
コメント