lbs/lbstestutils/src/ctlbstestlogger.cpp
branchSymbian2
changeset 1 8758140453c0
child 6 c108117318cb
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lbs/lbstestutils/src/ctlbstestlogger.cpp	Thu Jan 21 12:53:44 2010 +0000
@@ -0,0 +1,273 @@
+// Copyright (c) 2006-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"
+// which accompanies this distribution, and is available
+// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// lbstestlogger.cpp
+// System
+// 
+//
+
+#include <e32base.h>
+#include <e32debug.h>
+#include <flogger.h>
+#include <f32file.h>
+
+// Component
+#include "ctlbstestlogger.h"
+
+const TInt KLbsDevLogMaxBufSize = 256;
+_LIT(KTimeFormat, "%H:%T:%S.%C");
+_LIT(KLogPath, "\\logs\\LbsTestLogs\\");
+_LIT(KLbsDevLogFolder, "LbsTestLogs");
+_LIT(KLbsDevLogFile,"lbstest.txt");
+_LIT(KLbsDevLogError, "Error: ");
+_LIT(KLbsDevLogWarning, "Warning: ");
+_LIT(KLbsDevLogSep," | ");
+_LIT(KLbsDevLog, "LbsDevLog");
+
+
+const TInt KLbsHexDumpWidth=16;
+_LIT(KLbsFirstFormatString,"%04x : ");
+_LIT(KLbsSecondFormatString,"%02x ");
+_LIT(KLbsThirdFormatString,"%c");
+_LIT(KLbsThreeSpaces,"   ");
+_LIT(KLbsTwoSpaces,"  ");
+const TText KLbsFullStopChar='.';
+
+//-----------------------------------------------------------------------------
+// LbsTestLogger
+//-----------------------------------------------------------------------------
+
+void LbsTestLogger::CreateLogDir()
+	{
+	TInt err;
+	
+	// Create the directory
+	RFs fs;
+	err = fs.Connect();
+	if(KErrNone == err)
+		{
+		err = fs.MkDirAll(KLogPath);
+		fs.Close();	
+		}
+	}
+	
+
+/** Static function, one parameter
+@param aPrior Log entry priority
+@param aFmt TDes string reference 
+@InternalTechnology
+@prototype
+*/
+void LbsTestLogger::Write(TLogType aType, TLogPriority aPrior, TRefByValue<const TDesC16> aFmt, ...)
+	{
+	RFileLogger logger;
+	TInt err = logger.Connect();
+	
+	if (err == KErrNone)
+		{
+		VA_LIST list;
+		VA_START(list, aFmt);
+		TBuf16<KLbsDevLogMaxBufSize> strList;
+		strList.FormatList(aFmt, list);
+		VA_END(list);
+		TBuf16<KLbsDevLogMaxBufSize> txt;
+		
+		CreateLogTxt(aType, aPrior, txt);
+		txt.Append(strList.Left(KLbsDevLogMaxBufSize - txt.Length()));
+
+		CreateLogDir();
+		
+		logger.CreateLog(KLbsDevLogFolder, KLbsDevLogFile, EFileLoggingModeAppend);
+		logger.SetDateAndTime(EFalse, EFalse);
+		logger.Write(txt);
+
+		}
+		
+	logger.Close();
+	}
+
+/** Static function to dump the hex data
+@param aPrior Log entry priority
+@param aPtr TUnit8 pointer to hex data
+@param aLen length of hex data
+@InternalTechnology
+@prototype
+*/
+void LbsTestLogger::HexDump(TLogPriority aPrior, const TUint8 *aPtr, TInt aLen)
+	{
+	if (aPtr==NULL)     // nothing to do
+		return;
+
+	RFileLogger logger;
+	TInt err = logger.Connect();
+	CreateLogDir();	
+	logger.CreateLog(KLbsDevLogFolder, KLbsDevLogFile, EFileLoggingModeAppend);
+	logger.SetDateAndTime(EFalse, EFalse);
+	
+	// based on RFileLogger
+	TBuf<KLbsDevLogMaxBufSize> buf;
+	TBuf8<KLbsDevLogMaxBufSize> temp;
+	TInt i=0;
+	TBuf8<KLbsDevLogMaxBufSize> prefix;
+	CreateLogTxt(ELogNormal, aPrior, prefix);
+	
+	while (aLen>0)
+		{
+		TInt n=(aLen>KLbsHexDumpWidth ? KLbsHexDumpWidth : aLen);
+		buf.Copy(prefix);
+		buf.AppendFormat(KLbsFirstFormatString,i);
+		
+		TInt j;
+		for (j=0; j<n; j++)
+			buf.AppendFormat(KLbsSecondFormatString,aPtr[i+j]);
+			
+		while (j++<KLbsHexDumpWidth)
+			buf.Append(KLbsThreeSpaces);
+			
+		buf.Append(KLbsTwoSpaces);
+		for (j=0; j<n; j++)
+			buf.AppendFormat(KLbsThirdFormatString,(aPtr[i+j]<32 || aPtr[i+j]>126) ? KLbsFullStopChar : aPtr[i+j]);
+
+		logger.Write(buf);
+
+		buf.SetLength(0);
+		temp.SetLength(0);
+		aLen-=n;
+		i+=n;
+		}
+
+	logger.Close();
+	}
+	
+/** private function, create common log text
+@param aPrior Log entry priority
+@param aBuf The log prefix buffer
+@InternalTechnology
+@prototype
+*/
+void LbsTestLogger::CreateLogTxt(TLogType aType, TLogPriority aPrior, TDes16& aBuf)
+	{
+	TTime currentTime;
+	currentTime.UniversalTime();
+	TBuf16<32> cTimeStr;
+	TInt err = KErrNone;
+	TRAP(err, currentTime.FormatL(cTimeStr, KTimeFormat);)
+	if(err)
+		User::Panic(KLbsDevLog, err);
+	
+	TFileName dirName = RProcess().FileName();
+	TInt16 pos = dirName.LocateReverse('\\') + 1;
+	TPtr16 fileName = dirName.MidTPtr(pos);
+	TUint64 procId = RProcess().Id().Id();
+	
+	aBuf.Append(cTimeStr);
+	aBuf.Append(KLbsDevLogSep);
+
+	aBuf.Append(fileName);
+	aBuf.Append(KLbsDevLogSep);
+	
+	//aBuf.AppendFormat(_L16("%LX"),procId);
+	//aBuf.Append(KLbsDevLogSep);
+	
+	aBuf.AppendFormat(_L16("P%d"),aPrior);
+	aBuf.Append(KLbsDevLogSep);
+		
+	if (aType == ELogError)
+		{
+		aBuf.Append(KLbsDevLogError);
+		}
+	else if (aType == ELogWarning)
+		{
+		aBuf.Append(KLbsDevLogWarning);
+		}
+	}
+
+
+/** Static function, one parameter
+@param aPrior Log entry priority
+@param aFmt Log entry
+@InternalTechnology
+@prototype
+*/
+void LbsTestLogger::Write(TLogType aType, TLogPriority aPrior, TRefByValue<const TDesC8> aFmt, ...)
+	{
+	RFileLogger logger;
+	TInt err = logger.Connect();
+	
+	if (err == KErrNone)
+		{
+		VA_LIST list;
+		VA_START(list, aFmt);
+		TBuf8<KLbsDevLogMaxBufSize> strList;
+		strList.FormatList(aFmt, list);
+		VA_END(list);
+
+		TBuf8<KLbsDevLogMaxBufSize> txt;
+		CreateLogTxt(aType, aPrior, txt);
+		txt.Append(strList.Left(KLbsDevLogMaxBufSize - txt.Length()));
+
+		CreateLogDir();
+		logger.CreateLog(KLbsDevLogFolder, KLbsDevLogFile, EFileLoggingModeAppend);
+		logger.SetDateAndTime(EFalse, EFalse);
+		logger.Write(txt);
+
+		}
+		
+	logger.Close();
+	}
+
+/** private function, create common log text
+@param aPrior Log entry priority
+@param aBuf The log prefix buffer
+@InternalTechnology
+@prototype
+*/
+void LbsTestLogger::CreateLogTxt(TLogType aType, TLogPriority aPrior, TDes8& aBuf)
+	{
+	TTime currentTime;
+	currentTime.UniversalTime();
+	TBuf<32> cTimeStr;
+	TInt err = KErrNone;
+	TRAP(err, currentTime.FormatL(cTimeStr, KTimeFormat);)
+	if(err)
+		User::Panic(KLbsDevLog, err);
+	
+	TBuf8<32> cTimeStr8;
+	cTimeStr8.Copy(cTimeStr);
+	
+	TFileName dirName = RProcess().FileName();
+	TInt pos = dirName.LocateReverse('\\') + 1;
+	TPtr fileName = dirName.MidTPtr(pos);
+	TUint64 procId = RProcess().Id().Id();
+	
+	aBuf.Append(cTimeStr8);
+	aBuf.Append(KLbsDevLogSep);
+
+	aBuf.Append(fileName);
+	aBuf.Append(KLbsDevLogSep);
+	
+	//aBuf.AppendFormat(_L8("%LX"),procId);
+	//aBuf.Append(KLbsDevLogSep);
+	
+	aBuf.AppendFormat(_L8("P%d"),aPrior);
+	aBuf.Append(KLbsDevLogSep);
+	
+	if (aType == ELogError)
+		{
+		aBuf.Append(KLbsDevLogError);
+		}
+	else if (aType == ELogWarning)
+		{
+		aBuf.Append(KLbsDevLogWarning);
+		}
+	}