diff -r 000000000000 -r e4d67989cc36 genericservices/taskscheduler/SCHSVR/SSCH_UTL.CPP --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/genericservices/taskscheduler/SCHSVR/SSCH_UTL.CPP Tue Feb 02 02:01:42 2010 +0200 @@ -0,0 +1,195 @@ +// Copyright (c) 2004-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: +// + +// User includes +#include "SchLogger.h" + +#ifdef __SCHLOGGING__ + + + + +// +// ------> CSheduleServerLog (source) +// + +CSheduleServerLog::CSheduleServerLog() + { + } + +CSheduleServerLog::~CSheduleServerLog() + { + iFile.Close(); + iFs.Close(); + } + +void CSheduleServerLog::ConstructL(const TDesC& aLogFileName) + { + // Literal constants + _LIT(KScheduleServerLoggingDirectoryE, "E:\\Logs\\SchSvr\\"); + _LIT(KScheduleServerLoggingDirectoryD, "D:\\Logs\\SchSvr\\"); + _LIT(KScheduleServerLoggingDirectory, "_:\\Logs\\SchSvr\\"); + + User::LeaveIfError(iFs.Connect()); + TFileName logFile; + + // Log to drive D if possible + TInt error = iFs.MkDirAll(KScheduleServerLoggingDirectoryE); + if (error == KErrAlreadyExists || error == KErrNone) + { + logFile.Append(KScheduleServerLoggingDirectoryE); + } + else + { + error = iFs.MkDirAll(KScheduleServerLoggingDirectoryD); + if (error == KErrAlreadyExists || error == KErrNone) + { + logFile.Append(KScheduleServerLoggingDirectoryD); + } + else + { + // system drive directory + TBuf<15> loggingDirOnSysDrive(KScheduleServerLoggingDirectory); + loggingDirOnSysDrive[0] = 'A' + static_cast(RFs::GetSystemDrive()); + + error = iFs.MkDirAll(loggingDirOnSysDrive); + if (error != KErrAlreadyExists && error < KErrNone) + User::Leave(error); + logFile.Append(loggingDirOnSysDrive); + } + } + + // Open log file + TParsePtrC parser(aLogFileName); + logFile.Append(parser.Name()); + +#ifdef __WINS__ + logFile.Append(_L(".WINS")); +#elif __MARM__ + logFile.Append(_L(".MARM")); +#endif +#ifdef _DEBUG + logFile.Append(_L(".UDEB")); +#else + logFile.Append(_L(".UREL")); +#endif + logFile.Append(parser.Ext()); + logFile.Append(_L(".TXT")); + + User::LeaveIfError(iFile.Replace(iFs, logFile, EFileStreamText | EFileShareAny)); + SeekEnd(); + + NewLine(); + NewLine(); + _LIT(KNewLogEntry, "=== NEW LOG ==="); + Write(KNewLogEntry); + NewLine(); + } + +CSheduleServerLog* CSheduleServerLog::NewL(const TDesC& aLogFileName) + { + CSheduleServerLog* self = new(ELeave) CSheduleServerLog(); + CleanupStack::PushL(self); + self->ConstructL(aLogFileName); + CleanupStack::Pop(); + return self; + } + +// +// +// + +void CSheduleServerLog::Log(TRefByValue aFmt,...) + { + VA_LIST list; + VA_START(list, aFmt); + + TBuf<1024> buf; + buf.AppendFormatList(aFmt, list); + WriteWithTimeStamp(buf); + NewLine(); + } + +void CSheduleServerLog::LogList(TRefByValue aFmt, VA_LIST aList) + { + TBuf<1024> buf; + buf.AppendFormatList(aFmt, aList); + WriteWithTimeStamp(buf); + NewLine(); + } + +void CSheduleServerLog::SeekEnd() + { + TInt pos; + iFile.Seek(ESeekEnd, pos); + } + +// +// +// + +void CSheduleServerLog::Write(const TDesC& aText) + { + HBufC8* buf = HBufC8::New(aText.Length()); + if (!buf) + return; + + TPtr8 pBuf(buf->Des()); + + const TInt KTextLength = aText.Length(); + for(TInt i=0; i; + if (!buf) + return; + buf->AppendFormatList(aFmt, aList); + Write(*buf); + delete buf; + } + +void CSheduleServerLog::WriteWithTimeStamp(const TDesC& aText) + { + TBuf<200> buf; + TTime now; + now.HomeTime(); + TDateTime dateTime; + dateTime = now.DateTime(); + buf.Format(_L("%02d.%02d:%02d:%06d "), dateTime.Hour(), dateTime.Minute(), dateTime.Second(), dateTime.MicroSecond()); + Write(buf); + Write(aText); + } + +void CSheduleServerLog::NewLine() + { + TBuf<2> buf; + buf.Append(0x0D); + buf.Append(0x0A); + Write(buf); + } + + +#endif