diff -r bbd31066657e -r 8bb370ba6d1d testexecfw/stf/stffw/logger/STFLogger/src/StifLogger.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/testexecfw/stf/stffw/logger/STFLogger/src/StifLogger.cpp Fri Apr 09 10:46:28 2010 +0800 @@ -0,0 +1,600 @@ +/* + * Copyright (c) 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: This module contains implementation of CStifLogger + * class member functions. + * + */ + +// INCLUDE FILES +#include +#include "StifLogger.h" +#include "STFLogger.h" +#include "STFLoggerOverFlow.h" +#include "SettingServerClient.h" + +CStifLogger::CStifLogger() : + iLogger(NULL) + { + } + +void CStifLogger::ConstructL(const TDesC& aTestPath, const TDesC& aTestFile, + TLoggerType aLoggerType, TOutput aOutput, TBool aOverWrite, + TBool aWithTimeStamp, TBool aWithLineBreak, TBool aWithEventRanking, + TBool aThreadIdToLogFile, TBool aCreateLogDir, + TInt aStaticBufferSize, TBool aUnicode) + { + TInt ret; + if(!iLogger) + { + iLogger = new (ELeave) RSTFLogger(); + ret = iLogger->Connect(); + if (ret) + { + User::Leave(ret); + } + } + ret = iLogger->CreateL(aTestPath, aTestFile, aLoggerType, aOutput, + aOverWrite, aWithTimeStamp, aWithLineBreak, aWithEventRanking, + aThreadIdToLogFile, aCreateLogDir, aStaticBufferSize, aUnicode); + if (ret) + { + User::Leave(ret); + } + } + +void CStifLogger::ConstructL(const TDesC& aTestPath, const TDesC& aTestFile, + TLoggerSettings& aLoggerSettings) + { + + TInt ret; + if(!iLogger) + { + iLogger = new (ELeave) RSTFLogger(); + ret = iLogger->Connect(); + if (ret) + { + User::Leave(ret); + } + } + ret = iLogger->CreateL(aTestPath, aTestFile, aLoggerSettings); + if (ret) + { + User::Leave(ret); + } + } + +/* + ------------------------------------------------------------------------------- + + Class: CStifLogger + + Method: NewL + + Description: Two-phased constructor. + + Parameters: const TDesC& aTestPath: in: Path to logged information + const TDesC& aTestFile: in: Log name for information + TLoggerType aLoggerType: in: Log file type(txt, html, + data) + TOutput aOutput: in: Output source(File) + TBool aOverWrite: in: Indicator to file overwrite + TBool aWithTimeStamp: in: Indicator to time stamp + TBool aWithLineBreak: in: Indicator to line break + TBool aWithEventRanking: in: Indicator to event ranking + TBool aThreadIdToLogFile: in: Indicator to thread id adding to + end of the log file + TBool aCreateLogDir: in: Indicator to directory creation + TInt aStaticBufferSize + TBool aUnicode: in: Indicator if file has to be in unicode format + + Return Values: CStifLogger* logger: pointer to CStifLogger object + + Errors/Exceptions: Leaves if aTestPath or aTestFile length is over KMaxName + Leaves if called serv.Connect() method fails + Leaves if called CHtmlLogger::NewL method fails + Leaves if called CDataLogger::NewL method fails + Leaves if called CTxtLogger::NewL method fails + + Status: Proposal + + ------------------------------------------------------------------------------- + */ +EXPORT_C CStifLogger* CStifLogger::NewL(const TDesC& aTestPath, + const TDesC& aTestFile, TLoggerType aLoggerType, TOutput aOutput, + TBool aOverWrite, TBool aWithTimeStamp, TBool aWithLineBreak, + TBool aWithEventRanking, TBool aThreadIdToLogFile, + TBool aCreateLogDir, TInt aStaticBufferSize, TBool aUnicode) + { + if( KMaxName < aTestPath.Length() || KMaxName < aTestFile.Length() ) + { + User::Leave( KErrArgument ); + } + + CStifLogger* self = new (ELeave) CStifLogger(); + CleanupStack::PushL(self); + + self->ConstructL(aTestPath, aTestFile, aLoggerType, aOutput, aOverWrite, + aWithTimeStamp, aWithLineBreak, aWithEventRanking, + aThreadIdToLogFile, aCreateLogDir, aStaticBufferSize, aUnicode); + CleanupStack::Pop(self); + return self; + } + +/* + ------------------------------------------------------------------------------- + + Class: CStifLogger + + Method: NewL + + Description: Two-phased constructor. + + TestEngine's and TestServer's are friend. For TestEngine's and + TestServer's StifLogger creation. + + Parameters: const TDesC& aTestPath: in: Path to logged information + const TDesC& aTestFile: in: Log name for information + TLoggerSettings& aLoggerSettings: in: Struct for StifLogger + settigs + + Return Values: CStifLogger* logger: pointer to CStifLogger object + + Errors/Exceptions: Leaves if called CHtmlLogger::NewL method fails + Leaves if called CDataLogger::NewL method fails + Leaves if called CTxtLogger::NewL method fails + + Status: Proposal + + ------------------------------------------------------------------------------- + */ +EXPORT_C CStifLogger* CStifLogger::NewL(const TDesC& aTestPath, + const TDesC& aTestFile, TLoggerSettings& aLoggerSettings) + { + CStifLogger* self = new (ELeave) CStifLogger(); + CleanupStack::PushL(self); + self->ConstructL(aTestPath, aTestFile, aLoggerSettings); + CleanupStack::Pop(self); + return self; + + } + +CStifLogger::~CStifLogger() + { + if (iLogger) + { + iLogger->Close(); + delete iLogger; + } + } + +void CStifLogger::OverwriteLoggerSettings( + TLoggerSettings& /*aLoggerSettings*/, TName& /*aTestPath*/, + TName& /*aTestFile*/, TLoggerType& /*aLoggerType*/, + TOutput& /*aOutput*/, TBool& /*aOverWrite*/, + TBool& /*aWithTimeStamp*/, TBool& /*aWithLineBreak*/, + TBool& /*aWithEventRanking*/, TBool& /*aThreadIdToLogFile*/, + TBool& /*aCreateLogDir*/, TBool& /*aUnicode*/) + { + //Keep nothing to do. + } + +EXPORT_C TInt CStifLogger::Log(const TDesC& aLogInfo) + { + // No text style info + return iLogger->Log(ENoStyle, aLogInfo); + + } + +EXPORT_C TInt CStifLogger::Log(const TDesC8& aLogInfo) + { + // No text style info + return iLogger->Log(ENoStyle, aLogInfo); + + } + +EXPORT_C TInt CStifLogger::Log(TInt aStyle, const TDesC& aLogInfo) + { + return iLogger->Log(aStyle, aLogInfo); + + } + +EXPORT_C TInt CStifLogger::Log(TInt aStyle, const TDesC8& aLogInfo) + { + return iLogger->Log(aStyle, aLogInfo); + + } + +EXPORT_C TInt CStifLogger::Log(TRefByValue aLogInfo, ...) + { + VA_LIST list; + VA_START( list, aLogInfo ); + TLogInfo logInfo; + + TDesSTFLoggerOverflowHandler overFlowHandler(iLogger, 1); + + // Parse parameters + logInfo.AppendFormatList(aLogInfo, list, &overFlowHandler); + + // No text style info + return iLogger->Log(ENoStyle, logInfo); + + } + +/* + ------------------------------------------------------------------------------- + + Class: CStifLogger + + Method: Log + + Description: Log a 8 bit information. + + This log method accepts several parameters. + + Parameters: TRefByValue aLogInfo: in: A templated class which + encapsulates a reference to an object within a wrapper + + Return Values: TInt: Symbian error code. + + Errors/Exceptions: TDes8LoggerOverflowHandler called if logged information is + over KMaxLogData + + Status: Approved + + ------------------------------------------------------------------------------- + */ +EXPORT_C TInt CStifLogger::Log(TRefByValue aLogInfo, ...) + { + VA_LIST list; + VA_START( list, aLogInfo ); + TLogInfo8 logInfo; + // Create overflow handler. If the log information size is over the + // KMaxLogData rest of the information will cut. + TDes8STFLoggerOverflowHandler overFlowHandler(iLogger, 1); + // Parse parameters + logInfo.AppendFormatList(aLogInfo, list, &overFlowHandler); + // No text style info + return iLogger->Log(ENoStyle, logInfo); + } + +/* + ------------------------------------------------------------------------------- + + Class: CStifLogger + + Method: Log + + Description: Log a 16 bit information. + + This log method accepts several parameters. There is also parameter to + styling text information e.g. text color. + + Parameters: TInt aStyle: in: Logged text forming parameter + TRefByValue aLogInfo: in: A templated class + which encapsulates a reference to an object + within a wrapper + + Return Values: TInt: Symbian error code. + + Errors/Exceptions: TDesOverflowHandler called if logged information is + over KMaxLogData + + Status: Approved + + ------------------------------------------------------------------------------- + */ +EXPORT_C TInt CStifLogger::Log(TInt aStyle, + TRefByValue aLogInfo, ...) + { + VA_LIST list; + VA_START( list, aLogInfo ); + TLogInfo logInfo; + + // Create overflow handler. If the log information size is over the + // KMaxLogData rest of the information will cut. + TDesSTFLoggerOverflowHandler overFlowHandler(iLogger, 2); + + // Parse parameters + logInfo.AppendFormatList(aLogInfo, list, &overFlowHandler); + + return iLogger->Log(aStyle, logInfo); + + } + +/* + ------------------------------------------------------------------------------- + + Class: CStifLogger + + Method: Log + + Description: Log a 8 bit information. + + This log method accepts several parameters. There is also parameter to + styling text information e.g. text color. + + Parameters: TInt aStyle: in: Logged text forming parameter + TRefByValue aLogInfo: in: A templated class + which encapsulates a reference to an object + within a wrapper + + Return Values: TInt: Symbian error code. + + Errors/Exceptions: TDes8LoggerOverflowHandler called if logged information is + over KMaxLogData + + Status: Approved + + ------------------------------------------------------------------------------- + */ +EXPORT_C TInt CStifLogger::Log(TInt aStyle, + TRefByValue aLogInfo, ...) + { + VA_LIST list; + VA_START( list, aLogInfo ); + TLogInfo8 logInfo; + + // Create overflow handler. If the log information size is over the + // KMaxLogData rest of the information will cut. + TDes8STFLoggerOverflowHandler overFlowHandler(iLogger, 2); + + // Parse parameters + logInfo.AppendFormatList(aLogInfo, list, &overFlowHandler); + + return iLogger->Log(aStyle, logInfo); + + } + +/* + ------------------------------------------------------------------------------- + + Class: CStifLogger + + Method: WriteDelimiter + + Description: Log a 16 bit delimiter. + + Log a delimiters required locations to the log information. + This will be used if parameters are not given when calling this method. + + Parameters: const TDesC& aDelimiter: in: Logged delimiter(e.g. '#' or 'XO') + TInt aCount: in: Repeated count for delimiter + + Return Values: TInt: Symbian error code. + + Errors/Exceptions: TDesLoggerOverflowHandler called if logged information + is over KMaxLogData. + + Status: Approved + + ------------------------------------------------------------------------------- + */ +EXPORT_C TInt CStifLogger::WriteDelimiter(const TDesC& aDelimiter, + TInt aCount) + { + TLogInfo delimiter; + + // Create overflow handler. If the delimiter size expands over the + // KMaxLogData the TDesLoggerOverflowHandler will call. + TDesSTFLoggerOverflowHandler overFlowHandler(iLogger, 3); + + // Create a delimiter + for (TInt a = 0; a < aCount; a++) + { + // If delimiter creation keeps under the KMaxLogData. + // If not we use TDesLoggerOverflowHandler. + if ((a * aDelimiter.Length()) < KMaxLogData) + { + delimiter.Append(aDelimiter); + } + // KMaxLogData is exceeded + else + { + // If the title size is over the KMaxLogData default delimiter will + // use. Use normal overflowhandler to print overflow information. + TBuf<4> empty; // Not really used. + overFlowHandler.Overflow(empty); + delimiter.Copy( + _L( "##################################################" )); + break; + } + } + + // No text style info + return iLogger->Log(ENoStyle, delimiter); + + } + +/* + ------------------------------------------------------------------------------- + + Class: CStifLogger + + Method: WriteDelimiter + + Description: Log a 8 bit delimiter. + + Log a delimiters required locations to the log information. + + Parameters: const TDesC8& aDelimiter: in: Logged delimiter + (e.g. '#' or 'XO') + TInt aCount: in: Repeated count for delimiter + + Return Values: TInt: Symbian error code. + + Errors/Exceptions: TDes8LoggerOverflowHandler called if logged information is + over KMaxLogData. + + Status: Approved + + ------------------------------------------------------------------------------- + */ +EXPORT_C TInt CStifLogger::WriteDelimiter(const TDesC8& aDelimiter, + TInt aCount) + { + TLogInfo8 delimiter; + + // Create overflow handler. If the delimiter size expands over the + // KMaxLogData the TDesLoggerOverflowHandler will call. + TDes8STFLoggerOverflowHandler overFlowHandler(iLogger, 3); + + // Create a delimiter + for (TInt a = 0; a < aCount; a++) + { + // If delimiter creation keeps under the KMaxLogData. + // If not we use TDesLoggerOverflowHandler. + if ((a * aDelimiter.Length()) < KMaxLogData) + { + delimiter.Append(aDelimiter); + } + // KMaxLogData is exceeded + else + { + // If the title size is over the KMaxLogData default delimiter will + // use. Use normal overflowhandler to print overflow information. + TBuf8<4> empty; // Not really used. + overFlowHandler.Overflow(empty); + delimiter.Copy( + _L8( "##################################################" )); + break; + } + } + + // No text style info + return iLogger->Log(ENoStyle, delimiter); + + } + +/* + ------------------------------------------------------------------------------- + + Class: CStifLogger + + Method: SaveData + + Description: Save file or data( 16 bit ). + + Used when is need to save file or data to storage e.g. web page. + + Parameters: TDesC& aData: in: Data to be saved + + Return Values: TInt: Symbian error code. + + Errors/Exceptions: None + + Status: Approved + + ------------------------------------------------------------------------------- + */ +EXPORT_C TInt CStifLogger::SaveData(TDesC& aData) + { + // No text style info + return iLogger->Log(ENoStyle, aData); + + } + +/* + ------------------------------------------------------------------------------- + + Class: CStifLogger + + Method: SaveData + + Description: Save file or data( 8 bit ). + + Used when is need to save file or data to storage e.g. web page. + + Parameters: TDesC8& aData: in: Data to be saved + + Return Values: TInt: Symbian error code. + + Errors/Exceptions: None + + Status: Approved + + ------------------------------------------------------------------------------- + */ +EXPORT_C TInt CStifLogger::SaveData(TDesC8& aData) + { + // No text style info + return iLogger->Log(ENoStyle, aData); + + } + +/* + ------------------------------------------------------------------------------- + + Class: CStifLogger + + Method: CreationResult + + Description: Return StifLogger creation result. + + Parameters: None + + Return Values: StifLogger creation result + + Errors/Exceptions: None + + Status: Approved + + ------------------------------------------------------------------------------- + */ +EXPORT_C TInt CStifLogger::CreationResult() + { + TInt outputType; + iLogger->CreationResult(outputType); + return outputType; + } + +/* + ------------------------------------------------------------------------------- + + Class: CStifLogger + + Method: OutputType + + Description: Get output type. Valid only if CreationResult returns KErrNone. + + Parameters: TOutput& aOutput + + Return Values: StifLogger creation result + + Errors/Exceptions: None + + Status: Approved + + ------------------------------------------------------------------------------- + */ +EXPORT_C CStifLogger::TOutput CStifLogger::OutputType() + { + + TOutput outputType; + iLogger->OutputType(outputType); + return outputType; + + } + +EXPORT_C TInt CStifLogger::Send(TInt aStyle, const TDesC& aData) + { + return iLogger->Log(aStyle, aData); + } + +EXPORT_C TInt CStifLogger::Send(TInt aStyle, const TDesC8& aData) + { + return iLogger->Log(aStyle, aData); + } + +// End of File +