2#include <helper/slog.h>
4#include <interface/slog-i.h>
12void Log::DefCallback(
const char *tag,
const char *pLogStr,
int level,
const char *file,
int line,
const char *fun,
void *retAddr)
14 ILogMgr *pLogMgr = GETLOGMGR();
16 if (pLogMgr && pLogMgr->prePushLog(level))
18 bLog = pLogMgr->pushLog(level, tag, pLogStr, file, line, fun, retAddr);
20 if (!bLog || Log::s_enableEcho)
25 char *logbuf2 = (
char *)malloc(kMaxLog + 1);
26 tid_t tid = GetCurrentThreadId();
28 int nLen = _snprintf(logbuf2, kMaxLog,
"tid=%u,%04d-%02d-%02d %02d:%02d:%02d %03dms %s,%s %s %s:%d\n", tid, wtm.wYear, wtm.wMonth, wtm.wDay, wtm.wHour, wtm.wMinute, wtm.wSecond, wtm.wMilliseconds, tag, pLogStr, fun, file, line);
30 int nLen = _snprintf(logbuf2, kMaxLog,
"tid=%ld,%04d-%02d-%02d %02d:%02d:%02d %03dms %s,%s %s %s:%d\n", tid, wtm.wYear, wtm.wMonth, wtm.wDay, wtm.wHour, wtm.wMinute, wtm.wSecond, wtm.wMilliseconds, tag, pLogStr, fun, file, line);
35 OutputDebugStringA(logbuf2);
42int Log::s_logLevel = LOG_LEVEL_INFO;
43bool Log::s_enableEcho =
true;
44LogCallback Log::gs_logCallback = Log::DefCallback;
46Log::Log(
const char *tag,
int level,
const char *filename,
const char *funcname,
int lineIndex,
void *pAddr)
60 if (m_level < s_logLevel)
65 gs_logCallback(m_tag, m_logBuf, m_level, m_file, m_line, m_func, m_pAddr);
67 else if (s_enableEcho)
72 char *logbuf2 = (
char *)malloc(kMaxLog + 1);
73 int nLen = _snprintf(logbuf2, kMaxLog,
"%s, %04d-%02d-%02d %02d:%02d:%02d %03dms %s %s %s:%d\n", m_tag, wtm.wYear, wtm.wMonth, wtm.wDay, wtm.wHour, wtm.wMinute, wtm.wSecond, wtm.wMilliseconds, m_logBuf, m_func, m_file, m_line);
77 OutputDebugStringA(logbuf2);
97 gs_logCallback = logCallback;
102 s_enableEcho = bEnable;
115SLogStream &SLogStream::writeWString(
const wchar_t *t,
int nLen)
117 DWORD dwLen = WideCharToMultiByte(CP_ACP, 0, t, nLen, NULL, 0, NULL, NULL);
121 dwLen = WideCharToMultiByte(CP_ACP, 0, t, nLen, buf, dwLen, NULL, NULL);
131SLogStream &SLogStream::writeString(
const char *t)
140 for (
int i = 0; i < t.
_len; i++)
145 *
this << (
void *)(t.
_buf + i);
162SLogStream &SLogStream::writeLongLong(
long long t)
164#if defined(WIN32) || defined(_WIN64)
172SLogStream &SLogStream::writeULongLong(
unsigned long long t)
174#if defined(WIN32) || defined(_WIN64)
182SLogStream &SLogStream::writePointer(
const void *t)
184#if defined(WIN32) || defined(_WIN64)
185 sizeof(t) == 8 ?
writeFormat(
"0x%016I64x", (
unsigned long long)t) :
writeFormat(
"0x%08I64x", (
unsigned long long)t);
187 sizeof(t) == 8 ?
writeFormat(
"0x%016llx", (
unsigned long long)t) :
writeFormat(
"0x%08llx", (
unsigned long long)t);
195 wchar_t *fmt = wcsdup(fmt2);
196 wchar_t *p = wcsstr(fmt, L
"%s");
200 p = wcsstr(p + 2, L
"%s");
203 const wchar_t *fmt = fmt2;
206 wchar_t logbuf[SNS::Log::MAX_LOGLEN] = { 0 };
208 va_start(args, fmt2);
209 int ret = vswprintf(logbuf, SNS::Log::MAX_LOGLEN, fmt, args);
214 return writeWString(logbuf, ret);
224 int count = (int)(_end - _cur) - 1;
225 len = vsnprintf(_cur, count, fmt, args);
226 if (len == count || (len == -1 && errno == E_RANGE))
245 return writeBinary(binary);
260 return writeULongLong(t);
265 return writeLongLong(t);
270 return writeULongLong(t);
275 return writeLongLong(t);
310 return writeWString(&t, 1);
320 return writeWString(t);
325 return writeString(t);
330 return writePointer(t);
Log(const char *tag, int level, const char *filename, const char *funcname, int lineIndex, void *pAddr)
构造函数
static void setLogEcho(bool bEnable)
设置日志回显功能
SLogStream & stream()
获取日志流对象
static void setLogCallback(LogCallback logCallback)
设置日志回调函数
static void setLogLevel(int nLevel)
设置日志级别
const char * _buf
二进制数据缓冲区
SLogStream(char *buf, int len)
构造函数
SLogStream & operator<<(const void *t)
重载运算符<<,用于输出各种类型的数据
SLogStream & writeFormat(const char *format,...)
格式化输出日志