RDK Resources
[*RDK Preferred*]
Code Management Facility
RDK Forums
[RDK Conferences]
RDK Support
Archives
Papers & Presentations Archive
RDK loggers is a general purpose logging mechanism which is used for logging in RDK-B. Internally this uses log4c for formatting and support multiple log levels and modules. The log level for each component is read from configuration file debug.ini (rdkb_debug.ini) during component initialization. Logger is implemented as a shared library and components need to link this library in order to enable logging.
RDK logger is linked to RDKB modules to enable component wise logging. When the unit boots-up, each RDKB component will be initialized which in turn will initialize logger and start logging into the corresponding log file depending on the log level set for the component.
All components have the separate TR181 parameters to control the LogLevels and LoggerEnable options.
All component logger parameters exist in LogAgent.xml file which is handled by CcspLogAgent component. Those parameters are stored in syscfg.db file for persistent storage.
Note: We can enable/disable logging for the all components based on “X_RDKCENTRAL-COM_LoggerEnable” parameter. It is by default set as “TRUE”.
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.
Note: Log level for all components can be controlled using “X_RDKCENTRAL-COM_LogLevel” parameter. It is by default set to level 4 which is RDK_LOG_INFO.
Example:
TR069 parametes for RDK logger,
Device.LogAgent.X_RDKCENTRAL-COM_TR69_LoggerEnable
Device.LogAgent.X_RDKCENTRAL-COM_TR69_LogLevel
RDK logger is dependent on rdkb_debug.ini and rdkb_log4crc configuration files. rkdb_log4crc file is handled by log4c.
Example: LOG.RDK.<component name> = ALL, FATAL, ERROR WARNING, NOTICE, INFO, DEBUG
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.
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>.
Sample log4crc configuration file:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE log4c SYSTEM "">
<log4c>
<config>
<bufsize>0</bufsize>
<debug level="0"/>
<nocleanup>0</nocleanup>
</config>
<!-- root category ========================================= -->
<category name="root" priority="notice"/>
<!-- default appenders ===================================== -->
<appender name="stdout" type="stream" layout="basic"/>
<appender name="stderr" type="stream" layout="dated"/>
<appender name="syslog" type="syslog" layout="basic"/>
<!-- default layouts ======================================= --> <layout name="basic" type="basic"/>
<layout name="dated" type="dated"/>
</log4c>
Logs will be logged into directory /rdklogs/logs/ for each module by log4c. /rdklogs/logs/ will contain latest logs for each module.
Logs folder size will be periodically monitored (/rdklogs/logs folder) for upload.
Once the folder size (/rdklogs/logs/) reaches 1.5 MB, then these logs will be moved to /nvram/logbackup folder and uploaded to log server.
Logging from components based on other processor(ATOM):
Steps to add the rdklogger to new component:
$ X_RDKCENTRAL-COM_New_LogLevel=4
$ X_RDKCENTRAL-COM_New_LoggerEnable=1
LOG.RDK.New = ALL FATAL ERROR WARNING NOTICE INFO DEBUG TRACE
<rollingpolicy name="New_rollingpolicy" type="sizewin" maxsize="2097152" maxnum="2"/>
<appender name="RI_Newrollingfileappender" type="rollingfile" logdir="/rdklogs/logs/" prefix="Newlog.txt" layout="comcast_dated" rollingpolicy="New_rollingpolicy"/>
<category name="RI.Stack.New" priority="debug" appender= "RI_Newrollingfileappender"/>
<category name="RI.Stack.LOG.RDK.New" priority="debug" appender= "RI_Newrollingfileappender"/>
RDK Logger is available in the below path,
../source_code/components/generic/rdk_logger
Below bitbake commands are used for building rdk-logger,
$ bitbake -c compile -f rdk-logger
$ bitbake rdk-logger
$ bitbake rdk-generic-broadband-image