100 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C++
		
	
	
	
		
		
			
		
	
	
			100 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C++
		
	
	
	
|  | // PHZ
 | ||
|  | // 2018-5-15
 | ||
|  | 
 | ||
|  | #if defined(WIN32) || defined(_WIN32) 
 | ||
|  | #ifndef _CRT_SECURE_NO_WARNINGS
 | ||
|  | #define _CRT_SECURE_NO_WARNINGS
 | ||
|  | #endif
 | ||
|  | #endif
 | ||
|  | 
 | ||
|  | #include "Logger.h"
 | ||
|  | #include "Timestamp.h"
 | ||
|  | #include <stdarg.h>
 | ||
|  | #include <iostream>
 | ||
|  | 
 | ||
|  | using namespace xop; | ||
|  | 
 | ||
|  | const char* Priority_To_String[] = | ||
|  | { | ||
|  | 	"DEBUG", | ||
|  | 	"CONFIG", | ||
|  | 	"INFO", | ||
|  | 	"WARNING", | ||
|  | 	"ERROR" | ||
|  | }; | ||
|  | 
 | ||
|  | Logger::Logger()  | ||
|  | { | ||
|  |      | ||
|  | } | ||
|  | 
 | ||
|  | Logger& Logger::Instance() | ||
|  | { | ||
|  | 	static Logger s_logger; | ||
|  | 	return s_logger; | ||
|  | } | ||
|  | 
 | ||
|  | Logger::~Logger() | ||
|  | { | ||
|  | 
 | ||
|  | } | ||
|  | 
 | ||
|  | void Logger::Init(char *pathname) | ||
|  | { | ||
|  | 	std::unique_lock<std::mutex> lock(mutex_); | ||
|  | 
 | ||
|  | 	if (pathname != nullptr) { | ||
|  | 		ofs_.open(pathname, std::ios::out | std::ios::binary); | ||
|  | 		if (ofs_.fail()) | ||
|  | 		{ | ||
|  | 			std::cerr << "Failed to open logfile." << std::endl; | ||
|  | 		} | ||
|  | 	} | ||
|  | } | ||
|  | 
 | ||
|  | void Logger::Exit() | ||
|  | { | ||
|  | 	std::unique_lock<std::mutex> lock(mutex_); | ||
|  | 
 | ||
|  | 	if (ofs_.is_open()) { | ||
|  | 		ofs_.close(); | ||
|  | 	} | ||
|  | } | ||
|  | 
 | ||
|  | void Logger::Log(Priority priority, const char* __file, const char* __func, int __line, const char *fmt, ...) | ||
|  | {	 | ||
|  | 	std::unique_lock<std::mutex> lock(mutex_); | ||
|  | 
 | ||
|  | 	char buf[2048] = {0}; | ||
|  | 	sprintf(buf, "[%s][%s:%s:%d] ", Priority_To_String[priority],  __file, __func, __line); | ||
|  | 	va_list args; | ||
|  | 	va_start(args, fmt); | ||
|  | 	vsprintf(buf + strlen(buf), fmt, args); | ||
|  | 	va_end(args); | ||
|  | 	this->Write(std::string(buf)); | ||
|  | } | ||
|  | 
 | ||
|  | void Logger::Log2(Priority priority, const char *fmt, ...) | ||
|  | { | ||
|  | 	std::unique_lock<std::mutex> lock(mutex_); | ||
|  | 
 | ||
|  | 	char buf[4096] = { 0 }; | ||
|  | 	sprintf(buf, "[%s] ", Priority_To_String[priority]);   | ||
|  | 	va_list args; | ||
|  | 	va_start(args, fmt); | ||
|  | 	vsprintf(buf + strlen(buf), fmt, args); | ||
|  | 	va_end(args); | ||
|  | 	this->Write(std::string(buf)); | ||
|  | } | ||
|  | 
 | ||
|  | void Logger::Write(std::string info) | ||
|  | { | ||
|  | 	if (ofs_.is_open()) { | ||
|  | 		ofs_ << "[" << Timestamp::Localtime() << "]" | ||
|  | 			<< info << std::endl; | ||
|  | 	} | ||
|  |     | ||
|  | 	std::cout << "[" << Timestamp::Localtime() << "]" | ||
|  | 			<< info << std::endl; | ||
|  | } |