📄 lvlogger.h
字号:
#ifndef LvLoggerH
#define LvLoggerH
#include <stdio.h>
#include <windows.h>
#define LOG_USE_EX_VERSION
//===========================================================================
// LOGENTERAUTO creates a class instance, which unindents when the class is
// destroyed; so there is no need to call LOGRETURN.
//
// When using LOGENTERAUTO, create a module with:
//
// CLogIndent.H File:
//
// #include <LvLogger.h>
// class CLogIndent
// {
// public:
// ~CLogIndent();
// };
//
//
// CLogIndent.CPP file:
//
// #include "CLogIndent.h"
// CLogIndent::~CLogIndent()
// {
// if (lvlog_LoggingEnabled())
// {
// lvlog_EnterCriticalSection();
// lvlog_DecIndent();
// lvlog_LeaveCriticalSection();
// }
// }
//===========================================================================
#if defined(__cplusplus)
#define LVLOG_DLLENTRY extern "C"
#else
#define LVLOG_DLLENTRY
#endif
#ifndef LOG_USE_EX_VERSION
#ifdef _MSC_VER
#if(_MSC_VER < 1400) // Visual C++ Version 2003 and smaller
#define LOG_STRCPY strcpy
#define LOG_SPRINTF sprintf
#else // Visual C++ Version 2005 and higher
#define LOG_STRCPY strcpy_s
#define LOG_SPRINTF sprintf_s
#endif
#else // not Visual C++
#define LOG_STRCPY strcpy
#define LOG_SPRINTF sprintf
#endif
#endif
#ifndef _WIN64
// WIN32 platform
LVLOG_DLLENTRY BOOL WINAPI lvlog_LoggingEnabled ();
LVLOG_DLLENTRY DWORD WINAPI lvlog_GetSenderId (const char* pszIdString);
LVLOG_DLLENTRY void WINAPI lvlog_LogOutput (DWORD dwSenderId, const char* pszTask,
DWORD dwSeverity, int iIndentIncrement,
const char* pszMessage);
LVLOG_DLLENTRY void __cdecl lvlog_LogOutputEx (DWORD dwSenderId, const char* pszTask,
DWORD dwSeverity, int iIndentIncrement,
const char* pszFormat, ...);
LVLOG_DLLENTRY void WINAPI lvlog_IncIndent ();
LVLOG_DLLENTRY void WINAPI lvlog_DecIndent ();
LVLOG_DLLENTRY void WINAPI lvlog_CreateLogFile (const char* pszFileName, BOOL bBuffered);
LVLOG_DLLENTRY void WINAPI lvlog_AppendToLogFile (const char* pszFileName, BOOL bBuffered);
LVLOG_DLLENTRY void WINAPI lvlog_CloseLogFile ();
LVLOG_DLLENTRY DWORD WINAPI lvlog_GetLogFileSize ();
LVLOG_DLLENTRY void WINAPI lvlog_LogWin32Error (int iError, DWORD dwSenderId, const char* pszTask,
DWORD dwSeverity);
LVLOG_DLLENTRY void WINAPI lvlog_EnterCriticalSection();
LVLOG_DLLENTRY void WINAPI lvlog_LeaveCriticalSection();
LVLOG_DLLENTRY void WINAPI lvlog_DiscoverReceiver ();
LVLOG_DLLENTRY void WINAPI lvlog_Beep (DWORD dwFreq, DWORD dwDuration);
//---------------------------------------------------------------------------
#ifdef _DEBUG
#define DEBUGLOG_ENABLED
#endif
#ifndef TASK_ID
#define TASK_ID NULL // This is dummy task ID, the application should redefine it before this include
// but it must be always const char* of may length of 3 chars + terminating zero
#endif
#define LOG_MAX_MSG_STRING 8192
extern DWORD g_dwLogSenderId;
// the following global vars are to be defined in one CPP module of the application
#ifdef LOG_USE_EX_VERSION
#define LOG_DEFINE_GLOBALS \
DWORD g_dwLogSenderId=0;
#else
extern char g_szLogMessage[LOG_MAX_MSG_STRING];
#define LOG_DEFINE_GLOBALS \
DWORD g_dwLogSenderId=0; \
char g_szLogMessage[LOG_MAX_MSG_STRING];
#endif
#define LOG_ENABLED lvlog_LoggingEnabled()
#define LOG_DISCOVER lvlog_DiscoverReceiver()
#define LOG_GET_SENDER_ID(x) g_dwLogSenderId=lvlog_GetSenderId(x) // to be called at Sender beginning
#define LOGVOID // use LOGRETURN(LOGVOID) in case you are in a void function
//---------------------------------------------------------------------------
#define LOGRETURN(x) \
{ \
if (lvlog_LoggingEnabled()) \
{ \
lvlog_EnterCriticalSection(); \
lvlog_DecIndent(); \
lvlog_LeaveCriticalSection(); \
} \
return x; \
}
#define _LOGRETURN \
{ \
if (lvlog_LoggingEnabled()) \
{ \
lvlog_EnterCriticalSection(); \
lvlog_DecIndent(); \
lvlog_LeaveCriticalSection(); \
} \
}
//---------------------------------------------------------------------------
// LOGENTER increments the indent after this log, so the next logs
// for this thread will be indented, until the LOGRETURN is called
//---------------------------------------------------------------------------
#define LOG_NOSYNC(LogStr) \
{ \
if (lvlog_LoggingEnabled()) \
lvlog_LogOutput(g_dwLogSenderId, TASK_ID, 0, 0, LogStr); \
}
#define LOGWIN32LASTERROR \
{ \
if (lvlog_LoggingEnabled()) \
{ \
int iError = GetLastError(); \
lvlog_EnterCriticalSection(); \
lvlog_LogWin32Error(iError, g_dwLogSenderId, TASK_ID, 0); \
lvlog_LeaveCriticalSection(); \
} \
}
//---------------------------------------------------------------------------
#ifdef LOG_USE_EX_VERSION
#define LOGENTER(LogStr) \
{ \
if (lvlog_LoggingEnabled()) \
lvlog_LogOutput(g_dwLogSenderId, TASK_ID, 0, 1, LogStr); \
}
#define LOGENTER1(LogStr,Var1) \
{ \
if (lvlog_LoggingEnabled()) \
lvlog_LogOutputEx(g_dwLogSenderId, TASK_ID, 0, 1, LogStr, Var1); \
}
#define LOGENTER2(LogStr,Var1,Var2) \
{ \
if (lvlog_LoggingEnabled()) \
lvlog_LogOutputEx(g_dwLogSenderId, TASK_ID, 0, 1, LogStr, Var1, Var2); \
}
#define LOGENTER3(LogStr,Var1,Var2,Var3) \
{ \
if (lvlog_LoggingEnabled()) \
lvlog_LogOutputEx(g_dwLogSenderId, TASK_ID, 0, 1, LogStr, Var1, Var2, Var3); \
}
#define LOGENTER4(LogStr,Var1,Var2,Var3,Var4) \
{ \
if (lvlog_LoggingEnabled()) \
lvlog_LogOutputEx(g_dwLogSenderId, TASK_ID, 0, 1, LogStr, Var1, Var2, Var3, Var4); \
}
#define LOGENTER5(LogStr,Var1,Var2,Var3,Var4,Var5) \
{ \
if (lvlog_LoggingEnabled()) \
lvlog_LogOutputEx(g_dwLogSenderId, TASK_ID, 0, 1, LogStr, Var1, Var2, Var3, Var4, Var5); \
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -