Singleton pattern for logger class
Implementing Singleton Design pattern for logger service is something used extensively.
Here is the implementation which i used recently:
class Logger
{
#region Private member
//Stream writer to write log to file.
private static StreamWriter streamWriter = null;
//Will be used in synchLock to make initialisation thread safe.
private static Object synchLock = typeof(Logger);
private static Logger logger = null;
//Log file name.
private const string LOG_FILE_NAME = "Log.txt";
#endregion
#region Constructors
///
/// Constructor for loggging class.
/// As singleton design is followed so making this constructor private.
///
private Logger() { }
#endregion
#region Public methods
///
/// Gets instance of logger class.
///
///Object of logger class.
public static Logger Instance()
{
//To make class thread safe.
lock (synchLock)
{
if (logger == null)
{
logger = new Logger();
}
}
return logger;
}
///
/// Logs exception in the log file.
/// Only Stack trace and message is logged.
///
public void LogException(Exception ex)
{
try
{
//Open stream if empty.
if (streamWriter == null)
{
streamWriter = new StreamWriter(LOG_FILE_NAME, true, Encoding.UTF8);
}
streamWriter.WriteLine("---------------------------------------------------------------");
streamWriter.WriteLine(string.Format("Date: {0}", DateTime.UtcNow));
streamWriter.WriteLine(ex.StackTrace);
streamWriter.WriteLine(ex.Message);
streamWriter.WriteLine("--------------------------------------------------------");
}
catch { }
finally
{
//Close stream if open.
if (streamWriter != null)
{
streamWriter.Close();
}
}
}
#endregion
}
Here is the implementation which i used recently:
class Logger
{
#region Private member
//Stream writer to write log to file.
private static StreamWriter streamWriter = null;
//Will be used in synchLock to make initialisation thread safe.
private static Object synchLock = typeof(Logger);
private static Logger logger = null;
//Log file name.
private const string LOG_FILE_NAME = "Log.txt";
#endregion
#region Constructors
///
/// Constructor for loggging class.
/// As singleton design is followed so making this constructor private.
///
private Logger() { }
#endregion
#region Public methods
///
/// Gets instance of logger class.
///
///
public static Logger Instance()
{
//To make class thread safe.
lock (synchLock)
{
if (logger == null)
{
logger = new Logger();
}
}
return logger;
}
///
/// Logs exception in the log file.
/// Only Stack trace and message is logged.
///
public void LogException(Exception ex)
{
try
{
//Open stream if empty.
if (streamWriter == null)
{
streamWriter = new StreamWriter(LOG_FILE_NAME, true, Encoding.UTF8);
}
streamWriter.WriteLine("---------------------------------------------------------------");
streamWriter.WriteLine(string.Format("Date: {0}", DateTime.UtcNow));
streamWriter.WriteLine(ex.StackTrace);
streamWriter.WriteLine(ex.Message);
streamWriter.WriteLine("--------------------------------------------------------");
}
catch { }
finally
{
//Close stream if open.
if (streamWriter != null)
{
streamWriter.Close();
}
}
}
#endregion
}
Comments
Post a Comment