1 // Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
2 // All rights reserved.
3 // This component and the accompanying materials are made available
4 // 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
5 // which accompanies this distribution, and is available
6 // at the URL "http://www.symbianfoundation.org/legal/licencesv10.html".
8 // Initial Contributors:
9 // Nokia Corporation - initial contribution.
14 // Define Logging Service Constants, Macros and Definitions
15 // intended for inclusion into any source file
16 // which define classes wishing to use log server services.
20 #if !defined(__LOGDEF_H__)
23 #if !defined(__E32BASE_H__)
27 #if !defined(__ANSICOMP_H__)
28 #include <ansicomp.h> // Enforce ANSI compliance upon Microsoft Compilers
31 // This define removed for sanity and performance sake. To enable logging in
32 // your component, redefine the __LOGGING macro in your own .cpp files, prior to
33 // the #include of this file.
34 // #define __LOGGING 1
37 Define a constant to control the maximum length of a log message
41 const TInt KMaxLogEntrySize = KMaxFileName;
43 // Logging definitions
44 #if defined (__LOGGING) && defined (_DEBUG)
46 // Logging activity is enabled
47 #if !defined(__CLOG_H__)
51 // Define an error message for failed open calls
52 _LIT(KLogOpenFailed,"No log available");
54 // Define a set of macros to control logging activity
55 // The log server client pointer
56 #define __DECLARE_LOG CLogClient* iLogPtr;
58 // Open a connection to the log server for appended log messages
59 #define __OPEN_LOG(aLogName) {iLogPtr = NULL; TRAPD(logError,(iLogPtr = CLogClient::NewL(aLogName,EFalse))); if(logError !=KErrNone) __QINFO(KLogOpenFailed);}
60 // Open a connection to the log server for log messages to go to a clean log
61 #define __OPEN_CLEANLOG(aLogName) {iLogPtr = NULL; TRAPD(logError,(iLogPtr = CLogClient::NewL(aLogName,ETrue))); if(logError !=KErrNone) __QINFO(KLogOpenFailed);}
62 // Close the connection to the log server
63 #define __CLOSE_LOG {delete iLogPtr; iLogPtr = NULL;}
64 // Push and pop the log onto the cleanup stack
65 #define __PUSHLOGL {CleanupStack::PushL(iLogPtr);}
66 #define __POPLOG {CleanupStack::Pop();}
68 // Log a simple message
69 #define __LOG(aText) {if(iLogPtr != NULL) iLogPtr->Log(aText,CLogClient::ELogLight);}
70 // Log a message with single parameter formatting.
71 #define __LOG1(aText,aV1) {if(iLogPtr != NULL) iLogPtr->Log(CLogClient::ELogLight,aText,aV1);}
73 #if defined (__PROFILING__)
74 // Define additional macros for logging profiling information
75 #define __PROFILELOG(aText) {if(iLogPtr != NULL) iLogPtr->Log(aText,CLogClient::ELogProfile);}
76 #define __PROFILELOG1(aText,aV1) {if(iLogPtr != NULL) iLogPtr->Log(CLogClient::ELogProfile,aText,aV1);}
78 // Empty macros for non-profiling builds
79 #define __PROFILELOG(aText);
80 #define __PROFILELOG1(aText,aV1);
83 // A log method entry macro
84 #define __LOG_ENTER(aText) {if(iLogPtr != NULL) iLogPtr->LogEnter(aText,CLogClient::ELogProfile); }
85 // A log method exit macro
86 #define __LOG_RETURN {if(iLogPtr != NULL) iLogPtr->LogReturn(); }
87 // Log a simple message at a particular level of detail
88 #define __LOGX(aLevel,aText) {if(iLogPtr != NULL) iLogPtr->Log(aText,aLevel);}
89 // Log a simple message at a particular level of detail with single parameter formatting.
90 #define __LOGX1(aLevel,aText,aV1) {if(iLogPtr != NULL) iLogPtr->Log(aLevel,aText,aV1);}
91 // Log a simple message at trace level of detail
92 #define __TRACELOG(aText) {if(iLogPtr != NULL) iLogPtr->Log(aText,CLogClient::ELogTrace); }
93 // Log a simple message at trace level of detail with single parameter formatting.
94 #define __TRACELOG1(aText,aV1) {if(iLogPtr != NULL) iLogPtr->Log(CLogClient::ELogTrace,aText,aV1);}
95 // Show a simple message within the info window.
96 #define __QINFO(aText) {User::InfoPrint(aText);}
97 // Configuration of logging server behaviour
98 // Turn on the RDebug::Print() when logging (Default setting)
99 #define __ENABLE_LOGRDEBUG() {if(iLogPtr != NULL) iLogPtr->RDebugConfig(ETrue);}
100 // Turn off the RDebug::Print() when logging
101 #define __DISABLE_LOGRDEBUG() {if(iLogPtr != NULL) iLogPtr->RDebugConfig(EFalse);}
104 #if !defined (_DEBUG)
105 // In Release builds we want no macro definition whatsoever
106 #define __DECLARE_LOG
108 #else // In debug builds...
109 // Empty macros for non-logging builds, except for __DECLARE_LOG - we want to ensure the
110 // object sizes of classes are identical when headers are included in classes with a mixture
111 // of __LOGGING turned on and off, to avoid nasty run-time linking errors.
112 #define __DECLARE_LOG void* iLogPtrNotInUse;
114 #define __OPEN_LOG(aLogName)
115 #define __OPEN_CLEANLOG(aLogName)
119 #define __LOG_ENTER(aText)
122 #define __LOG1(aText,aV1)
123 #define __LOGX(aLevel,aText)
124 #define __LOGX1(aLevel,aText,aV1)
125 #define __PROFILELOG(aText)
126 #define __PROFILELOG1(aText,aV1)
127 #define __TRACELOG(aText)
128 #define __TRACELOG1(aText,aV1)
129 #define __QINFO(aText)
130 #define __ENABLE_LOGRDEBUG()
131 #define __DISABLE_LOGRDEBUG()
135 #endif // __LOGDEF_H__