[C/C++]簡単なC++ログ操作クラス

3089 ワード

ダイレクトコード
LogFile.h
//
//  LogFile.h
//  ftpz
//
//  Created by    ALEX on 2017/10/26.
//
#ifndef FTP_LOGFILE_H
#define FTP_LOGFILE_H

class LogFile
{
public:
	LogFile();
	~LogFile();
	typedef enum enLogLevel {
		LOG_DEBUG = 1,
		LOG_INFO,
		LOG_ERROR,
		LOG_WARN,
		LOG_FATAL
	}LogLevel;
	void writeLog(int logLevel, char* pLogFormat);
	void debug(char* pLogFormat);
	void info(char* pLogFormat);
	void warn(char* pLogFormat);
	void error(char* pLogFormat);
	void fatal(char* pLogFormat);
private:
	char m_cLastLogTime[32];
	char m_cLogFileName[1024];

	
};
#endif // !FTP_LOGFILE_H

LogFile.cpp
#include "stdafx.h"
#include "LogFile.h"
#include 
#include 

const char LogTip[][8] = { "", "Debug", "Info", "Warn", "Error", "Fatal"};

LogFile::LogFile()
{
	memset(m_cLastLogTime, 0, 32);
	memset(m_cLogFileName, 0, 1024);

	char* p = std::strrchr(m_cLogFileName, '\\');
	time_t tmNow = time(NULL);
	strftime(m_cLastLogTime, 32, "%Y-%m-%d %H:%M:%S", localtime(&tmNow));

	strncat(m_cLogFileName, m_cLastLogTime, 10);
	strcat(m_cLogFileName, ".log");
}


LogFile::~LogFile()
{
}

void LogFile::writeLog(int logLevel, char* pLogFormat)
{
	char logTxt[2048];
	memset(logTxt, 0, sizeof(logTxt));

	char szDate[32] = { 0 };
	time_t tmNow = time(NULL);
	strftime(szDate, 32, "%Y-%m-%d %H:%M:%S", localtime(&tmNow));
	if (strncmp(szDate, m_cLastLogTime, 10) != 0)			//      
	{
		char* p = strrchr(m_cLogFileName, '\\');
		strncat(m_cLogFileName, szDate, 10);
		strcat(m_cLogFileName, ".log");
	}

	sprintf(logTxt, "%s : [%s] %s
", szDate, LogTip[logLevel], pLogFormat); FILE* pFile; pFile = fopen(m_cLogFileName, "a+"); if (pFile != NULL) { fputs(logTxt, pFile); } fclose(pFile); } void LogFile::debug(char* pLogFormat) { writeLog(LOG_DEBUG, pLogFormat); } void LogFile::info(char* pLogFormat) { writeLog(LOG_INFO, pLogFormat); } void LogFile::warn(char* pLogFormat) { writeLog(LOG_WARN, pLogFormat); } void LogFile::error(char* pLogFormat) { writeLog(LOG_ERROR, pLogFormat); } void LogFile::fatal(char* pLogFormat) { writeLog(LOG_FATAL, pLogFormat); }

使用方法
LogFile *m_pLog = new LogFile();
m_pLog->debug("SOCKET    ");
m_pLog->info("SOCKET    ");
m_pLog->error("SOCKET    ");
m_pLog->fatal("SOCKET    ");
delete m_pLog;
m_pLog = NULL;

当日の日付のログ・ファイルを自動的に生成します.内容は次のとおりです.
2017-10-27 19:51:19 : [Warn]            2016 10 17  - Copy.zip    
2017-10-27 19:51:36 : [Warn]            2016 10 17  - Copy.zip    
2017-10-27 19:51:49 : [Warn]            2016 10 17  - Copy.zip    
2017-10-27 19:52:02 : [Warn]            2016 10 17  - Copy.zip    
2017-10-27 19:52:21 : [Warn]            2016 10 17  - Copy.zip    
2017-10-27 19:52:34 : [Warn]            2016 10 17  - Copy.zip    
2017-10-27 19:52:47 : [Warn]            2016 10 17  - Copy.zip