epoc32/include/logdef.h
branchSymbian2
changeset 2 2fe1408b6811
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/epoc32/include/logdef.h	Tue Mar 16 16:12:26 2010 +0000
@@ -0,0 +1,135 @@
+// Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Symbian Foundation License v1.0" to Symbian Foundation members and "Symbian Foundation End User License Agreement v1.0" to non-members
+// which accompanies this distribution, and is available
+// at the URL "http://www.symbianfoundation.org/legal/licencesv10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// Define Logging Service Constants, Macros and Definitions 
+// intended for inclusion into any source file
+// which define classes wishing to use log server services.
+// 
+//
+
+#if !defined(__LOGDEF_H__)
+#define __LOGDEF_H__
+
+#if !defined(__E32BASE_H__)
+#include <e32base.h>
+#endif
+
+#if !defined(__ANSICOMP_H__)
+#include <ansicomp.h>	// Enforce ANSI compliance upon Microsoft Compilers
+#endif
+
+// This define removed for sanity and performance sake.  To enable logging in
+// your component, redefine the __LOGGING macro in your own .cpp files, prior to
+// the #include of this file.
+// #define __LOGGING 1
+
+/**
+Define a constant to control the maximum length of a log message
+@publishedAll
+@deprecated
+*/
+const TInt KMaxLogEntrySize = KMaxFileName;
+
+// Logging definitions
+#if defined (__LOGGING) && 	defined (_DEBUG)		
+
+// Logging activity is enabled
+#if !defined(__CLOG_H__)
+#include "clog.h"
+#endif
+
+	// Define an error message for failed open calls
+	_LIT(KLogOpenFailed,"No log available");
+
+	// Define a set of macros to control logging activity
+	// The log server client pointer
+	#define __DECLARE_LOG					CLogClient* iLogPtr;
+
+	// Open a connection to the log server for appended log messages
+	#define __OPEN_LOG(aLogName)			{iLogPtr = NULL; TRAPD(logError,(iLogPtr = CLogClient::NewL(aLogName,EFalse))); if(logError !=KErrNone) __QINFO(KLogOpenFailed);}
+	// Open a connection to the log server for log messages to go to a clean log
+	#define __OPEN_CLEANLOG(aLogName)		{iLogPtr = NULL; TRAPD(logError,(iLogPtr = CLogClient::NewL(aLogName,ETrue))); if(logError !=KErrNone) __QINFO(KLogOpenFailed);}
+	// Close the connection to the log server
+	#define __CLOSE_LOG						{delete iLogPtr; iLogPtr = NULL;}
+	// Push and pop the log onto the cleanup stack
+	#define __PUSHLOGL						{CleanupStack::PushL(iLogPtr);}
+	#define __POPLOG						{CleanupStack::Pop();}
+	
+	// Log a simple message
+	#define __LOG(aText)					{if(iLogPtr != NULL) iLogPtr->Log(aText,CLogClient::ELogLight);}
+	// Log a message with single parameter formatting.
+	#define __LOG1(aText,aV1)				{if(iLogPtr != NULL) iLogPtr->Log(CLogClient::ELogLight,aText,aV1);}
+
+	#if defined (__PROFILING__)
+	// Define additional macros for logging profiling information
+		#define __PROFILELOG(aText)			{if(iLogPtr != NULL) iLogPtr->Log(aText,CLogClient::ELogProfile);}
+		#define __PROFILELOG1(aText,aV1)	{if(iLogPtr != NULL) iLogPtr->Log(CLogClient::ELogProfile,aText,aV1);}
+	#else
+	// Empty macros for non-profiling builds
+		#define __PROFILELOG(aText);
+		#define __PROFILELOG1(aText,aV1);
+	#endif
+
+	// A log method entry macro
+	#define __LOG_ENTER(aText)			{if(iLogPtr != NULL) iLogPtr->LogEnter(aText,CLogClient::ELogProfile); }
+	// A log method exit macro
+	#define __LOG_RETURN				{if(iLogPtr != NULL) iLogPtr->LogReturn(); }
+	// Log a simple message at a particular level of detail
+	#define __LOGX(aLevel,aText)		{if(iLogPtr != NULL) iLogPtr->Log(aText,aLevel);}
+	// Log a simple message at a particular level of detail with single parameter formatting.
+	#define __LOGX1(aLevel,aText,aV1)	{if(iLogPtr != NULL) iLogPtr->Log(aLevel,aText,aV1);}
+	// Log a simple message at trace level of detail
+	#define __TRACELOG(aText)			{if(iLogPtr != NULL) iLogPtr->Log(aText,CLogClient::ELogTrace); }
+	// Log a simple message at trace level of detail with single parameter formatting.
+	#define __TRACELOG1(aText,aV1)		{if(iLogPtr != NULL) iLogPtr->Log(CLogClient::ELogTrace,aText,aV1);}
+	// Show a simple message within the info window.
+	#define __QINFO(aText)				{User::InfoPrint(aText);} 
+	// Configuration of logging server behaviour
+	// Turn on the RDebug::Print() when logging (Default setting)
+	#define __ENABLE_LOGRDEBUG()		{if(iLogPtr != NULL) iLogPtr->RDebugConfig(ETrue);} 
+	// Turn off the RDebug::Print() when logging
+	#define __DISABLE_LOGRDEBUG()		{if(iLogPtr != NULL) iLogPtr->RDebugConfig(EFalse);} 
+
+#else
+  #if !defined (_DEBUG)
+	// In Release builds we want no macro definition whatsoever
+	#define __DECLARE_LOG
+
+  #else	// In debug builds...
+	// Empty macros for non-logging builds, except for __DECLARE_LOG - we want to ensure the
+	// object sizes of classes are identical when headers are included in classes with a mixture
+	// of __LOGGING turned on and off, to avoid nasty run-time linking errors.
+	#define __DECLARE_LOG				void* iLogPtrNotInUse;
+  #endif
+	#define __OPEN_LOG(aLogName)
+	#define __OPEN_CLEANLOG(aLogName)
+	#define __CLOSE_LOG
+	#define __PUSHLOGL
+	#define __POPLOG
+	#define __LOG_ENTER(aText)
+	#define __LOG_RETURN 
+	#define __LOG(aText)
+	#define __LOG1(aText,aV1)
+	#define __LOGX(aLevel,aText)
+	#define __LOGX1(aLevel,aText,aV1)
+	#define __PROFILELOG(aText)
+	#define __PROFILELOG1(aText,aV1)
+	#define __TRACELOG(aText)
+	#define __TRACELOG1(aText,aV1)
+	#define __QINFO(aText)
+	#define __ENABLE_LOGRDEBUG()
+	#define __DISABLE_LOGRDEBUG()
+
+#endif	// __LOGGING
+
+#endif	// __LOGDEF_H__