OpenNI 1.5.2
XnLog.h
Go to the documentation of this file.
00001 /****************************************************************************
00002 *                                                                           *
00003 *  OpenNI 1.x Alpha                                                         *
00004 *  Copyright (C) 2011 PrimeSense Ltd.                                       *
00005 *                                                                           *
00006 *  This file is part of OpenNI.                                             *
00007 *                                                                           *
00008 *  OpenNI is free software: you can redistribute it and/or modify           *
00009 *  it under the terms of the GNU Lesser General Public License as published *
00010 *  by the Free Software Foundation, either version 3 of the License, or     *
00011 *  (at your option) any later version.                                      *
00012 *                                                                           *
00013 *  OpenNI is distributed in the hope that it will be useful,                *
00014 *  but WITHOUT ANY WARRANTY; without even the implied warranty of           *
00015 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the             *
00016 *  GNU Lesser General Public License for more details.                      *
00017 *                                                                           *
00018 *  You should have received a copy of the GNU Lesser General Public License *
00019 *  along with OpenNI. If not, see <http://www.gnu.org/licenses/>.           *
00020 *                                                                           *
00021 ****************************************************************************/
00022 #ifndef _XN_LOG_H_
00023 #define _XN_LOG_H_
00024 
00025 //---------------------------------------------------------------------------
00026 // Includes
00027 //---------------------------------------------------------------------------
00028 #include "XnOS.h"
00029 #include "XnLogTypes.h"
00030 #include "XnDump.h"
00031 
00032 //---------------------------------------------------------------------------
00033 // Exported Function Declaration
00034 //---------------------------------------------------------------------------
00035 
00045 XN_C_API XnStatus XN_C_DECL xnLogInitSystem();
00046 
00053 XN_C_API XnStatus XN_C_DECL xnLogInitFromINIFile(const XnChar* csINIFile, const XnChar* csSectionName);
00054 
00060 XN_C_API XnStatus XN_C_DECL xnLogInitFromXmlFile(const XnChar* strFileName);
00061 
00065 XN_C_API XnStatus XN_C_DECL xnLogClose();
00066 
00067 // @}
00068 
00081 XN_C_API XnStatus XN_C_DECL xnLogSetMaskMinSeverity(const XnChar* strMask, XnLogSeverity minSeverity);
00082 
00090 XN_C_API XnLogSeverity XN_C_DECL xnLogGetMaskMinSeverity(const XnChar* strMask);
00091 
00092 // @}
00093 
00106 XN_C_API XnStatus XN_C_DECL xnLogRegisterLogWriter(const XnLogWriter* pWriter);
00107 
00113 XN_C_API void XN_C_DECL xnLogUnregisterLogWriter(const XnLogWriter* pWriter);
00114 
00120 XN_C_API XnStatus XN_C_DECL xnLogSetConsoleOutput(XnBool bConsoleOutput);
00121 
00127 XN_C_API XnStatus XN_C_DECL xnLogSetFileOutput(XnBool bFileOutput);
00128 
00129 // @}
00130 
00140 XN_C_API XnStatus XN_C_DECL xnLogStartNewFile();
00141 
00147 XN_C_API XnStatus XN_C_DECL xnLogSetLineInfo(XnBool bLineInfo);
00148 
00154 XN_C_API XnStatus XN_C_DECL xnLogSetOutputFolder(const XnChar* strOutputFolder);
00155 
00156 // @}
00157 
00169 XN_C_API XnLogger* XN_C_DECL xnLoggerOpen(const XnChar* strMask);
00170 
00183 XN_C_API void XN_C_DECL xnLoggerWrite(XnLogger* pLogger, XnLogSeverity severity, const XnChar* strFile, XnUInt32 nLine, const XnChar* strFormat, ...);
00184 
00192 XN_C_API void XN_C_DECL xnLoggerWriteNoEntry(XnLogger* pLogger, XnLogSeverity severity, const XnChar* strFormat, ...);
00193 
00205 XN_C_API void XN_C_DECL xnLoggerWriteBinaryData(XnLogger* pLogger, XnLogSeverity severity, const XnChar* strFile, XnUInt32 nLine, XnUChar* pBinData, XnUInt32 nDataSize, const XnChar* strFormat, ...);
00206 
00213 XN_C_API XnBool XN_C_DECL xnLoggerIsEnabled(XnLogger* pLogger, XnLogSeverity severity);
00214 
00220 XN_C_API void XN_C_DECL _xnLoggerClose(XnLogger* pLogger);
00221 
00227 #define xnLoggerClose(pLogger)          \
00228     {                                   \
00229         _xnLoggerClose(pLogger);        \
00230         pLogger = NULL;                 \
00231     }
00232 
00233 #if XN_PLATFORM_VAARGS_TYPE == XN_PLATFORM_USE_WIN32_VAARGS_STYLE
00234 
00237     #define xnLoggerWriteHelper(pLogger, severity, csFormat, ...)                               \
00238         if (pLogger != NULL && severity >= pLogger->nMinSeverity)                               \
00239         {                                                                                       \
00240             xnLoggerWrite(pLogger, severity, __FILE__, __LINE__, csFormat, __VA_ARGS__);        \
00241         }
00242 
00246     #define xnLoggerVerbose(pLogger, csFormat, ...) xnLoggerWriteHelper(pLogger, XN_LOG_VERBOSE, csFormat, __VA_ARGS__)
00247 
00250     #define xnLoggerInfo(pLogger, csFormat, ...)    xnLoggerWriteHelper(pLogger, XN_LOG_INFO, csFormat, __VA_ARGS__)
00251 
00254     #define xnLoggerWarning(pLogger, csFormat, ...) xnLoggerWriteHelper(pLogger, XN_LOG_WARNING, csFormat, __VA_ARGS__)
00255 
00258     #define xnLoggerError(pLogger, csFormat, ...)   xnLoggerWriteHelper(pLogger, XN_LOG_ERROR, csFormat, __VA_ARGS__)
00259 
00268     #define XN_RETURN_WITH_LOG(pLogger, nRetVal, severity, csFormat, ...)                   \
00269         {                                                                                   \
00270             xnLoggerWriteHelper(pLogger, severity, csFormat, __VA_ARGS__);                  \
00271             return (nRetVal);                                                               \
00272         }
00273 
00281     #define XN_RETURN_WITH_WARNING_LOG(pLogger, nRetVal, csFormat, ...)                     \
00282         XN_RETURN_WITH_LOG(pLogger, nRetVal, XN_LOG_WARNING, csFormat, __VA_ARGS__)
00283 
00291     #define XN_RETURN_WITH_ERROR_LOG(pLogger, nRetVal, csFormat, ...)                       \
00292         XN_RETURN_WITH_LOG(pLogger, nRetVal, XN_LOG_ERROR, csFormat, __VA_ARGS__)
00293 
00294 #elif XN_PLATFORM_VAARGS_TYPE == XN_PLATFORM_USE_GCC_VAARGS_STYLE
00295     #define xnLoggerWriteHelper(pLogger, severity, csFormat, ...)                               \
00296         if (pLogger != NULL && severity >= pLogger->nMinSeverity)                               \
00297         {                                                                                       \
00298             xnLoggerWrite(pLogger, severity, __FILE__, __LINE__, csFormat, ##__VA_ARGS__);      \
00299         }
00300 
00301     #define xnLoggerVerbose(pLogger, csFormat, ...) xnLoggerWriteHelper(pLogger, XN_LOG_VERBOSE, csFormat,## __VA_ARGS__)
00302     #define xnLoggerInfo(pLogger, csFormat, ...)    xnLoggerWriteHelper(pLogger, XN_LOG_INFO, csFormat, ##__VA_ARGS__)
00303     #define xnLoggerWarning(pLogger, csFormat, ...) xnLoggerWriteHelper(pLogger, XN_LOG_WARNING, csFormat, ##__VA_ARGS__)
00304     #define xnLoggerError(pLogger, csFormat, ...)   xnLoggerWriteHelper(pLogger, XN_LOG_ERROR, csFormat, ##__VA_ARGS__)
00305 
00306     /* Writes to the log and returns nRetVal */
00307     #define XN_RETURN_WITH_LOG(pLogger, nRetVal, severity, csFormat, ...)                   \
00308         {                                                                                   \
00309             xnLoggerWriteHelper(pLogger, severity, csFormat, ##__VA_ARGS__);                \
00310             return (nRetVal);                                                               \
00311         }
00312 
00313     /* Logs a warning and returns nRetVal */
00314     #define XN_RETURN_WITH_WARNING_LOG(pLogger, nRetVal, csFormat, ...)                     \
00315         XN_RETURN_WITH_LOG(pLogger, nRetVal, XN_LOG_WARNING, csFormat, ##__VA_ARGS__)
00316 
00317     /* Logs an error and returns nRetVal */
00318     #define XN_RETURN_WITH_ERROR_LOG(pLogger, nRetVal, csFormat, ...)                       \
00319         XN_RETURN_WITH_LOG(pLogger, nRetVal, XN_LOG_ERROR, csFormat, ##__VA_ARGS__)
00320 
00321 #elif XN_PLATFORM_VAARGS_TYPE == XN_PLATFORM_USE_ARC_VAARGS_STYLE
00322     #define xnLoggerWriteHelper(pLogger, severity, csFormat...)                                 \
00323         if (pLogger != NULL && severity >= pLogger->nMinSeverity)                               \
00324         {                                                                                       \
00325             xnLoggerWrite(pLogger, severity, __FILE__, __LINE__, csFormat);                     \
00326         }
00327 
00328     #define xnLoggerVerbose(pLogger, csFormat...) xnLoggerWriteHelper(pLogger, XN_LOG_VERBOSE, csFormat)
00329     #define xnLoggerInfo(pLogger, csFormat...)    xnLoggerWriteHelper(pLogger, XN_LOG_INFO, csFormat)
00330     #define xnLoggerWarning(pLogger, csFormat...) xnLoggerWriteHelper(pLogger, XN_LOG_WARNING, csFormat)
00331     #define xnLoggerError(pLogger, csFormat...)   xnLoggerWriteHelper(pLogger, XN_LOG_ERROR, csFormat)
00332 
00333     /* Writes to the log and returns nRetVal */
00334     #define XN_RETURN_WITH_LOG(pLogger, nRetVal, severity, csFormat...)                 \
00335         {                                                                               \
00336             xnLoggerWriteHelper(pLogger, severity, csFormat);                           \
00337             return (nRetVal);                                                           \
00338         }
00339 
00340     /* Logs a warning and returns nRetVal */
00341     #define XN_RETURN_WITH_WARNING_LOG(pLogger, nRetVal, csFormat...)                   \
00342         XN_RETURN_WITH_LOG(pLogger, nRetVal, XN_LOG_WARNING, csFormat)
00343 
00344     /* Logs an error and returns nRetVal */
00345     #define XN_RETURN_WITH_ERROR_LOG(pLogger, nRetVal, csFormat...)                     \
00346         XN_RETURN_WITH_LOG(pLogger, nRetVal, XN_LOG_ERROR, csFormat)
00347 
00348 #elif XN_PLATFORM_VAARGS_TYPE == XN_PLATFORM_USE_NO_VAARGS
00349     #define xnLoggerWriteHelper(pLogger, severity, csFormat, arg)                               \
00350         if (pLogger != NULL && severity >= pLogger->nMinSeverity)                               \
00351         {                                                                                       \
00352             xnLoggerWrite(pLogger, severity, __FILE__, __LINE__, csFormat, arg);                \
00353         }
00354 
00355     #define xnLoggerVerbose(pLogger, csFormat, arg) xnLoggerWriteHelper(pLogger, XN_LOG_VERBOSE, csFormat, arg)
00356     #define xnLoggerInfo(pLogger, csFormat, arg)    xnLoggerWriteHelper(pLogger, XN_LOG_INFO, csFormat, arg)
00357     #define xnLoggerWarning(pLogger, csFormat, arg) xnLoggerWriteHelper(pLogger, XN_LOG_WARNING, csFormat, arg)
00358     #define xnLoggerError(pLogger, csFormat, arg)   xnLoggerWriteHelper(pLogger, XN_LOG_ERROR, csFormat, arg)
00359 
00360     /* Writes to the log and returns nRetVal */
00361     #define XN_RETURN_WITH_LOG(pLogger, nRetVal, severity, csFormat)                    \
00362         {                                                                               \
00363             xnLoggerWriteHelper(pLogger, severity, csFormat);                           \
00364             return (nRetVal);                                                           \
00365         }
00366 
00367     /* Logs a warning and returns nRetVal */
00368     #define XN_RETURN_WITH_WARNING_LOG(pLogger, nRetVal, csFormat)                      \
00369         XN_RETURN_WITH_LOG(pLogger, nRetVal, XN_LOG_WARNING, csFormat)
00370 
00371     /* Logs an error and returns nRetVal */
00372     #define XN_RETURN_WITH_ERROR_LOG(pLogger, nRetVal, csFormat)                        \
00373         XN_RETURN_WITH_LOG(pLogger, nRetVal, XN_LOG_ERROR, csFormat)
00374 
00375 #else
00376     #error Xiron Log - Unknown VAARGS type!
00377 #endif
00378 
00379 // @}
00380 
00393 XN_C_API XnStatus XN_C_DECL xnLogCreateFile(const XnChar* strFileName, XN_FILE_HANDLE* phFile);
00394 
00404 XN_C_API XnStatus XN_C_DECL xnLogCreateFileEx(const XnChar* strFileName, XnBool bSessionBased, XN_FILE_HANDLE* phFile);
00405 
00406 // @}
00407 
00408 #define XN_MASK_RETVAL_CHECKS "RetValChecks"
00409 
00410 #if XN_PLATFORM == XN_PLATFORM_ARC
00411 extern "C" XnLogger* XN_LOGGER_RETVAL_CHECKS;
00412 #else
00413 XN_C_API XnLogger* XN_LOGGER_RETVAL_CHECKS;
00414 #endif
00415 
00417 #define XN_IS_STATUS_OK_LOG_ERROR(what, nRetVal)                                                        \
00418     if (nRetVal != XN_STATUS_OK)                                                                        \
00419     {                                                                                                   \
00420         xnLoggerError(XN_LOGGER_RETVAL_CHECKS, "Failed to " what ": %s", xnGetStatusString(nRetVal));   \
00421         XN_ASSERT(FALSE);                                                                               \
00422         return (nRetVal);                                                                               \
00423     }
00424 
00425 
00426 #ifndef __XN_NO_BC__
00427 
00428 XN_C_API XnStatus XN_API_DEPRECATED("Please use xnLogSetMaskMinSeverity() instead") XN_C_DECL xnLogSetMaskState(const XnChar* csMask, XnBool bEnabled);
00429 XN_C_API XnStatus XN_API_DEPRECATED("Please use xnLogSetMaskMinSeverity() instead") XN_C_DECL xnLogSetSeverityFilter(XnLogSeverity nMinSeverity);
00430 XN_C_API XnBool XN_C_DECL xnLogIsEnabled(const XnChar* csLogMask, XnLogSeverity nSeverity);
00431 XN_C_API void XN_C_DECL xnLogWrite(const XnChar* csLogMask, XnLogSeverity nSeverity, const XnChar* csFile, XnUInt32 nLine, const XnChar* csFormat, ...);
00432 XN_C_API void XN_C_DECL xnLogWriteNoEntry(const XnChar* csLogMask, XnLogSeverity nSeverity, const XnChar* csFormat, ...);
00433 XN_C_API void XN_C_DECL xnLogWriteBinaryData(const XnChar* csLogMask, XnLogSeverity nSeverity, const XnChar* csFile, XnUInt32 nLine, XnUChar* pBinData, XnUInt32 nDataSize, const XnChar* csFormat, ...);
00434 
00435 #if XN_PLATFORM_VAARGS_TYPE == XN_PLATFORM_USE_WIN32_VAARGS_STYLE
00436     #define xnLogVerbose(csLogMask, csFormat, ...)  xnLogWrite(csLogMask, XN_LOG_VERBOSE, __FILE__, __LINE__, csFormat, __VA_ARGS__)
00437     #define xnLogInfo(csLogMask, csFormat, ...)     xnLogWrite(csLogMask, XN_LOG_INFO, __FILE__, __LINE__, csFormat, __VA_ARGS__)
00438     #define xnLogWarning(csLogMask, csFormat, ...)  xnLogWrite(csLogMask, XN_LOG_WARNING, __FILE__, __LINE__, csFormat, __VA_ARGS__)
00439     #define xnLogError(csLogMask, csFormat, ...)    xnLogWrite(csLogMask, XN_LOG_ERROR, __FILE__, __LINE__, csFormat, __VA_ARGS__)
00440 
00441     /* Writes to the log and returns nRetVal */
00442     #define XN_LOG_RETURN(nRetVal, nSeverity, csLogMask, csFormat, ...)                 \
00443     {                                                                                   \
00444         xnLogWrite(csLogMask, nSeverity, __FILE__, __LINE__, csFormat, __VA_ARGS__);    \
00445         return (nRetVal);                                                               \
00446     }
00447 
00448     /* Logs a warning and returns nRetVal */
00449     #define XN_LOG_WARNING_RETURN(nRetVal, csLogMask, csFormat, ...)                    \
00450         XN_LOG_RETURN(nRetVal, XN_LOG_WARNING, csLogMask, csFormat, __VA_ARGS__)
00451 
00452     /* Logs a warning and returns nRetVal */
00453     #define XN_LOG_ERROR_RETURN(nRetVal, csLogMask, csFormat, ...)                      \
00454         XN_LOG_RETURN(nRetVal, XN_LOG_ERROR, csLogMask, csFormat, __VA_ARGS__)
00455 
00456 #elif XN_PLATFORM_VAARGS_TYPE == XN_PLATFORM_USE_GCC_VAARGS_STYLE
00457     #define xnLogVerbose(csLogMask, csFormat, ...)  xnLogWrite(csLogMask, XN_LOG_VERBOSE, __FILE__, __LINE__, csFormat, ##__VA_ARGS__)
00458     #define xnLogInfo(csLogMask, csFormat, ...)     xnLogWrite(csLogMask, XN_LOG_INFO, __FILE__, __LINE__, csFormat, ##__VA_ARGS__)
00459     #define xnLogWarning(csLogMask, csFormat, ...)  xnLogWrite(csLogMask, XN_LOG_WARNING, __FILE__, __LINE__, csFormat, ##__VA_ARGS__)
00460     #define xnLogError(csLogMask, csFormat, ...)    xnLogWrite(csLogMask, XN_LOG_ERROR, __FILE__, __LINE__, csFormat, ##__VA_ARGS__)
00461 
00462     /* Writes to the log and returns nRetVal */
00463     #define XN_LOG_RETURN(nRetVal, nSeverity, csLogMask, csFormat, ...)                 \
00464     {                                                                                   \
00465         xnLogWrite(csLogMask, nSeverity, __FILE__, __LINE__, csFormat, ##__VA_ARGS__);  \
00466         return (nRetVal);                                                               \
00467     }
00468 
00469     /* Logs a warning and returns nRetVal */
00470     #define XN_LOG_WARNING_RETURN(nRetVal, csLogMask, csFormat, ...)                    \
00471         XN_LOG_RETURN(nRetVal, XN_LOG_WARNING, csLogMask, csFormat, ##__VA_ARGS__)
00472 
00473     /* Logs a warning and returns nRetVal */
00474     #define XN_LOG_ERROR_RETURN(nRetVal, csLogMask, csFormat, ...)                      \
00475         XN_LOG_RETURN(nRetVal, XN_LOG_ERROR, csLogMask, csFormat, ##__VA_ARGS__)
00476 
00477 #elif XN_PLATFORM_VAARGS_TYPE == XN_PLATFORM_USE_ARC_VAARGS_STYLE
00478     #define xnLogVerbose(csLogMask, csFormat...)    xnLogWrite(csLogMask, XN_LOG_VERBOSE, __FILE__, __LINE__, csFormat)
00479     #define xnLogInfo(csLogMask, csFormat...)       xnLogWrite(csLogMask, XN_LOG_INFO, __FILE__, __LINE__, csFormat)
00480     #define xnLogWarning(csLogMask, csFormat...)    xnLogWrite(csLogMask, XN_LOG_WARNING, __FILE__, __LINE__, csFormat)
00481     #define xnLogError(csLogMask, csFormat...)      xnLogWrite(csLogMask, XN_LOG_ERROR, __FILE__, __LINE__, csFormat)
00482 
00483     /* Writes to the log and returns nRetVal */
00484     #define XN_LOG_RETURN(nRetVal, nSeverity, csLogMask, csFormat...)                   \
00485     {                                                                                   \
00486         xnLogWrite(csLogMask, nSeverity, __FILE__, __LINE__, csFormat);                 \
00487         return (nRetVal);                                                               \
00488     }
00489 
00490     /* Logs a warning and returns nRetVal */
00491     #define XN_LOG_WARNING_RETURN(nRetVal, csLogMask, csFormat...)                      \
00492         XN_LOG_RETURN(nRetVal, XN_LOG_WARNING, csLogMask, csFormat)
00493 
00494     /* Logs a warning and returns nRetVal */
00495     #define XN_LOG_ERROR_RETURN(nRetVal, csLogMask, csFormat...)                        \
00496         XN_LOG_RETURN(nRetVal, XN_LOG_ERROR, csLogMask, csFormat)
00497 
00498     /* If nRetVal is not ok, writes to the log and returns nRetVal */
00499     #define XN_IS_STATUS_OK_LOG(nRetVal, nSeverity, csLogMask, csFormat...)             \
00500         if (nRetVal != XN_STATUS_OK)                                                    \
00501     {                                                                                   \
00502         XN_LOG_RETURN(nRetVal, nSeverity, csLogMask, csFormat)                          \
00503     }                                                                                       
00504 
00505     /* If nRetVal is not ok, logs a warning and returns nRetVal */
00506     #define XN_IS_STATUS_OK_WARNING(nRetVal, csLogMask, csFormat...)                    \
00507         XN_IS_STATUS_OK_LOG(nRetVal, XN_LOG_WARNING, csLogMask, csFormat)
00508 
00509     /* If nRetVal is not ok, logs an error and returns nRetVal */
00510     #define XN_IS_STATUS_OK_ERROR(nRetVal, csLogMask, csFormat...)                      \
00511         XN_IS_STATUS_OK_LOG(nRetVal, XN_LOG_ERROR, csLogMask, csFormat)
00512 
00513 #elif XN_PLATFORM_VAARGS_TYPE == XN_PLATFORM_USE_NO_VAARGS
00514     #define xnLogVerbose(csLogMask, csFormat, args) xnLogWrite(csLogMask, XN_LOG_VERBOSE, __FILE__, __LINE__, csFormat, args)
00515     #define xnLogInfo(csLogMask, csFormat, args)    xnLogWrite(csLogMask, XN_LOG_INFO, __FILE__, __LINE__, csFormat, args)
00516     #define xnLogWarning(csLogMask, csFormat, args) xnLogWrite(csLogMask, XN_LOG_WARNING, __FILE__, __LINE__, csFormat, args)
00517     #define xnLogError(csLogMask, csFormat, args)   xnLogWrite(csLogMask, XN_LOG_ERROR, __FILE__, __LINE__, csFormat, args)
00518 
00519     /* Writes to the log and returns nRetVal */
00520     #define XN_LOG_RETURN(nRetVal, nSeverity csLogMask, csFormat, args)                 \
00521     {                                                                                   \
00522         xnLogWrite(csLogMask, nSeverity, __FILE__, __LINE__, csFormat, args);           \
00523         return (nRetVal);                                                               \
00524     }
00525 
00526     /* Logs a warning and returns nRetVal */
00527     #define XN_LOG_WARNING_RETURN(nRetVal, csLogMask, csFormat, args)                   \
00528         XN_LOG_RETURN(nRetVal, XN_LOG_WARNING, csLogMask, csFormat, args)
00529 
00530     /* Logs an error and returns nRetVal */
00531     #define XN_LOG_ERROR_RETURN(nRetVal, csLogMask, csFormat, args)                     \
00532         XN_LOG_RETURN(nRetVal, XN_LOG_ERROR, csLogMask, csFormat, args)
00533 
00534 #else
00535     #error Xiron Log - Unknown VAARGS type!
00536 #endif
00537 
00538 #endif // ifndef __XN_NO_BC__
00539 
00540 #endif //_XN_LOG_H_
00541