⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 spnklog.cpp

📁 linux 下的程序源代码
💻 CPP
字号:
/* * Copyright 2008 Stephen Liu * For license terms, see the file COPYING along with this library. */#include <stdio.h>#include <string.h>#include <stdarg.h>#include <time.h>#include <pthread.h>#include <errno.h>#include "spnklog.hpp"SP_NKLog::LogFunc_t SP_NKLog::mFunc = syslog;int SP_NKLog::mLevel = LOG_NOTICE;int SP_NKLog::mIsLogTimeStamp = 1;int SP_NKLog::mIsLogPriName = 1;#ifndef  LOG_PRI#define LOG_PRI(p)  ((p) & LOG_PRIMASK)#endifvoid SP_NKLog :: setLogFunc( LogFunc_t func ){	if( NULL != func ) mFunc = func;}void SP_NKLog :: setLogLevel( int level ){	mLevel = LOG_UPTO( level );}void SP_NKLog :: setLogTimeStamp( int logTimeStamp ){	mIsLogTimeStamp = logTimeStamp;}void SP_NKLog :: setLogPriName( int logPriName ){	mIsLogPriName = logPriName;}void SP_NKLog :: init4test( const char *ident ){	int option = LOG_CONS | LOG_PID;#ifdef LOG_PERROR	option = option | LOG_PERROR;#endif	openlog( ident, option, LOG_USER );}const char * SP_NKLog :: getPriName( int pri ){	typedef struct tagPriName {		int mPri;		char * mName;	}  PriName_t;	static PriName_t priNameList [ ] = {		{ LOG_EMERG,   "EMERG" },		{ LOG_ALERT,   "ALERT" },		{ LOG_CRIT,    "CRIT " },		{ LOG_ERR,     "ERR  " },		{ LOG_WARNING, "WARN " },		{ LOG_NOTICE,  "NOTICE" },		{ LOG_INFO,    "INFO " },		{ LOG_DEBUG,   "DEBUG" },		{ -1,          "NONE " }	};	pri = LOG_PRI( pri );	PriName_t * iter = NULL;	for( iter = priNameList; -1 != iter->mPri; iter++ ) {		if( iter->mPri == pri ) break;	}	return iter->mName;}void SP_NKLog :: log( int pri, const char * fmt, ... ){	if( LOG_PRI( pri ) > mLevel ) return;	int olderrno = errno;	char logText[ 1024 ] = { 0 }, logTemp[ 1024 ] = { 0 };	const char * tempPtr = logTemp;	if( NULL != strchr( fmt, '%' ) ) {		va_list vaList;		va_start( vaList, fmt );		vsnprintf( logTemp, sizeof( logTemp ), fmt, vaList );		va_end ( vaList );	} else {		tempPtr = fmt;	}	if( mIsLogTimeStamp ) {		time_t now = time( NULL );		struct tm tmTime;		localtime_r( &now, &tmTime );		snprintf( logText, sizeof( logText ),			"%04i-%02i-%02i %02i:%02i:%02i #%i ",			1900 + tmTime.tm_year, tmTime.tm_mon+1, tmTime.tm_mday,			tmTime.tm_hour, tmTime.tm_min, tmTime.tm_sec, (int)pthread_self() );	}	if( mIsLogPriName ) {		strcat( logText, getPriName( pri ) );		strcat( logText, " : " );	}	size_t textPos = strlen( logText );	for( ; textPos < ( sizeof( logText ) - 4 ) && '\0' != *tempPtr; tempPtr++ ) {		if( '\r' == *tempPtr ) {			logText[ textPos++ ] = '\\';			logText[ textPos++ ] = 'r';		} else if( '\n' == *tempPtr ) {			logText[ textPos++ ] = '\\';			logText[ textPos++ ] = 'n';		} else {			logText[ textPos++ ] = *tempPtr;		}	}	logText[ textPos++ ] = '\n';	logText[ textPos++ ] = '\0';	mFunc( pri, logText );	errno = olderrno;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -