appfw/viewserver/server/VWSDEBUG.CPP
changeset 0 2e3d3ce01487
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appfw/viewserver/server/VWSDEBUG.CPP	Tue Feb 02 10:12:00 2010 +0200
@@ -0,0 +1,205 @@
+// Copyright (c) 1999-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:
+//
+
+#include "VWSDEBUG.H"
+
+#ifdef __DO_LOGGING__
+
+
+//#define VIEWSRV_SHOW_TRACE		
+#ifdef VIEWSRV_SHOW_TRACE
+void ShowTrace(TRefByValue<const TDesC> aFmt,...)
+	{
+	RDebug::Print(aFmt);
+	}
+#else
+void ShowTrace(TRefByValue<const TDesC> /*aFmt*/,...)
+	{
+	}
+#endif
+
+//
+// Constants.
+//
+
+const TInt KMaxTraceLength=256;
+
+
+//
+// CVwsLog.
+//
+
+void CVwsLog::StartLogL()
+	{
+	CVwsLog* self=new(ELeave) CVwsLog;
+	TRAPD(err,self->ConstructL());
+	if (!err)
+		{
+		Dll::SetTls(self);
+		CVwsLog::Log(CVwsLog::ENormal,_L("View Server log created"));
+		}
+	}
+
+void CVwsLog::ShutdownLog()
+	{
+	CVwsLog::Log(CVwsLog::ENormal,_L("View Server log shutdown"));
+	CVwsLog* self=STATIC_CAST(CVwsLog*,Dll::Tls());
+	ASSERT(self);
+	delete self;
+	Dll::SetTls(NULL);
+	}
+
+CVwsLog::CVwsLog() : iType(EFile),iLevel(ELoud)
+	{
+	}
+
+CVwsLog::~CVwsLog()
+	{
+	iLogFile.Close();
+	iFs.Close();
+	}
+
+void CVwsLog::ConstructL()
+	{
+	TUint att;
+	
+	RBuf dataLogs;
+	RBuf viewLog;
+	RBuf viewLogOne;
+	RBuf viewLogTwo;
+	
+	TChar sysDrive = RFs::GetSystemDriveChar();
+	_LIT(KDataLogs,":\\Data\\logs");
+	_LIT(KlogView,":\\Data\\logs\\viewsrv.txt");
+	_LIT(KLogViewOne,":\\Data\\logs\\viewsrv1.txt");
+	_LIT(KLogViewTwo,":\\Data\\logs\\viewsrv2.txt");
+	TInt maxSizeofFileName = KDataLogs().Length() + 1;
+	dataLogs.CreateL(maxSizeofFileName);
+	dataLogs.CleanupClosePushL();
+	dataLogs.Append(sysDrive);
+	dataLogs.Append(KDataLogs());
+	
+	maxSizeofFileName = KlogView().Length() + 1;
+	viewLog.CreateL(maxSizeofFileName);
+	viewLog.CleanupClosePushL();
+	viewLog.Append(sysDrive);
+	viewLog.Append(KlogView());
+	
+	maxSizeofFileName = KLogViewOne().Length() + 1;
+	viewLogOne.CreateL(maxSizeofFileName);
+	viewLogOne.CleanupClosePushL();
+	viewLogOne.Append(sysDrive);
+	viewLogOne.Append(KLogViewOne());
+	
+	maxSizeofFileName = KLogViewTwo().Length() + 1;
+	viewLogTwo.CreateL(maxSizeofFileName);
+	viewLogTwo.CleanupClosePushL();
+	viewLogTwo.Append(sysDrive);
+	viewLogTwo.Append(KLogViewTwo());
+
+	// If the log file can be opened,logging is active
+	if (iFs.Connect() == KErrNone && iFs.Att(dataLogs,att) == KErrNone)
+		{
+		// Make a copy of previous log file
+		iFs.Delete(viewLogTwo);
+		iFs.Rename(viewLogOne,viewLogTwo);
+		iFs.Rename(viewLog,viewLogOne);
+
+		if (iLogFile.Replace(iFs, viewLog, EFileShareAny | EFileWrite | EFileStreamText) == KErrNone)
+			{
+			iActive = ETrue;
+			}
+
+		TUint16 feffInt=0xFEFF;
+		User::LeaveIfError(iLogFile.Write(TPtrC8((TUint8 *)&feffInt,2)));
+		iEol16=TPtrC16((TUint16 *)_S("\r\n"));
+		iEol.Set((TUint8 *)iEol16.Ptr(),iEol16.Size());
+		}
+
+	CleanupStack::PopAndDestroy(&viewLogTwo);
+	CleanupStack::PopAndDestroy(&viewLogOne);
+	CleanupStack::PopAndDestroy(&viewLog);
+	CleanupStack::PopAndDestroy(&dataLogs);
+	}
+
+void CVwsLog::SetLevel(TLevel aLogLevel)
+	{
+	iLevel=aLogLevel;
+	}
+
+void CVwsLog::SetType(TLogType aType)
+	{
+	iType=aType;
+	}
+
+void CVwsLog::Log(TLevel aLogLevel,TRefByValue<const TDesC> aFmt,...)
+	{
+	CVwsLog* self=STATIC_CAST(CVwsLog*,Dll::Tls());
+	ASSERT(self);
+	VA_LIST list;
+	VA_START(list,aFmt);
+	TBuf<KMaxTraceLength> buf;
+	buf.FormatList(aFmt,list);
+	self->DoLog(aLogLevel,buf);
+	}
+
+void CVwsLog::DoLog(TLevel aLogLevel,const TDesC& aOutput)
+	{
+	if (aLogLevel>iLevel)
+		{
+		return;
+		}
+
+	switch (iType)
+		{
+		case EFile:
+			LogToFile(aLogLevel,aOutput);
+			break;
+		case ERDebug:
+			LogToRDebug(aOutput);
+			break;
+		case EBoth:
+			LogToFile(aLogLevel,aOutput);
+			LogToRDebug(aOutput);
+			break;
+		case ENeither:
+			break;
+		}
+	}
+
+void CVwsLog::LogToFile(TLevel aLogLevel,const TDesC& aOutput)
+	{
+	if (iActive)
+		{
+		for (TInt ii=0;ii<aLogLevel;ii++)
+			{
+			TUint16 tab=0x0009;
+			iLogFile.Write(TPtrC8((TUint8*)&tab,2));
+			}
+		iLogFile.Write(TPtrC8((TUint8 *)aOutput.Ptr(),aOutput.Size()));
+		iLogFile.Write(iEol);
+		iLogFile.Flush();
+		}
+	}
+
+void CVwsLog::LogToRDebug(const TDesC& aOutput)
+	{
+	TBuf<KMaxTraceLength> buf;
+	buf.Insert(0,_L("VIEWSRV: "));
+	buf.Append(aOutput);
+	ShowTrace(buf);
+	}
+
+#endif