--- /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