現象
powershellで出力するログファイルをCloudWatch Logsに転送し、AWSコンソール上で文字化けしてしまいました。
原因分析
以前の記事で下記のような記載があり、それを参考に見てみます。
原因はCloudWatchエンコード値と転送対象ログファイルのエンコード一致していないからです。
参考リンク:
https://cloud5.jp/windows-aws-cloudwatch-logs/
CloudWatch エージェント設定ファイルの確認
確認すると、下記のようになっています。
・CloudWatchエンコード値:shift_jis
・転送対象ログファイルのエンコード:Unicode
※CloudWatchエンコード値:指定できる値は以下のとおりです。
デフォルト値は utf-8 です。
ascii, big5, euc-jp, euc-kr, gbk, gb18030, ibm866, iso2022-jp, iso8859-2, iso8859-3, iso8859-4, iso8859-5, iso8859-6, iso8859-7, iso8859-8, iso8859-8-i, iso8859-10, iso8859-13, iso8859-14, iso8859-15, iso8859-16, koi8-r, koi8-u, macintosh, shift_jis, utf-8, utf-16, windows-874, windows-1250, windows-1251, windows-1252, windows-1253, windows-1254, windows-1255, windows-1256, windows-1257, windows-1258, x-mac-cyrillic
解決方法
原因を特定できました。次に解決方法を探します。
下記のようにすれば解決できます。
・転送対象ログファイルのエンコード:Unicode
⇓
・転送対象ログファイルのエンコード:shift_jis
powershellで日本語の文字コードを指定する方法
Shift_JISで出力するには、以下のようにします。
「-Encoding default」オプションを追加する
Write-Output あいうえお | Out-File test.txt -Encoding default
まとめ
Windowsのデフォルト文字コードはShift_JISであり、powershellなどでログを出力するときに、デフォルト文字コードに合わせることをお勧めします。
以上となり、お役に立てれば幸いです。