diff -r 000000000000 -r 7f85d04be362 upnpframework/inc/upnplog.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/upnpframework/inc/upnplog.h Thu Dec 17 08:52:00 2009 +0200 @@ -0,0 +1,213 @@ +/* +* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: log/assert facility of upnp framework +* +*/ + + +// ************************************************************************** +// * +// * HOW TO USE THIS LOGGING FACILITY +// * +// * 1. enable log facility in the code. +// * _LIT( KComponentLogfile, "component.txt"); +// * #include "upnplog.h" +// * +// * 2. have flogger in mmp-file +// * DEBUGLIBRARY FLOGGER.LIB +// * +// * 3. use the log interface in the source +// * __LOG( char* strz ) +// * __LOG1( char* strz, p1 ) +// * __LOG2( char* strz, p1, p2 ) +// * __LOG3( char* strz, p1, p2, p3 ) +// * __LOG8( const TDesC8& msg ) +// * __LOG16( const TDesC16& msg ) +// * __ASSERTD( test, file, line ) +// * __ASSERT( test, file, line ) +// * __PANICD( file, line ) +// * __PANIC( file, line ) +// * +// * 4. The default logging/assertion modes are following: +// * DEBUG build: log to console, assertion mode on. +// * RELEASE build: log turned off, assertion mode off. +// * To override this preset, you can use following macros: +// * MACRO __UPNP_LOG_FILE (logging to file) +// * MACRO __UPNP_LOG_CONSOLE (logging to console) +// * MACRO __UPNP_LOG_OFF (logging turned off in DEBUG build) +// * MACRO __UPNP_DEBUG_ASSERT (enable D-panic and D-assert) +// * MACRO __UPNP_DEBUG_ASSERT_OFF (disable D-panic and D-assert) +// * in case of using logging in RELEASE build, remember to switch +// * LIBRARY FLOGGER.LIB instead of DEBUGLIBRARY. +// * +// ************************************************************************** + + +#ifndef __UPNPLOG_H__ +#define __UPNPLOG_H__ + + +#include + + +// in DEBUG build activate the default modes +#ifdef _DEBUG + + #if !( defined(__UPNP_LOG_FILE) || \ + defined(__UPNP_LOG_CONSOLE) || \ + defined(__UPNP_LOG_OFF) ) + // activate default logging mode + #define __UPNP_LOG_CONSOLE + #endif + + #if !( defined(__UPNP_DEBUG_ASSERT) || \ + defined(__UPNP_DEBUG_ASSERT_OFF) ) + // activate debug assertion mode + #define __UPNP_DEBUG_ASSERT + #endif + +#endif //_DEBUG + + +// this dummy function is to avoid compiler warning #177-D: +// variable was declared but never referenced +inline void __Dummy_KComponentLogfile() + { + TUint16 c = KComponentLogfile().Size(); + c = 0; + } + +// +// ************************************************************************** +// LOGGING MACROS +// ************************************************************************** +// + +#if defined(__UPNP_LOG_FILE) + + #include + + // Subdirectory under c:\logs -directory + _LIT( KLogDir, "upnpframework" ); + + #define __LOG( strz ) Print16(_L(strz)) + #define __LOG1( strz,p1 ) Print16(_L(strz),p1) + #define __LOG2( strz,p1,p2 ) Print16(_L(strz),p1,p2) + #define __LOG3( strz,p1,p2,p3 ) \ + Print16(_L(strz),p1,p2,p3) + #define __LOG8( msg ) Print8( _L8( "%S" ), &msg ) + #define __LOG16( msg ) Print16( _L16( "%S" ), &msg ) + #define __LOG8_1( strz,p1 ) Print8(_L8(strz),p1) + + // Writes a log text to a file using file logger + inline void Print16( const TRefByValue aFmt, ... ) + { + VA_LIST list; + VA_START(list,aFmt); + RFileLogger::WriteFormat( KLogDir, KComponentLogfile, + EFileLoggingModeAppend, aFmt, list ); + VA_END( list ); + } + + // Writes a log text to a file using file logger + inline void Print8( const TRefByValue aFmt, ... ) + { + VA_LIST list; + VA_START(list,aFmt); + RFileLogger::WriteFormat( KLogDir, KComponentLogfile, + EFileLoggingModeAppend, aFmt, list ); + VA_END( list ); + } + +#elif defined(__UPNP_LOG_CONSOLE) + + #include + + #define __LOG( strz ) RDebug::Print(_L(strz)) + #define __LOG1( strz,p1 ) RDebug::Print(_L(strz),p1) + #define __LOG2( strz,p1,p2 ) RDebug::Print(_L(strz),p1,p2) + #define __LOG3( strz,p1,p2,p3 ) \ + RDebug::Print(_L(strz),p1,p2,p3) + #define __LOG8( msg ) Debug8(msg) + #define __LOG16( msg ) RDebug::Print(msg) + #define __LOG8_1( strz,p1 ) RDebug::Printf(strz, p1) + + inline void Debug8( const TDesC8& aMsg ) + { + __Dummy_KComponentLogfile(); + RDebug::RawPrint( aMsg ); + } + +#else // __UPNP_LOG_OFF + + #define __LOG( strz ) __Dummy_KComponentLogfile(); + #define __LOG1( fmt,p1 ) __Dummy_KComponentLogfile(); + #define __LOG2( fmt,p1,p2 ) __Dummy_KComponentLogfile(); + #define __LOG3( fmt,p1,p2,p3 ) __Dummy_KComponentLogfile(); + #define __LOG8( msg ) __Dummy_KComponentLogfile(); + #define __LOG16( msg ) __Dummy_KComponentLogfile(); + #define __LOG8_1( strz,p1 ) __Dummy_KComponentLogfile(); + +#endif // __UPNP_LOG_FILE || __UPNP_LOG_CONSOLE || __UPNP_LOG_OFF + + +// +// ************************************************************************** +// ASSERTION MACROS +// ************************************************************************** +// + +#define __ASSERT( test, file, line ) \ + if( !( test ) ) \ + { \ + __LOG2( "Assertion failed: %s %d", \ + file, line ); \ + User::Panic( _L(file), line ); \ + } + +#define __PANIC( file, line ) \ + { \ + __LOG2( "Panic: %s %d", \ + file, line ); \ + User::Panic( _L(file), line ) \ + } + +#ifdef __UPNP_DEBUG_ASSERT + + #define __ASSERTD( test, file, line ) \ + if( !( test ) ) \ + { \ + __LOG2( "Assertion failed: %s %d", \ + file, line ); \ + User::Panic( _L(file), line ); \ + } + + #define __PANICD( file, line ) \ + { \ + __LOG2( "Panic: %s %d", \ + file, line ); \ + User::Panic( _L(file), line ); \ + } + +#else // __UPNP_DEBUG_ASSERT_OFF + + #define __ASSERTD( test, file, line ) + #define __PANICD( file, line ) + +#endif // __UPNP_DEBUG_ASSERT || __UPNP_DEBUG_ASSERT_OFF + + + +#endif // __UPNPLOG_H__ +