loggingservices/eventlogger/LogServ/src/LogServPanic.cpp
changeset 0 08ec8eefde2f
child 55 44f437012c90
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/loggingservices/eventlogger/LogServ/src/LogServPanic.cpp	Fri Jan 22 11:06:30 2010 +0200
@@ -0,0 +1,158 @@
+// Copyright (c) 2002-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 "logservpanic.h"
+#include "LogServSqlStrings.h"
+
+//
+// RMessage::Panic() also completes the message. This is:
+// (a) important for efficient cleanup within the kernel
+// (b) a problem if the message is completed a second time
+//
+void PanicClientL(const RMessage2& aMessage, TLogServPanic aPanic)
+	{
+	aMessage.Panic(KLogServ, aPanic);
+	User::Leave(KLogPanicLeave);
+	}
+
+void PanicClient(const RMessage2& aMessage, TLogServPanic aPanic)
+	{
+	aMessage.Panic(KLogServ, aPanic);
+	}
+
+#pragma BullseyeCoverage off
+
+void Panic(TLogServPanic aPanic)
+	{
+	User::Panic(KLogServ, aPanic);
+	}
+
+#pragma BullseyeCoverage on
+
+#ifdef LOGGING_ENABLED
+
+const TInt KLogEngLogBufferSize = 256;
+
+void Log::New()
+	{
+	_LIT(KNewLogText, "===== NEW LOG =====");
+	//
+	RFileLogger logger;
+	TInt ret=logger.Connect();
+	if	(ret==KErrNone)
+		{
+		logger.CreateLog(KLogFolder, KLogFileName, EFileLoggingModeOverwrite);
+		logger.Write(KNewLogText);
+		}
+	logger.Close();
+	}
+
+void Log::Write(const TDesC& aText)
+	{
+	PruneLogFile();
+
+	RFileLogger logger;
+	TInt ret=logger.Connect();
+	if (ret==KErrNone)
+		{
+		logger.SetDateAndTime(EFalse,EFalse);
+		logger.CreateLog(KLogFolder, KLogFileName,EFileLoggingModeAppend);
+		TBuf<KLogEngLogBufferSize> buf;
+		
+		// The debug log uses hometime rather than UTC for its timestamps. This is
+		// purely a debugging aid.
+		TTime now;
+		now.HomeTime();
+		TDateTime dateTime;
+		dateTime = now.DateTime();
+		buf.Format(KTimeFormat,dateTime.Hour(),dateTime.Minute(),dateTime.Second(),dateTime.MicroSecond());
+		buf.AppendFormat(KTextFormat,&aText);
+
+		logger.Write(buf);
+		}
+
+	logger.Close();
+	}
+
+void Log::WriteFormat(TRefByValue<const TDesC> aFmt,...)
+	{
+    VA_LIST list;
+    VA_START(list,aFmt);
+
+	PruneLogFile();
+
+	TBuf<2*KLogEngLogBufferSize> buf;
+	buf.SetMax();
+	buf.FillZ();
+	
+	// The debug log uses hometime rather than UTC for its timestamps. This is
+	// purely a debugging aid.
+	TTime now;
+	now.HomeTime();
+	TDateTime dateTime;
+	dateTime = now.DateTime();
+	buf.Format(KTimeFormat,dateTime.Hour(),dateTime.Minute(),dateTime.Second(),dateTime.MicroSecond());
+	buf.AppendFormatList(aFmt, list );
+
+	RFileLogger logger;
+	TInt ret=logger.Connect();
+	if (ret==KErrNone)
+		{
+		logger.SetDateAndTime(EFalse,EFalse);
+		logger.CreateLog(KLogFolder, KLogFileName,EFileLoggingModeAppend);
+		logger.Write(buf);
+		}
+
+	logger.Close();
+
+	}
+
+void Log::PruneLogFile()
+	{
+	const TInt KMaxLogSize = 1024 * 500;
+	//
+	_LIT(KBaseFolder, "_:\\Logs\\");
+	TFileName fileName(KBaseFolder);
+	fileName[0] = 'A' + static_cast<TInt>(RFs::GetSystemDrive());
+	fileName.Append(KLogFolder);
+	fileName.Append(KPathDelimiter);
+	fileName.Append(KLogFileName);
+	//
+	RFs fsSession;
+	if	(fsSession.Connect() == KErrNone)
+		{
+		TEntry entry;
+		if	(fsSession.Entry(fileName, entry) == KErrNone)
+			{
+			// Check size and delete if its too big
+			if	(entry.iSize >= KMaxLogSize)
+				{
+				TInt fileDeleteErr=fsSession.Delete(fileName);
+				// If a debug build - record error
+				#ifdef _DEBUG
+				if (fileDeleteErr != KErrNone)
+					{
+					RDebug::Print(_L("Log::PruneLogFile - Failed to delete file. Error = %d"), fileDeleteErr);
+					}
+				#else
+					(void)fileDeleteErr;
+				#endif
+				}
+			}
+		}
+	fsSession.Close();
+	}
+
+#endif