Enable Client Logs
NCache now 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.
Note
This feature is available for NCache Version 4.9.1 and onwards.
In order to enable client logs programmatically for a cache NCache provides CacheInitParams
. 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 throughCacheInitParams
as well, the values passed byCacheInitParams
will be of high priority and they will be used.If either of the values (
EnableClientLogs
orLogLevel
) is passed throughCacheInitParams
and both of them are set in the client.ncconf it will read the one provided fromCacheInitParams
and the one not provided inCacheInitParams
, from client.ncconf.For example if client logs are enabled using
CacheInitParams
andLogLevel
is not specified, it will enable client logs irrespective of the value in Client.ncconf and use the value oflog-level
from client.ncconf since it is not provided throughCacheInitParams
If no values are passed in
CacheInitParams
it will read the values from client.ncconf.If no values are provided through client.ncconf, neither in the
CacheInitParams
, it will read the default set values. Default values are:- EnableClientLogs: False
- LogLevel: Error
Examples
Example 1:
In this example, even if any values are given in client.config they will be
overwritten and values provided through CacheInitParams
will be used.
try
{
string cacheName = "demoClusteredCache";
CacheInitParams cacheParams = new CacheInitParams();
// Enable client logs by setting the flag true
cacheParams.EnableClientLogs = true;
// Set the log level for client logging
cacheParams.LogLevel = LogLevel.Debug;
// Initialize the cache with cacheInitParams
Cache cache = NCache.InitializeCache(cacheName,cacheParams);
}
catch (OperationFailedException ex)
{
if (ex.Message.Contains("No server is available to process the request"))
{
// Make sure NCache Service is running
// Make sure that the cache is running
}
else if (ex.Message.Contains("'client.ncconf' not found"))
{
// Given cache name does not exist in client.ncconf
// (hint: check your spelling)
// Or client.ncconf does not contains server info
}
else if (ex.Message.Contains("cacheId cannot be an empty string"))
{
// Make sure that the cache name is not an empty string
}
else
{
// Exception can occur due to:
// Connection failures
// Operation performed during state transfer
// Operation timeout
}
}
catch (Exception ex)
{
// Any generic exception like ArgumentNullException or ArgumentException
}
Recommendation: To ensure the operation is fail safe, it is recommended to handle any potential exceptions within your application, as explained in Handling Failures.
Example 2:
In this example, LogLevel
is not mentioned through CacheInitParams
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";
CacheInitParams cacheParams = new CacheInitParams();
// Enable client logs by setting the flag true
cacheParams.EnableClientLogs = true;
// Initialize the cache with cacheInitParams
Cache cache = NCache.InitializeCache(cacheName,cacheParams);
}
catch (OperationFailedException ex)
{
if (ex.Message.Contains("No server is available to process the request"))
{
// Make sure NCache Service is running
// Make sure that the cache is running
}
else if (ex.Message.Contains("'client.ncconf' not found"))
{
// Given cache name does not exists in client.ncconf
// (hint: check your spelling)
// Or client.ncconf does not contains server info
}
else if (ex.Message.Contains("cacheId cannot be an empty string"))
{
// Make sure that the cache name is not an empty string
}
else
{
// Exception can occur due to:
// Connection failures
// Operation performed during state transfer
// Operation timeout
}
}
catch (Exception ex)
{
// Any generic exception like ArgumentNullException or ArgumentException
}
Recommendation: To ensure the operation is fail safe, it is recommended to handle any potential exceptions within your application, as explained in Handling Failures.
Example 3:
In this example, client logs are not enabled through CacheInitParams
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";
CacheInitParams cacheParams = new CacheInitParams();
// Set the log level for client logging
cacheParams.LogLevel = LogLevel.Debug;
// Initialize the cache with cacheInitParams
Cache cache = NCache.InitializeCache(cacheName,cacheParams);
}
catch (OperationFailedException ex)
{
if (ex.Message.Contains("No server is available to process the request"))
{
// Make sure NCache Service is running
// Make sure that the cache is running
}
else if (ex.Message.Contains("'client.ncconf' not found"))
{
// Given cache name does not exists in client.ncconf
// (hint: check your spelling)
// Or client.ncconf does not contains server info
}
else if (ex.Message.Contains("cacheId cannot be an empty string"))
{
// Make sure that the cache name is not an empty string
}
else
{
// Exception can occur due to:
// Connection failures
// Operation performed during state transfer
// Operation timeout
}
}
catch (Exception ex)
{
// Any generic exception like ArgumentNullException or ArgumentException
}
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.