トップページ > 記事閲覧
LogSaveDirectoryの挙動について
名前:Stnsllet 日時: 2021/12/19 00:05

お世話になっています。 只今DXライブラリのログを特定のディレクトリ、特定の名称にて保管するために以下の関数群を用いていますが、 2点ほど想定通りにならない為、質問させていただきます。 SetApplicationLogFileName SetUseDateNameLogFile SetApplicationLogSaveDirectory まず1点目は SetApplicationLogFileNameとSetUseDateNameLogFileは併用できない仕様なのでしょうか。 例えば以下の記述をすると、ログファイル名はcustom_name_log.txtとなり、 SetUseDateNameLogFileが無い場合は、Log2021_12_18_23_57_51.txtのようになります。 SetApplicationLogFileName("custom_name_log.txt"); SetUseDateNameLogFile(TRUE); てっきりcustom_name_log2021_12_18_23_57_51.txtのようになると思いましたが、 基本的にSetApplicationLogFileNameが優先される形で、もし理想の形にするとすれば、 DATEDATAをstd::formatしたファイル名で指定することになるのでしょうか。 2点目ですが、これが本題でSetApplicationLogSaveDirectoryを指定した際に、 ログファイルが以下のように化けてしまう現象を確認しています。 7 : $&#63731;8&#63731;・、0ヨ0・・n0RgS覯t虚ヒY 8 : キ0ケ0ニ0・n0ナ`1X・[娚W0~0Y0 8 : $&#63731;8&#63731;・、0ヨ0・・ V e r 3 . 2 3 9 : ヨ・tラ0・サ0テ0オ0n0pe : 4 9 : /&#63731;3&#63731; W i n d o w s 1 0 ( B u i l d 1 9 0 4 3 ) 1 1 0 : &#63730;sBfケpn0#&#63731;0&#63731;5&#63731;ユR\O凄^&#63731;'YSO3 . 1 7 G H z 1 1 1 : -&#63731;-&#63731;8&#63731;}T膀・O(uW0~0Y0 1 1 2 : 3&#63731;3&#63731;%&#63731;}T膀L0O(u・&#63729;g0Y0 〜〜略〜〜 記述としては SetApplicationLogSaveDirectory("Logs"); としていまして、実際<作業ディレクトリ>/Logsの中にログファイルが生成されますが、 出力が上記の通りになります。 (1点目の関数の使用の有無に関わらず発生します。) 環境としましては、DXLIB 3.23 VSC++ 64bitで、以上の関数は全てDxLib_Init()よりも前で呼び出しています。 恐らく2点目の挙動については不具合だと思われますが、解決法があれば教えていただけると幸いです。 よろしくお願いします。
メンテ

Page: 1 |

Re: LogSaveDirectoryの挙動について ( No.1 )
名前:Stnsllet 日時:2021/12/19 00:25

すいません、半分程解決しました。 2点目もとい ログ関連の関数は最初のログが発生するよりも前に設定すれば、文字化けが起こらないことを確認しました。 一応DxLib_Init()よりも前の使用だったのですが、SetApplicationLogSaveDirectoryの実行前に 最初のログとなるChangeWindowModeがあり、それよりも前にSetApplicationLogSaveDirectoryを実行することで、文字化けは回避できました。 (ちなみにSetApplicationLogFileNameも最初のログが発生する前でないと有効ではないようです。)
メンテ
Re: LogSaveDirectoryの挙動について ( No.2 )
名前:管理人 日時:2021/12/21 02:06

> まず1点目は SetApplicationLogFileNameとSetUseDateNameLogFileは併用できない仕様なのでしょうか。 はい、SetApplicationLogFileName が優先される形で、併用できない仕様です SetApplicationLogFileName を使用する場合は、以下のようなコードで日付入りのファイル名を設定するようにしてください m(_ _)m // 日付を取得 DATEDATA Date; GetDateTime( &Date ); // 日付入りファイル名の設定 char String[128]; sprintf( String, "custom_name_log%d_%d_%d_%d_%d_%d.txt", Date.Year, Date.Mon, Date.Day, Date.Hour, Date.Min, Date.Sec ); SetApplicationLogFileName( String ); > 2点目ですが、これが本題でSetApplicationLogSaveDirectoryを指定した際に、 > ログファイルが以下のように化けてしまう現象を確認しています。 > > すいません、半分程解決しました。 > 2点目もとい ログ関連の関数は最初のログが発生するよりも前に設定すれば、文字化けが起こらないことを確認しました。 ログファイルの文字コード形式が UTF-16LE なのですが、UTF-16LE はファイルの先頭に UTF-16LE であることを示す 2バイト( 0xff 0xfe )が無いと UTF-16LE として正しく処理されないので、 途中で SetApplicationLogSaveDirectory で出力先を変更するとその 2バイトが 先頭に無いログファイルができてしまうため、文字化けしてしまうようです 近い内にそのようなファイル先頭の 2バイトが必要のない UTF-8 に変更しようと思います m(_ _;m > (ちなみにSetApplicationLogFileNameも最初のログが発生する前でないと有効ではないようです。) はい、SetApplicationLogFileName や SetUseDateNameLogFile はログファイル作成前でのみ有効な関数となっています
メンテ
Re: LogSaveDirectoryの挙動について ( No.3 )
名前:Stnsllet(解決) 日時:2021/12/22 00:42

ご返答ありがとうございます。 Log周りの仕様について承知いたしました。 日付入りファイル名指定法の提示もありがとうございます!
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存