簡単なロゴ

2604 ワード

#pragma  once

#include <windows.h>

#include <process.h>

class  CLogger

{

public:

	static   CRITICAL_SECTION m_cs;// 

public:

	CLogger();

	~CLogger();

	static	int logger_to_file(const char* logfile);// , 

	static  int logger(const char* fmt, ...);

	static  int close_logger_file();

private:

	static int log_ref;

	static FILE* logfp;

	

};



// namespace  Logger

// {

	// int logger_to_file(const char* logfile);

	// int logger(const char* fmt, ...);

	// int close_logger_file();



	// int log_ref;

	// FILE* logfp;

// }











#pragma once

#include "stdafx.h"

#include <stdarg.h>

#include <stdio.h>

#include <iostream>

#include <time.h>

#include "log.h"

using namespace std;









int   CLogger::log_ref = 0;

FILE* CLogger::logfp = NULL;

std::string get_current_time();

CRITICAL_SECTION CLogger::m_cs = {};

CLogger::CLogger()

{

	

}

CLogger::~CLogger()

{

	close_logger_file();

}

int CLogger::logger_to_file(const char* logfile)

{

	if (log_ref++ == 0)  // 0 , 

	{

		InitializeCriticalSection(&m_cs);

		logfp = fopen(logfile, "w+b");

		if (!logfp)

		{

			log_ref--;

			return -1;

		}

	}

	return 0;

}



int CLogger::logger(const char* fmt, ...)

{

	EnterCriticalSection(&m_cs);

	static char buffer[10240];

	va_list va;

	int ret = 0;



	va_start(va, fmt);

	vsprintf(buffer, fmt, va);



	std::string time = get_current_time();



	//  .

	if (logfp)

	{

		fprintf(logfp, "[%s] %s", time.c_str(), buffer);

		fflush(logfp);

	}



	//  .

	ret = printf("[%s] %s", time.c_str(), buffer);



	va_end(va);

	

	EnterCriticalSection(&m_cs);

	return ret;

}



int CLogger::close_logger_file()

{

	if (!logfp)

		return -1;



	if (--log_ref == 0)

	{

		fclose(logfp);

		logfp = NULL;

		DeleteCriticalSection(&m_cs);

	}



	return 0;

}





std::string get_current_time()

{

	char buffer[1024] = {0};

	std::string ret;

	struct tm curr_time;

	time_t tmp_time;



	time(&tmp_time);



	curr_time = *(localtime(&tmp_time));



	if (curr_time.tm_year > 50)

	{

		sprintf(buffer, "%04d-%02d-%02d %02d:%02d:%02d", 

			curr_time.tm_year + 1900, curr_time.tm_mon + 1, curr_time.tm_mday,

			curr_time.tm_hour, curr_time.tm_min, curr_time.tm_sec);

	}

	else

	{

		sprintf(buffer, "%04d-%02d-%02d %02d:%02d:%02d", 

			curr_time.tm_year + 2000, curr_time.tm_mon + 1, curr_time.tm_mday,

			curr_time.tm_hour, curr_time.tm_min, curr_time.tm_sec);

	}



	return std::string(buffer);

}