Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

RDK logger is linked to RDK-B modules to enable component wise logging. When the unit boots-up, each RDK-B component will be initialised which in turn will initialise logger and start logging into the corresponding log file depending on the log level set for the component.

Note: The RDK data model naming convention prefix was changed in March 2020 to “X_RDK_”. We request you use this new prefix going forward.

Architecture

draw.io Diagram
diagramNameRDK-B_Logger_Archi.drawio
size850
revision1
Image Removed

  1. All logs from modules (CcspTraceError, CcspTraceInfo, etc..) are routed to RDK logger library. RDK logger logs these into log files based on module wise LogLevels & LoggerEnable options.  RDK  logger uses log4c library internally to achieve the functionality.

  2. CCSPLogAgent:

...

  • LoggerEnable: This will help to enable/disable logs for particular component. If it is TRUE logs are enabled otherwise logs are disabled.

    Note: We can enable/disable logging for the all components based on “X_RDKCENTRAL-COM_LoggerEnable” parameter. It is by default set to “TRUE”.

  • LogLevels: We can set different log levels for each component. By default all modules log level is 4 (RDK_LOG_INFO).

    CcspLogAgent component provides the ability to change the log levels at run time for individual components and this component shall be made available to the community shortly.

          Below mentioned are the supported LogLevels:

Log Level Index

Log Level

0

RDK_LOG_FATAL

1

RDK_LOG_ERROR

2

RDK_LOG_WARN

3

RDK_LOG_NOTICE

4

RDK_LOG_INFO

5

RDK_LOG_DEBUG

6

RDK_LOG_TRACE1

7

RDK_LOG_TRACE2

8

RDK_LOG_TRACE3

9

RDK_LOG_TRACE4

10

RDK_LOG_TRACE5

11

RDK_LOG_TRACE6

12

RDK_LOG_TRACE7

13

RDK_LOG_TRACE8

14

RDK_LOG_TRACE9

If LogLevel is set to 3, all logs related to 0 to 3 levels are routed to logger which means RDK_LOG_FATAL, RDK_LOG_ERROR, RDK_LOG_WARN and RDK_LOG_NOTICE prints are routed to logger, other prints not routed to logger.

...

Panel

Below function is used for logging in RDKLogger,

RDK_LOG (rdk_LogLevel level, const char *module, const char *format,...)

"level" is log level of the log message (FATAL, ERROR etc}

"module" is Module to which this message belongs to (use module name  same as mentioned in debug.ini)

"format" is a printf style string containing the log message.

Log4c

  • Log4c is a open source library for flexible logging to files.
  • Log4c init “log4c_init()” happens during rdklogger init.
  • Log4c loads its configurations from rdkb_log4crc file. This contains the logger information (log directory path, size, file name, etc..).
  • LOG4C_RCPATH environment variable holds the path to the log4crc configuration file. So we have to configure this environment variable without fail.
  • Currently this is mentioned in  cosa_start.sh file (export LOG4C_RCPATH=/rdklogger).

Log4crc File syntax:

The log4crc configuration file uses an XML syntax.

The root element is <log4c> and it can be used to control the configuration file version interface with the attribute "version".

The following 4 elements are supported: <config>, <category>, <appender> and <layout>.

  • The <config> element controls the global log4c configuration. It has 3 sub elements. The <nocleanup> flag inhibits the log4c destructors routines. The <bufsize> element sets the buffer size used to format log4c_logging_event_t objects. If is set to 0, the allocation is dynamic (the <debug> element is currently unused).
  • The <category> element has 3 possible attributes: the category "name", the category "priority" and the category "appender". Future versions will handle multiple appenders per  category.
  • The <appender> element has 3 possible attributes: the appender "name", the appender "type", and the appender "layout".
  • The <layout> element has 2 possible attributes: the layout "name" and the layout "type".

...

Log file name will be of the  format : <modulename>log.txt.0<0,1>

Log file for a particular module can be easily identified from the name of the log file. Example: TR69log.txt.0

...

Steps to add rdklogger to a new component:

Step 1:

Need to add LoggerEnable and LogLevel parameters in “LogAgent.xml” file for new component.

Code Block
X_RDKCENTRAL-COM_New_LoggerEnable

...


X_RDKCENTRAL-COM_New_LogLevel


Step 2:

Need to add the new parameters in  “system_defaults_arm”  file for persistent storage.           

Code Block
$ X_RDKCENTRAL-COM_New_LogLevel=4

...


$ X_RDKCENTRAL-COM_New_LoggerEnable=1

Code functionality for Loglevel & LoggerEnable parameters set/get in “cosa_apis_logagentplugin.c” file

Initialise rdklogger by calling  rdk_logger_init (/fss/gw/lib/debug.ini)  in the new component


Step 3:

Add new component entry in “rdkb_debug.ini” file

Code Block
LOG.RDK.New = ALL FATAL ERROR WARNING NOTICE INFO DEBUG TRACE


Step 4:

Add the below configuration in “rdkb_log4src” file for new component

...

Panel

$ bitbake -c compile -f rdk-logger

$ bitbake rdk-logger

$ bitbake rdk-generic-broadband-image

API Specification

For Doxygen documentation on the RDK Logger please refer: Doxygen RDK Logger