• Webinars
  • Docs
  • Download
  • Blogs
  • Contact Us
Try Free
Show / Hide Table of Contents

Error Logging in NCache

NCache provides logging for client application and socket level. Logging is disabled by default, but it can be enabled by specifying log settings through API in NCache application or NCache configuration file(client.ncconf).

These logs contain information of client operations and also usage data of operations propagated through socket server to communicate with remote server. These logs are created in the default location where NCache logs are saved.

In order to enable client logs programmatically for a cache NCache provides CacheConnectionOptions. You can further specify the log level for client logs which are explained below.

Special Considerations

  • If client.ncconf file contains the enable-client-log values and user passes them through CacheConnectionOptions as well, the values passed by CacheConnectionOptions will be of high priority and they will be used.

  • If either of the values (EnableClientLogs or LogLevel) is passed through CacheConnectionOptions and both of them are set in the client.ncconf it will read the one provided from CacheConnectionOptions and the one not provided in CacheConnectionOptions, from client.ncconf.

    For example if client logs are enabled using CacheConnectionOptions and LogLevel is not specified, it will enable client logs irrespective of the value in Client.ncconf and use the value of log-level from client.ncconf since it is not provided through CacheConnectionOptions

  • If no values are passed in CacheConnectionOptions it will read the values from client.ncconf.

  • If no values are provided through client.ncconf, neither in the CacheConnectionOptions, it will read the default set values. Default values are:

    • EnableClientLogs: False
    • LogLevel: Error

Examples

Connection options specified in both config and API

In this example, even if any values are given in client.config they will be overwritten and values provided through CacheConnectionOptions will be used.

try
{   
    string cacheName = "demoClusteredCache";

    var options = new CacheConnectionOptions();

    // Enable client logs by setting the flag true
    options.EnableClientLogs = true;

    // Set the log level for client logging
    options.LogLevel = LogLevel.Debug;

    // Connect to cache with CacheConnectionOptions
    ICache cache = CacheManager.GetCache(cacheName, options);
}
catch (OperationFailedException ex)
{
      // NCache specific exception
      if (ex.ErrorCode == NCacheErrorCodes.NO_SERVER_AVAILABLE)
      {
            // Make sure NCache Service is running
            // Make sure that the cache is running
      }
      else
      {
            // Exception can occur due to:
            // Connection Failures
            // Operation Timeout
            // Operation performed during state transfer
      }
}
catch (ConfigurationException ex)
{
      if(ex.ErrorCode == NCacheErrorCodes.SERVER_INFO_NOT_FOUND)
      {     
            // client.ncconf must have server information
      }
}
catch (Exception ex)
{
      // Any generic exception like ArgumentNullException or ArgumentException
      // Argument exception occurs in case of empty string name
}

Recommendation: To ensure the operation is fail safe, it is recommended to handle any potential exceptions within your application, as explained in Handling Failures.

LogLevel not specified in API

In this example, LogLevel is not specified through CacheConnectionOptions so it will look for the next possible value i.e value of log-level in client.ncconf and use it. In case it is not mentioned there it will use default values.

try
{
    string cacheName = "demoClusteredCache";

    var options = new CacheConnectionOptions();

    // Enable client logs by setting the flag true
    options.EnableClientLogs = true;

    // Connect to the cache with CacheConnectionOptions
    ICache cache = CacheManager.GetCache(cacheName, options);
}
catch (OperationFailedException ex)
{
      // NCache specific exception
      if (ex.ErrorCode == NCacheErrorCodes.NO_SERVER_AVAILABLE)
      {
            // Make sure NCache Service is running
            // Make sure that the cache is running
      }
      else
      {
            // Exception can occur due to:
            // Connection Failures
            // Operation Timeout
            // Operation performed during state transfer
      }
}
catch (ConfigurationException ex)
{
      if(ex.ErrorCode == NCacheErrorCodes.SERVER_INFO_NOT_FOUND)
      {     
            // client.ncconf must have server information
      }
}
catch (Exception ex)
{
      // Any generic exception like ArgumentNullException or ArgumentException
      // Argument exception occurs in case of empty string name
}

Recommendation: To ensure the operation is fail safe, it is recommended to handle any potential exceptions within your application, as explained in Handling Failures.

Client logs not enabled through API

In this example, client logs are not enabled through CacheConnectionOptions so it will look for the next possible value i.e value of enable-client-log in client.ncconf and use it. In case it is false, logs will not be enabled.

try
{
    string cacheName = "demoClusteredCache";

    var options = new CacheConnectionOptions();

    // Set the log level for client logging
    options.LogLevel = LogLevel.Debug;

    // Connect to the cache with CacheConnectionOptions
    ICache cache = CacheManager.GetCache(cacheName, options);
}
catch (OperationFailedException ex)
{
      // NCache specific exception
      if (ex.ErrorCode == NCacheErrorCodes.NO_SERVER_AVAILABLE)
      {
            // Make sure NCache Service is running
            // Make sure that the cache is running
      }
      else
      {
            // Exception can occur due to:
            // Connection Failures
            // Operation Timeout
            // Operation performed during state transfer
      }
}
catch (ConfigurationException ex)
{
      if(ex.ErrorCode == NCacheErrorCodes.SERVER_INFO_NOT_FOUND)
      {     
            // client.ncconf must have server information
      }
}
catch (Exception ex)
{
      // Any generic exception like ArgumentNullException or ArgumentException
      // Argument exception occurs in case of empty string name
}

Recommendation: To ensure the operation is fail safe, it is recommended to handle any potential exceptions within your application, as explained in Handling Failures.

Types of Logging

Following are the types of logging:

  • INFO: Info level describes some useful information about any operation performed on cache, such as log starting and stopping state of state transfer operations.

  • ERROR: This log flag gives the cause of errors that are raised during operation execution. This status log is useful in most of troubleshooting scenarios such as during start of cache exception which occurs for joining with its own replica.

  • DEBUG: This log option prints detailed information about any operations in cache such as information of each operation like key, cache items during state transfer. This log information is useful to analysis cache issues in details whenever normal debugging is not possible and drilling any hidden issue. But this causes performance degradation for cache operations.

See Also

Start Cache
Stop Cache
NCache Management API

Back to top Copyright © 2017 Alachisoft