Creating log files
11 juill. 2003 - 15:03

Need to debug some code on a mobile or track the execution flow ? The RFileLogger may help you. As a matter of fact this class is really powerful and easy to use.

The first step is to declare a connection to the file logger server and create the log file:

// Open a connection to the File logger server
RFileLogger iLog;
iLog.Connect();
iLog.CreateLog(_L("MyLoggingDirectory"),_L("MyLogFile"),EFileLoggingModeOverwrite);

...

// Close the log file and the connection to the server.
iLog.CloseLog();
iLog.Close();

The CreateLog function takes three parameter:
-  the base name of the log directory (relative to C:\Logs and without trailing '/')
-  the name of the log file
-  the logging mode (EFileLoggingModeOverwrite or EFileLoggingModeAppend)

In the exemple code above, the full path to my log file (on the phone file system) would be C:/Logs/MyLoggingDirectory/MyLogFile.

As far as I am concerned, I like to put the opening code in the ConstructL() method of the class I want to trace, and the closing code in the destructor. Also note that in real production code, you would better check that Connect() and CreateLog() does return KErrNone.

Once you have done this, you can output text and data to the log file. The basic primitives are:

PrimitiveOutput in the log file
iLog.Write(_L("Hello World"))11/07/2003 4:00:13 Hello World
iLog.WriteFormat(_L("Result=%d"),err)11/07/2003 4:00:13 Result=0
iLog.HexDump(aHeader,aHeader,myPtr,4)11/07/2003 4:00:13 myBuf:0000: 41 42 00 44 AB.D

If you don't want to have date or time logged, you can turn it off by using:

iLog.SetDateAndTime(TBool aUseDate, TBool aUseTime).

Don't forget to add the flogger.lib in your MMP file and to include the flogger.h file, and that's it. You can compile, execute and get your log file.

No ? The log file was not created! You're right. This is not (yet) an issue with your code. But another specificity of how Symbian handles log file: nothing will be logged unless you manually create the C:/Logs/MyLoggingDirectory by yourself. No need to recompile anything to enable/disable the log feature. Just create or not logging directory [1]. I like this (but it has a cost in term of code size).

[1] If you don'y know how to do this, just check any file explorer application like FExplorer. You will need this kind of app to read or send the log file back to your PC

Tutorial posted juillet 11th, 2003 by eric

Soumis par Raj (non vérifié) le mar, 2004-02-17 07:24.

Hi, I tried to generate log file in the following folder c:\\System\\Apps on the board. But this is not happening.

This the code,

TInt treturn; RFileLogger iLog; treturn = iLog.Connect(); if(treturn != KErrNone) return;

iLog.CreateLog(_L("c:\\System\\Apps\\CASINO"),_L("FirstLog"),EFileLoggingModeAppend);

iLog.Write(_L("My log is")); iLog.CloseLog();

iLog.Close();

Do I need to create a separate folder for logging or can I use the folders which are already available on the board.

I am confused.

Regards Raj


Soumis par Anonymous le mar, 2004-02-17 21:47.

Logs file are always created in C:\Logs. The first argument to CreateLog() is a directory name relative to this C:\Logs directory.

The tutorial has been updated to state this more clearly.


Soumis par Fardin (non vérifié) le jeu, 2004-12-02 10:16.

What about creating a log file on the MMC of the device ? Is that possible ?

Soumis par Anonymous le mer, 2005-06-01 15:14.

Hi.

I tryed to use RFileLogger.

The application compile well for WINS, but when I try to compile for thum I got the following error:

-f "\Symbian\8.0a\S60_2nd_FP2\EPOC32\BUILD\MISDOCUMENTOS\DESARROLLOS\SYMBIAN\AUDIODAEMON\GROUP\THUMB.make" TARGET CFG=UREL VERBOSE=-s make[1]: *** No rule to make target `\SYMBIAN\8.0A\S60_2ND_FP2\EPOC32\INCLUDE\FLOGGER.H \SYMBIAN\8.0A\S60_2ND_FP2\EPOC32\INCLUDE\FLOGGER.INL', needed by `..\..\..\..\..\SYMBIAN\8.0A\S60_2ND_FP2\EPOC32\BUILD\MISDOCUMENTOS\DESARROLLOS\SYMBIAN\AUDIODAEMON\GROUP\AUDIODAEMON\THUMB\UREL\AUDIODAEMON.o'. Stop. make: *** [TARGETAUDIODAEMON] Error 2

Some body know what's happening?. RFileLogger must be used only in wins.

Thanks.

Diego (dacosta51@yahoo.com)


Soumis par master2003 (non vérifié) le mar, 2004-03-30 10:05.

can i use this class (resp. flogger library) also in release mode or is this only in debug mode enabled?

thx,

master2003


Soumis par eric (non vérifié) le mar, 2004-03-30 16:22.

You can use in both.

It is the presence of your log directory in C:\Logs that will enable/disable logging


Soumis par ROBBIN (non vérifié) le mar, 2006-06-13 23:18.

what is the folder to create the \Logs\MyLogDirectory\ folder on the phone HW?

THANKS@!


Soumis par Anonymous le sam, 2004-04-03 10:30.

Hello, i tried to use this logger stuff exactly as you have described it above. unfortunately i get an linker error which says something like "unresolved external symbol". I have not forgotten to add the line "LIBRARY Flogger.lib" to the *.mmp file of my project. Any ideas?

tom


Soumis par Anonymous le jeu, 2004-09-02 18:08.

Have you rebuilt the project?

Soumis par Anonymous le jeu, 2004-09-02 17:24.

Hello, I followed every step in this guide, still no luck.

I have manually created

Logs

and my own directory

Mobeel

My Code iLog.Connect(); iLog.CreateLog(_L("Mobeel"),_L("GPRS.txt"),EFileLoggingModeOverwrite); iLog.Write(_L("1111111111111111111111111111111111111111")); iLog.CloseLog(); iLog.Close();

And when I check the directory c:/Logs/Mobeel/ there are no files there..

And ofcourse I have compiled and run the app including the flogger.lib and .h file..

And I have checked that the Connect() and CreateLog does return KErrNone


Soumis par Anonymous le ven, 2004-09-03 10:31.

I tried out your code and it works. The code I compiled was:

#include <flogger.h>

_LIT(KTag1,"Mobeel");
_LIT(KTag2,"GPRS.txt");
_LIT(KTestString,"1111111111111111111111111111111111111111");


GLDEF_C TInt E32Main()
        {

        __UHEAP_MARK;
       
        RFileLogger iLog;        //TODO: include all these in macros, and check return codes

        iLog.Connect();
        iLog.CreateLog(KTag1,KTag2,EFileLoggingModeOverwrite);
        iLog.Write(KTestString);
        iLog.CloseLog();
        iLog.Close();


        __UHEAP_MARKEND;

        return KErrNone;
        }

and I created this directory:
S:\epoc32\wins\c\logs\Mobeel
to see the GPRS.txt file

Steve


Soumis par suni.saski le jeu, 2009-09-03 14:09.

Hi,

My application involved multiple views, so I have to run the application using
return EikStart::RunApplication( NewApplication );

If I use iLog as below, I can only get the log file for Write functionality only.

GLDEF_C TInt E32Main()
{
__UHEAP_MARK;

RFileLogger iLog; //TODO: include all these in macros, and check return codes

iLog.Connect();
iLog.CreateLog(KTag1,KTag2,EFileLoggingModeOverwrite);
iLog.Write(KTestString);
iLog.CloseLog();
iLog.Close();

__UHEAP_MARKEND;

return EikStart::RunApplication( NewApplication );
}

How can I take the log file for an entire application.

Do I need to write those 5 lines in every function?
It will be complex...right ?
Whats the correct procedure ?
Can anybody help me out....


Soumis par Anonymous le jeu, 2004-09-02 18:25.

"Also note that in real production code, you would better check that Connect() and CreateLog() does return KErrNone."

I would hope in production code you would not log at all! Consider using macros for each call to RFileLogger so that it is not used in urel builds that are distributed, which also means there is no ROM trade-off in the final build. Also, it is debatable whether to check for KErrNone - what action will you take if it fails? Logging is only a best-effort process.


Soumis par Anonymous le ven, 2004-09-03 10:34.

The error code needs to be checked for the Connect and CreateLog since CloseLog will panic if the connection does not exist. But, the general log functions will silently fail if the connection failed so these do not need “if” statements before them.

Soumis par Anonymous le jeu, 2004-09-02 18:30.

logging only helps if you have a panic that happens on device and you don't know why. In a small app you shouldnt need to lgo at all. and remember not to leave logging in production code. if it runs then they users memory will get chewed up and they wont know why. they will take your phone back and itll all be because of your silly little app and the fact you cant code to save your life.

Kent E.



copyright 2003-2009 NewLC SARL