diff -r 000000000000 -r d6fe6244b863 htiui/HtiCommPlugins/HtiBtCommPlugin/HtiBtCommServer/src/Logger.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/htiui/HtiCommPlugins/HtiBtCommPlugin/HtiBtCommServer/src/Logger.cpp Tue Feb 02 00:17:27 2010 +0200 @@ -0,0 +1,201 @@ +/* +* Copyright (c) 2009 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: Logger implementation. +* +*/ + + +// INCLUDE FILES +#include "Logger.h" +#include + +#ifdef __ENABLE_LOGGING__ + +// CONSTANTS +_LIT(KDebugStr, "DEBUG: "); +_LIT(KInfoStr, "INFO: "); +_LIT(KWarnStr, "WARN: "); +_LIT(KErrStr, "ERROR: "); + + +/*---------------------------------------------------------------------------*/ +void LogBytes( const TDesC8& aData, TInt aMaxBytesToLog ) + { + TInt i = 0; + while ( i < aData.Length() && i < aMaxBytesToLog ) + { + TBuf<64> hexbuf; + TBuf<32> stringbuf; + TInt k=0; + while ( i < aMaxBytesToLog && i < aData.Length() && k < 16 ) + { + const TUint8 uint8 = aData[i]; + hexbuf.AppendFormat( _L( "%02X "), uint8 ); + + if ( uint8 == '%' ) + { + stringbuf.Append( _L( "%%" ) ); // escape character in format string + } + else if ( uint8 < 32 || uint8 > 126 ) + { + stringbuf.Append( _L(".") ); + } + else + { + stringbuf.Append( ( TChar ) uint8 ); + } + i++; + k++; + } + TBuf<128> finalbuf; + finalbuf.Copy( hexbuf ); + finalbuf.Append( _L(" | " ) ); + finalbuf.Append( stringbuf ); + DebugLog( finalbuf ); + } + } + +/*---------------------------------------------------------------------------*/ +class TOverflowHandler : public TDes16Overflow + { + void Overflow( TDes16& aDes ) + { + TBuf logString( _L("LOG ERROR: overflow: ") ); + logString.Append( aDes.Left( + KLogEntryMaxLength - logString.Length() ) ); + aDes.Copy( logString ); + } + }; + +/*---------------------------------------------------------------------------*/ +// Usage example: DOLOG(_L("Logstring")); +void DebugLog( TRefByValue aFmt, ... ) + { + VA_LIST list; + VA_START( list, aFmt ); + Log( KLogLevelDebug, aFmt, list ); + } + +/*---------------------------------------------------------------------------*/ +void InfoLog( TRefByValue aFmt, ... ) + { + VA_LIST list; + VA_START( list, aFmt ); + Log( KLogLevelInfo, aFmt, list ); + } + +/*---------------------------------------------------------------------------*/ +void WarnLog( TRefByValue aFmt, ... ) + { + VA_LIST list; + VA_START( list, aFmt ); + Log( KLogLevelWarning, aFmt, list ); + } + +/*---------------------------------------------------------------------------*/ +void ErrLog( TRefByValue aFmt, ...) + { + VA_LIST list; + VA_START( list, aFmt ); + Log( KLogLevelError, aFmt, list ); + } + +/*---------------------------------------------------------------------------*/ +void Log( TInt aLevel, TRefByValue aText, VA_LIST list ) + { + + if ( aLevel < KMinimumLogLevel ) + return; + + _LIT( KLineFeed, "\n" ); + + /** + * Log time format (see TTime) is + * Day-Month-Year Hours:Minutes:Seconds:Milliseconds + * + * Example: 30-12-2004 23:00:55:990 + */ + _LIT( KLogTimeFormat, "%F%D-%M-%Y %H:%T:%S:%*C3" ); + + TBuf8 writeBuffer; + TBuf16 logEntry; + RFs FileServer; + RFile File; + + if ( FileServer.Connect() != KErrNone ) + { + FileServer.Close(); // just in case + User::Panic( KLogPanicCategory(), KPanicFsConnectFailed ); + return; + } + + // Open file for writing, if exists. Othervise create new file. + if ( File.Open( FileServer, KLogFileName(), EFileWrite ) != KErrNone ) + { + if ( File.Create( FileServer, KLogFileName(), EFileWrite ) + != KErrNone ) + { + FileServer.Close(); + User::Panic( KLogPanicCategory(), KPanicFileCreateFailed ); + } + } + + TTime currentTime; + currentTime.UniversalTime(); + TBuf<32> timeString; + + // currentTime is now in universal time. Convert it to home time. + TLocale locale; + TTimeIntervalSeconds universalTimeOffset( locale.UniversalTimeOffset() ); + TTimeIntervalHours daylightSaving( 0 ); + if ( locale.QueryHomeHasDaylightSavingOn() ) + { + daylightSaving = 1; + } + currentTime = currentTime + universalTimeOffset + daylightSaving; + currentTime.FormatL( timeString, KLogTimeFormat ); + + // Add LogString to the end of file and close the file + TInt currentSize = 0, returnCode; + writeBuffer.Append( timeString ); + writeBuffer.Append( _L(": ") ); + + if ( aLevel < KLogLevelInfo ) + writeBuffer.Append(KDebugStr); + else if ( aLevel < KLogLevelWarning ) + writeBuffer.Append(KInfoStr); + else if ( aLevel < KLogLevelError ) + writeBuffer.Append(KWarnStr); + else + writeBuffer.Append(KErrStr); + + logEntry.AppendFormatList( aText, list ); //, &overFlowHandler ); + writeBuffer.Append( logEntry.Left( + KLogEntryMaxLength - writeBuffer.Length() ) ); + writeBuffer.Append( KLineFeed ); + File.Size( currentSize ); + returnCode = File.Write( currentSize, + writeBuffer, + writeBuffer.Length() ); + File.Close(); + // Close file server session + FileServer.Close(); + + if ( returnCode != KErrNone ) + { + User::Panic( KLogPanicCategory(), KPanicFileWriteFailed ); + } + } + +#endif // __ENABLE_LOGGING__