#pragma once | |
//------------------------------------------------------------------------------------------------- | |
// <copyright file="logutil.h" company="Outercurve Foundation"> | |
// Copyright (c) 2004, Outercurve Foundation. | |
// This software is released under Microsoft Reciprocal License (MS-RL). | |
// The license and further copyright text can be found in the file | |
// LICENSE.TXT at the root directory of the distribution. | |
// </copyright> | |
// | |
// <summary> | |
// Logging helper functions. | |
// </summary> | |
//------------------------------------------------------------------------------------------------- | |
#ifdef __cplusplus | |
extern "C" { | |
#endif | |
#define LogExitOnFailure(x, i, f) if (FAILED(x)) { LogErrorId(x, i, NULL, NULL, NULL); ExitTrace(x, f); goto LExit; } | |
#define LogExitOnFailure1(x, i, f, s) if (FAILED(x)) { LogErrorId(x, i, s, NULL, NULL); ExitTrace1(x, f, s); goto LExit; } | |
#define LogExitOnFailure2(x, i, f, s, t) if (FAILED(x)) { LogErrorId(x, i, s, t, NULL); ExitTrace2(x, f, s, t); goto LExit; } | |
#define LogExitOnFailure3(x, i, f, s, t, u) if (FAILED(x)) { LogErrorId(x, i, s, t, u); ExitTrace3(x, f, s, t, u); goto LExit; } | |
#define LogExitOnRootFailure(x, i, f) if (FAILED(x)) { LogErrorId(x, i, NULL, NULL, NULL); Dutil_RootFailure(__FILE__, __LINE__, x); ExitTrace(x, f); goto LExit; } | |
#define LogExitOnRootFailure1(x, i, f, s) if (FAILED(x)) { LogErrorId(x, i, s, NULL, NULL); Dutil_RootFailure(__FILE__, __LINE__, x); ExitTrace1(x, f, s); goto LExit; } | |
#define LogExitOnRootFailure2(x, i, f, s, t) if (FAILED(x)) { LogErrorId(x, i, s, t, NULL); Dutil_RootFailure(__FILE__, __LINE__, x); ExitTrace2(x, f, s, t); goto LExit; } | |
#define LogExitOnRootFailure3(x, i, f, s, t, u) if (FAILED(x)) { LogErrorId(x, i, s, t, u); Dutil_RootFailure(__FILE__, __LINE__, x); ExitTrace3(x, f, s, t, u); goto LExit; } | |
typedef HRESULT (DAPI *PFN_LOGSTRINGWORKRAW)( | |
__in_z LPCSTR szString, | |
__in_opt LPVOID pvContext | |
); | |
// enums | |
// structs | |
// functions | |
BOOL DAPI IsLogInitialized(); | |
BOOL DAPI IsLogOpen(); | |
void DAPI LogInitialize( | |
__in HMODULE hModule | |
); | |
HRESULT DAPI LogOpen( | |
__in_z_opt LPCWSTR wzDirectory, | |
__in_z LPCWSTR wzLog, | |
__in_z_opt LPCWSTR wzPostfix, | |
__in_z_opt LPCWSTR wzExt, | |
__in BOOL fAppend, | |
__in BOOL fHeader, | |
__out_z_opt LPWSTR* psczLogPath | |
); | |
void DAPI LogDisable(); | |
void DAPI LogRedirect( | |
__in_opt PFN_LOGSTRINGWORKRAW vpfLogStringWorkRaw, | |
__in_opt LPVOID pvContext | |
); | |
HRESULT DAPI LogRename( | |
__in_z LPCWSTR wzNewPath | |
); | |
void DAPI LogClose( | |
__in BOOL fFooter | |
); | |
void DAPI LogUninitialize( | |
__in BOOL fFooter | |
); | |
BOOL DAPI LogIsOpen(); | |
HRESULT DAPI LogSetSpecialParams( | |
__in_z_opt LPCWSTR wzSpecialBeginLine, | |
__in_z_opt LPCWSTR wzSpecialAfterTimeStamp, | |
__in_z_opt LPCWSTR wzSpecialEndLine | |
); | |
REPORT_LEVEL DAPI LogSetLevel( | |
__in REPORT_LEVEL rl, | |
__in BOOL fLogChange | |
); | |
REPORT_LEVEL DAPI LogGetLevel(); | |
HRESULT DAPI LogGetPath( | |
__out_ecount_z(cchLogPath) LPWSTR pwzLogPath, | |
__in DWORD cchLogPath | |
); | |
HANDLE DAPI LogGetHandle(); | |
HRESULT DAPIV LogString( | |
__in REPORT_LEVEL rl, | |
__in_z __format_string LPCSTR szFormat, | |
... | |
); | |
HRESULT DAPI LogStringArgs( | |
__in REPORT_LEVEL rl, | |
__in_z __format_string LPCSTR szFormat, | |
__in va_list args | |
); | |
HRESULT DAPIV LogStringLine( | |
__in REPORT_LEVEL rl, | |
__in_z __format_string LPCSTR szFormat, | |
... | |
); | |
HRESULT DAPI LogStringLineArgs( | |
__in REPORT_LEVEL rl, | |
__in_z __format_string LPCSTR szFormat, | |
__in va_list args | |
); | |
HRESULT DAPI LogIdModuleArgs( | |
__in REPORT_LEVEL rl, | |
__in DWORD dwLogId, | |
__in_opt HMODULE hModule, | |
__in va_list args | |
); | |
/* | |
* Wraps LogIdModuleArgs, so inline to save the function call | |
*/ | |
inline HRESULT LogId( | |
__in REPORT_LEVEL rl, | |
__in DWORD dwLogId, | |
... | |
) | |
{ | |
HRESULT hr = S_OK; | |
va_list args; | |
va_start(args, dwLogId); | |
hr = LogIdModuleArgs(rl, dwLogId, NULL, args); | |
va_end(args); | |
return hr; | |
} | |
/* | |
* Wraps LogIdModuleArgs, so inline to save the function call | |
*/ | |
inline HRESULT LogIdArgs( | |
__in REPORT_LEVEL rl, | |
__in DWORD dwLogId, | |
__in va_list args | |
) | |
{ | |
return LogIdModuleArgs(rl, dwLogId, NULL, args); | |
} | |
HRESULT DAPIV LogErrorString( | |
__in HRESULT hrError, | |
__in_z __format_string LPCSTR szFormat, | |
... | |
); | |
HRESULT DAPI LogErrorStringArgs( | |
__in HRESULT hrError, | |
__in_z __format_string LPCSTR szFormat, | |
__in va_list args | |
); | |
HRESULT DAPI LogErrorIdModule( | |
__in HRESULT hrError, | |
__in DWORD dwLogId, | |
__in_opt HMODULE hModule, | |
__in_z_opt LPCWSTR wzString1, | |
__in_z_opt LPCWSTR wzString2, | |
__in_z_opt LPCWSTR wzString3 | |
); | |
inline HRESULT LogErrorId( | |
__in HRESULT hrError, | |
__in DWORD dwLogId, | |
__in_z_opt LPCWSTR wzString1, | |
__in_z_opt LPCWSTR wzString2, | |
__in_z_opt LPCWSTR wzString3 | |
) | |
{ | |
return LogErrorIdModule(hrError, dwLogId, NULL, wzString1, wzString2, wzString3); | |
} | |
HRESULT DAPI LogHeader(); | |
HRESULT DAPI LogFooter(); | |
HRESULT LogStringWorkRaw( | |
__in_z LPCSTR szLogData | |
); | |
// begin the switch of LogXXX to LogStringXXX | |
#define Log LogString | |
#define LogLine LogStringLine | |
#ifdef __cplusplus | |
} | |
#endif | |