// WEBLOG.H
//
// Copyright (c) 1997-1999 Symbian Ltd.  All rights reserved.
//

#if !defined(__WEBLOG_H__)
#define __WEBLOG_H__

#if !defined(__F32FILE_H__)
#include <f32file.h>
#endif
#if !defined(__WEBDEF_H__)
#include "webdef.h"
#endif


// ----------------------------------------------------------
#if defined(_UNICODE)

class TDes16WebLogOverflow: public TDes16Overflow
	{
public:
	void Overflow(TDes16& /*aDes*/) {};
	};

#else

class TDes8WebLogOverflow: public TDes8Overflow
	{
public:
	void Overflow(TDes8& /*aDes*/) {};
	};

#endif
// ----------------------------------------------------------



class CWebLogger: public CBase
	// A logger on to a text file that logs single line text entries. Logs entries at different levels. 
	// The level is set on creation by trying to create files in different directories in a predefined order.
	{
public:
	
	enum TWebLogLevel
	{
	ELogNone = 0,
	ELogAll = 30,
	ELogLight = 20,
	ELogProfile = 10,
	ELogTrace =40
	};

	static CWebLogger* NewL(const TDesC& aFileName);
	~CWebLogger();
	IMPORT_C void WriteLogEnterEntry(const TDesC& aLogEntry);
	IMPORT_C void WriteLogReturnEntry();
	IMPORT_C void SetLevel(TWebLogLevel aLogLevel);
	IMPORT_C TWebLogLevel Level();
	IMPORT_C void WriteLogEntry(TWebLogLevel aLogLevel, TRefByValue<const TDesC> aFmt,...);
private:
	void LogInfo(TWebLogLevel aLogLevel);
	TBool DoLog(TWebLogLevel aLogLevel);
	void CreateLogFileOnDrive(const TDesC& aFileName, const TDesC& aDriveLetter);
	TInt CreateLogFile(const TDesC& aPath, const TDesC& aFileName, const TDesC& aDriveLetter);
	CWebLogger();
	void ConstructL(const TDesC& aFileName);	
	void Write(const TDesC& aLogEntry);
private:
	RFile iLogFile;
	RFs iFileSession;
	TBool iLogFileExists;
	TWebLogLevel iLogLevel;
	TInt iIndent;

#if defined(_UNICODE)
	TDes16WebLogOverflow iLogOverflow;
#else
	TDes8WebLogOverflow iLogOverflow;
#endif
	};


#endif
