Generate logs for troubleshooting (C SDK)

Problem

You encounter problems sending data to New Relic with an application instrumented with the C SDK, but you are not sure what the cause is.

Solution

The New Relic C SDK and its daemon have their own logs:

  • C SDK logs: These logs are generated due to errors in how you've instrumented your code using the New Relic C SDK API calls.
  • Daemon logs: These are logs related to transmission of data to New Relic.

To help troubleshoot an issue, we recommend generating logs at their highest level:

  1. Set the C SDK log to verbose level and the daemon log to debug level.
  2. Run both logs for 5-10 minutes.
  3. After generating logs for troubleshooting, return logging for both the C SDK and daemon to their default levels.

Elevated logging levels can create large log files and have a performance impact. Generate logs at this level only as long as necessary for troubleshooting.

C SDK logs

The C SDK has four log levels, as defined by the enum _newrelic_loglevel_t in libnewrelic.h. By default, logs are set to NEWRELIC_LOG_INFO and output to standard error. Log levels include:

NEWRELIC_LOG_ERROR
NEWRELIC_LOG_WARNING
NEWRELIC_LOG_INFO (default)
NEWRELIC_LOG_DEBUG

To set a different log level for troubleshooting purposes: Call newrelic_configure_log() in your application code, and set a log level. For example:

newrelic_configure_log("./c_sdk.log", NEWRELIC_LOG_INFO);
Daemon logs

The C SDK daemon has four log levels. By default, logs are set to info and output to standard error. Log levels include:

error
warning
info (default)
debug

These log levels are invoked using flags from the command line:

--logfile <DAEMON_FILE_NAME>. Sets the path to the log file.
--loglevel <LOG_LEVEL>. Sets the log level. Default: info.

To set a different log level for troubleshooting purposes: From the command line, set a different log level flag. For example:

./newrelic-daemon -f -logfile stdout -loglevel debug

For more help

Recommendations for learning more: