C++メモ:簡単なログの作り方

Posted: 2012年1月5日 カテゴリー: プログラミングメモ, C++メモ
タグ:, , , , , , , ,

今回は、C++のプログラム内でログをテキストファイルに簡単に書き込める方法をメモります。

Unrealとかを使っていると、実行時にログを作り、Unreal Script内で書き込めるように指示できます。この機能は意外と約に立つ時があるので今回はC++プログラムで使いまわし出来、基本的な機能が付いているログ作製用のクラスを紹介します。ちなみに、やっている事はテキストファイルに書き込んでいるだけなので簡単です。

 

まずは、ヘッダーファイル内でクラス宣言です。今回は最低限の機能しか付けていないので単純です。クラスには、初期化と書き込み用のメソッドと、ファイル名とファイルへのポインタの変数を宣言しています。

 


class Logger
{
public:
static void Initialize(const std::string& fileName);
static void Write(const std::string& log);

protected:
static std::string fileName;
static FILE* file;

 

全てstatic設定にしているのはプログラム内の何処からでも使用できるためにするためと、使用するのを簡単にするためです。次に、staticの変数と初期化メソッドの実装です。

 


#include <time.h>
#include <Windows.h>

// static変数の初期化
std::string Logger::fileName = "";
FILE* Logger::file = NULL;

void Logger::Initialize(const std::string& fileName)
{
// ファイルの名前を保存
Logger::fileName = fileName;

// ファイルを開き、ポインタを保存
file = fopen( fileName.data(), "w" );

// ファイルが開けなかった場合、
if ( file == NULL )
{
// エラーメッセージを出し、プログラムを終了します。
MessageBox( NULL, "Failed to open log file for writing.\nApplication will be closed now.", "Error Info", MB_ICONWARNING );
exit( 0 );
}
}

 

次は、ログへの書き込み用メソッドの実装です。fprintfでは、ただログを書き込むだけでなく、時間も見やすい形で書き込んでいます(”[ 月日- 時:分:秒 ]: ログ”の順番で)。

 


void Logger::Write(const std::string& log)
{
tm* newTime;
__time64_t longTime;

// 現在の時間を獲得し、ローカル時間(日本の時間)に変換する
_time64( &longTime );
newTime = _localtime64( &longTime );

// 書き込むログの内容を保存する
fprintf( file, "[ %02d月%02d日 - %02d:%02d:%02d ]: %s\n",
newTime->tm_mon + 1, newTime->tm_mday,
newTime->tm_hour, newTime->tm_min, newTime->tm_sec,
log.c_str() );

// ファイルにを書き込む
fflush( file );
}

 

これだけで使えますが、使用を簡易化するためにマクロを書きました。

 

#define LOG( message ) { Logger::Write( message ); }

 

これにより、こんなふうに書けます。

 

LOG( "マクロで書かれたログです" );

 

後は、実際に書き込むだけです。

 

// ログの初期化。現在はプロジェクトのディレクトリに作製されます。
Logger::Initialize( "Log.txt" );

// マクロを使用してのログの書き込み
LOG( "Application Started, written with LOG Macro" );

// そのままの書き込み
Logger::Write( "Printing a Log to Text file" );

 

実行結果:

[ 01月06日 – 02:49:23 ]: Application Started, written with LOG Macro
[ 01月06日 – 02:49:23 ]: Printing a Log to Text file
[ 01月06日 – 02:49:23 ]: Another Log just to test
[ 01月06日 – 02:49:23 ]: Application Closing

 

今回はここまでです。ソースコードが欲しい方がいれば、どこかにアップするか、お送りします。

コメント
  1. 中野猛史 より:

    ログの取りかたがわからず、検索していて見つけました。
    ぜひ、ソースコードを下さい。
    お手間取らせ申し訳ございません。よろしくお願いします。

  2. 中野猛史 より:

    ありがとうございます。
    よく読んでできました。
    ご教授に感謝します。

  3. マイク より:

    すみません、ソースを頂けないでしょうか。
    宜しくお願い致します。

    • K1 より:

      すみません、今同じソースが無い状態です。
      ただ、記事内に乗っているソースで機能的には全部入っているのでコピペすればそのまま使用出来ると思います。

      • マイク より:

        返信ありがとうございます。
        うまくいきました。
        ありがとうございました。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中