#define  __FILENAME__ (strrchr(__FILE__, '/')?(strrchr(__FILE__, '/') + 1 ):__FILE__)


#define spdlogWrapHandle spdlogWrap::spdlogWrap::GetInstance()  


#define log_trace(...) spdlogWrapHandle->log_trace( __FILENAME__,__func__, __LINE__,__VA_ARGS__)
#define log_debug(...) spdlogWrapHandle->log_debug( __FILENAME__,__func__, __LINE__,__VA_ARGS__)
#define log_info(...) spdlogWrapHandle->log_info( __FILENAME__,__func__, __LINE__,__VA_ARGS__)
#define log_warn(...) spdlogWrapHandle->log_warn( __FILENAME__,__func__, __LINE__,__VA_ARGS__)
#define log_err(...) spdlogWrapHandle->log_err( __FILENAME__,__func__, __LINE__,__VA_ARGS__)

以上是接口,

以下是封装的部分头文件

#pragma once

#include <vector>
#include <string>


namespace spdlogWrap
{
    typedef enum
    {
        trace = 0,
        debug = 1,
        info = 2,
        warn = 3,
        err = 4,
        critical = 5,
        off = 6
    } level_enum;
    
    class spdlogWrap
    {
    private:


    public:
        spdlogWrap() { ; }
		static spdlogWrap *GetInstance()
		{
			static spdlogWrap *m_instance = NULL;
			if ( m_instance == NULL )
			{
				m_instance = new spdlogWrap;
			}

			return m_instance;
		}

       


		void log_trace(const char *filename,const char *Func,const int Line,const char * Format, ... ); 
		void log_debug(const char *filename,const char *Func,const int Line,const char * Format, ... );  
		void log_info(const char *filename,const char *Func,const int Line,const char * Format, ... );   
		void log_warn(const char *filename,const char *Func,const int Line,const char * Format, ... );   
		void log_err(const char *filename,const char *Func,const int Line,const char * Format, ... );   
	};
}



void spdlogWrap::log_trace(const char *filename,const char *Func,const int Line,const char * Format, ... )
    {
        va_list args;
        va_start(args, Format);

        char tmpbuf[MAX_ONELOG_LENGTH];
        vsnprintf(tmpbuf,MAX_ONELOG_LENGTH-1,Format,args); 
		
       console_logger->trace("<{} {}:{}> {}", filename ,Func, Line ,tmpbuf);
		file_logger->trace("<{} {}:{}> {}",  filename, Func, Line ,tmpbuf);
        va_end(args);
    }

	void spdlogWrap::log_debug(const char *filename,const char *Func,const int Line,const char * Format, ... )
    {
        va_list args;
        va_start(args, Format);

        char tmpbuf[MAX_ONELOG_LENGTH];
        vsnprintf(tmpbuf,MAX_ONELOG_LENGTH-1,Format,args); 
		
       console_logger->debug("<{} {}:{}> {}", filename ,Func, Line ,tmpbuf);
		file_logger->debug("<{} {}:{}> {}",  filename, Func, Line ,tmpbuf);
        va_end(args);
    }

	void spdlogWrap::log_info(const char *filename,const char *Func,const int Line,const char * Format, ... )
    {
        va_list args;
        va_start(args, Format);

        char tmpbuf[MAX_ONELOG_LENGTH];
        vsnprintf(tmpbuf,MAX_ONELOG_LENGTH-1,Format,args); 
		
       console_logger->info("<{} {}:{}> {}", filename ,Func, Line ,tmpbuf);
		file_logger->info("<{} {}:{}> {}",  filename, Func, Line ,tmpbuf);
        va_end(args);
    }

	void spdlogWrap::log_warn(const char *filename,const char *Func,const int Line,const char * Format, ... )
    {
        va_list args;
        va_start(args, Format);

        char tmpbuf[MAX_ONELOG_LENGTH];
        vsnprintf(tmpbuf,MAX_ONELOG_LENGTH-1,Format,args); 
		
       console_logger->warn("<{} {}:{}> {}", filename ,Func, Line ,tmpbuf);
		file_logger->warn("<{} {}:{}> {}",  filename, Func, Line ,tmpbuf);
        va_end(args);
    }

	void spdlogWrap::log_err(const char *filename,const char *Func,const int Line,const char * Format, ... )
    {
        va_list args;
        va_start(args, Format);

        char tmpbuf[MAX_ONELOG_LENGTH];
        vsnprintf(tmpbuf,MAX_ONELOG_LENGTH-1,Format,args); 
		
       console_logger->error("<{} {}:{}> {}", filename ,Func, Line ,tmpbuf);
		file_logger->error("<{} {}:{}> {}",  filename, Func, Line ,tmpbuf);
        va_end(args);
    }

以下是引用例子

while(1)
	{
		i++;
	
  		spdlog_debug("test spdlog_debug()  %d %s %c",i,"spdlog log! ", 'A');
		spdlog_info("test spdlog_info() %d %s %c",i,"spdlog log! ", 'A');
		
		log_debug("test log_debug() %s ,%c %d", "abc",((char )i < 'z' && (char )i > '0' )?  (char)i :'a' , i);

		log_debug("test log_debug()");
		sleep(1);
		if(i == 90)
		  { log_warn("test log_warn()=============%d %s %c",i+1,"spdlog log! ", 'A'); break;}
	}	

以下是效果

Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐