//******************************************************************************************************// ErrorLogger.cs - Gbtc//// Copyright © 2012, Grid Protection Alliance. All Rights Reserved.//// Licensed to the Grid Protection Alliance (GPA) under one or more contributor license agreements. See// the NOTICE file distributed with this work for additional information regarding copyright ownership.// The GPA licenses this file to you under the MIT License (MIT), the "License"; you may// not use this file except in compliance with the License. You may obtain a copy of the License at://// http://www.opensource.org/licenses/MIT//// Unless agreed to in writing, the subject software distributed under the License is distributed on an// "AS-IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. Refer to the// License for the specific language governing permissions and limitations.//// Code Modification History:// ----------------------------------------------------------------------------------------------------// 04/03/2007 - Pinal C. Patel// Original version of source code generated.// 11/30/2007 - Pinal C. Patel// Modified the "design time" check in EndInit() method to use LicenseManager.UsageMode property// instead of DesignMode property as the former is more accurate than the latter.// 09/17/2008 - Pinal C. Patel// Converted code to C#.// 10/16/2008 - Pinal C. Patel// Edited code comments.// 06/18/2009 - Pinal C. Patel// Modified Log() to quit if Enabled is false.// 07/27/2009 - Pinal C. Patel// Made logging user information along with exception information optional via LogUserInfo property.// 08/06/2009 - Pinal C. Patel// Enabled upon initialization rather than instantiation.// 08/07/2009 - Pinal C. Patel// Added LoggingException event to notify about exceptions encountered when logging exceptions.// 09/14/2009 - Stephen C. Wills// Added new header and license agreement.// 02/11/2010 - Pinal C. Patel// Added OS version to the system information being logged.// 03/27/2012 - Prasanth GS// Exceptions logged through ErrorLogger are saved to backend db too.// 12/14/2012 - Starlynn Danyelle Gilliam// Modified Header.// 08/23/2013 - J. Ritchie Carroll// Adjusted algorithm for database inserts and curtailment to be more friendly to DB engine.////****************************************************************************************************** #region [ Contributor License Agreements ] //*******************************************************************************************************//// Code based on the following project:// User Friendly ASP.NET Exception Handling// http://www.codeproject.com/KB/aspnet/ASPNETExceptionHandling.aspx//// Copyright Jeff Atwood// // The Code Project Open License (CPOL):// http://www.codeproject.com/info/cpol10.aspx////******************************************************************************************************* #endregion using System;using System.Collections.Generic;using System.ComponentModel;using System.Configuration;using System.Data;using System.Diagnostics;using System.Drawing;using System.Net;using System.Reflection;using System.Text;using System.Web;using GSF.Collections;using GSF.Configuration;using GSF.Data;using GSF.Identity;using GSF.IO;using GSF.Net.Smtp;using GSF.Reflection;using Timer = System.Timers.Timer; namespace GSF.ErrorManagement{ /// <summary> /// Represents a logger that can be used for logging handled as well as unhandled exceptions across multiple /// application types (Console Application, Windows Service, Web Application, Web Service). /// </summary> /// <remarks> /// <para> /// Adapted from exception handling code by Jeff Atwood of CodingHorror.com. Demo projects for handling unhandled /// exception in both windows and web environment by Jeff Atwood are available at The Code Project web site. /// See: http://www.codeproject.com/script/articles/list_articles.asp?userid=450027 /// </para> /// <para> /// Error logger with Windows Forms capabilities can be found in the GSF.Windows assembly. /// </para> /// </remarks> /// <example> /// This example shows how to use the <see cref="ErrorLogger"/> component to log handled and unhandled exceptions: /// <code> /// using System; /// using System.IO; /// using GSF.ErrorManagement; /// /// class Program /// { /// static ErrorLogger s_logger; /// /// static Program() /// { /// s_logger = new ErrorLogger(); /// s_logger.LogToUI = true; // Show exception info on the UI. /// s_logger.LogToFile = true; // Log exception info to a file. /// s_logger.LogToEmail = true; // Send exception info in an e-mail. /// s_logger.LogToEventLog = true; // Log exception info to the event log. /// s_logger.ContactEmail = "dev@email.com"; // Provide an e-mail address. /// s_logger.HandleUnhandledException = true; // Configure to handle unhandled exceptions. /// s_logger.PersistSettings = true; // Save settings to the config file. /// s_logger.Initialize(); // Initialize ErrorLogger component for use. /// } /// /// static void Main(string[] args) /// { /// try /// { /// // This may cause a handled FileNotFoundException if the file doesn't exist. /// string data = File.ReadAllText(@"c:\NonExistentFile.txt"); /// } /// catch (Exception ex) /// { /// // When logging handled exceptions we want to disable loggers (UI logger and E-mail logger) that /// // may require interaction either directly or indirectly as it can be annoying. All the loggers /// // are enabled automatically after the handled exception has been logged. /// s_logger.SuppressInteractiveLogging(); /// s_logger.Log(ex); /// } /// /// int numerator = 1; /// int denominator = 0; /// int result = numerator / denominator; // This will cause an unhandled DivideByZeroException. /// /// Console.ReadLine(); /// } /// } /// </code> /// </example> /// <seealso cref="ErrorModule"/> [ToolboxBitmap(typeof(ErrorLogger))] public class ErrorLogger : Component, ISupportLifecycle, ISupportInitialize, IProvideStatus, IPersistSettings { #region [ Members ] // Constants /// <summary> /// Specifies the default value for the <see cref="LogToUI"/> property. /// </summary> public const bool DefaultLogToUI = false; /// <summary> /// Specifies the default value for the <see cref="LogToFile"/> property. /// </summary> public const bool DefaultLogToFile = true; /// <summary> /// Specifies the default value for the <see cref="LogToEmail"/> property. /// </summary> public const bool DefaultLogToEmail = false; /// <summary> /// Specifies the default value for the <see cref="LogToEventLog"/> property. /// </summary> public const bool DefaultLogToEventLog = true; /// <summary> /// Specifies the default value for the <see cref="LogToDatabase"/> property. /// </summary> public const bool DefaultLogToDatabase = false; /// <summary> /// Specifies the default value for the <see cref="LogUserInfo"/> property. /// </summary> public const bool DefaultLogUserInfo = false; /// <summary> /// Specifies the default value for the <see cref="DefaultDatabaseLogSize"/> property. /// </summary> private const int DefaultDatabaseLogSize = 2000; /// <summary> /// Specifies the default value for the <see cref="SmtpServer"/> property. /// </summary> public const string DefaultSmtpServer = Mail.DefaultSmtpServer; /// <summary> /// Specifies the default value for the <see cref="ContactName"/> property. /// </summary> public const string DefaultContactName = ""; /// <summary> /// Specifies the default value for the <see cref="ContactEmail"/> property. /// </summary> public const string DefaultContactEmail = ""; /// <summary> /// Specifies the default value for the <see cref="ContactPhone"/> property. /// </summary> public const string DefaultContactPhone = ""; /// <summary> /// Specifies the default value for the <see cref="PersistSettings"/> property. /// </summary> public const bool DefaultPersistSettings = false; /// <summary> /// Specifies the default value for the <see cref="SettingsCategory"/> property. /// </summary> public const string DefaultSettingsCategory = "ErrorLogger"; /// <summary> /// Specifies the default value for the <see cref="HandleUnhandledException"/> property. /// </summary> public const bool DefaultHandleUnhandledException = true; /// <summary> /// Specifies the default value for the <see cref="ExitOnUnhandledException"/> property. /// </summary> public const bool DefaultExitOnUnhandledException = false; // Events /// <summary> /// Occurs when an <see cref="Exception"/> is encountered while logging an <see cref="Exception"/>. /// </summary> /// <remarks> /// <see cref="EventArgs{T}.Argument"/> is the <see cref="Exception"/> that was encountered while logging an <see cref="Exception"/>. /// </remarks> public event EventHandler<EventArgs<Exception>> LoggingException; // Fields private bool m_logToUI; private bool m_logToFile; private bool m_logToEmail; private bool m_logToEventLog; private bool m_logToDatabase; private bool m_logUserInfo; private int m_databaseLogSize; private string m_smtpServer; private string m_contactName; private string m_contactEmail; private string m_contactPhone; private bool m_persistSettings; private string m_settingsCategory; private bool m_enabled; private bool m_handleUnhandledException; private bool m_exitOnUnhandledException; private readonly LogFile m_errorLog; private Exception m_lastException; private ApplicationType m_appType; private Func<string> m_errorTextMethod; private Func<string> m_scopeTextMethod; private Func<string> m_actionTextMethod; private Func<string> m_moreInfoTextMethod; private readonly List<Action<Exception>> m_loggers; private bool m_logToFileOK; private bool m_logToEmailOK; private bool m_logToEventLogOK; private bool m_logToDatabaseOK; private bool m_disposed; private bool m_initialized; private bool m_suppressInteractiveLogging; private ProcessQueue<Tuple<string, string, string, string>> m_databaseErrorQueue; private Timer m_tableSizeCurtailmentTimer; #endregion #region [ Constructors ] /// <summary> /// Initializes a new instance of the <see cref="ErrorLogger"/> class. /// </summary> public ErrorLogger() { m_logToUI = DefaultLogToUI; m_logToFile = DefaultLogToFile; m_logToEmail = DefaultLogToEmail; m_logToEventLog = DefaultLogToEventLog; m_logToDatabase = DefaultLogToDatabase; m_logUserInfo = DefaultLogUserInfo; m_databaseLogSize = DefaultDatabaseLogSize; m_smtpServer = DefaultSmtpServer; m_contactName = DefaultContactName; m_contactEmail = DefaultContactEmail; m_contactPhone = DefaultContactPhone; m_persistSettings = DefaultPersistSettings; m_settingsCategory = DefaultSettingsCategory; m_handleUnhandledException = DefaultHandleUnhandledException; m_exitOnUnhandledException = DefaultExitOnUnhandledException; // Initialize delegate methods. m_errorTextMethod = GetErrorText; m_scopeTextMethod = GetScopeText; m_actionTextMethod = GetActionText; m_moreInfoTextMethod = GetMoreInfoText; // Initialize the error log file. m_errorLog = new LogFile(); m_errorLog.FileName = "ErrorLog.txt"; // Initialize all logger methods. m_loggers = new List<Action<Exception>>(); m_loggers.Add(ExceptionToDatabase); m_loggers.Add(ExceptionToEventLog); m_loggers.Add(ExceptionToEmail); m_loggers.Add(ExceptionToFile); m_loggers.Add(ExceptionToUI); } /// <summary> /// Initializes a new instance of the <see cref="ErrorLogger"/> class. /// </summary> /// <param name="container"><see cref="IContainer"/> object that contains the <see cref="ErrorLogger"/>.</param> public ErrorLogger(IContainer container) : this() { if ((object)container != null) container.Add(this); } #endregion #region [ Properties ] /// <summary> /// Gets or sets a boolean value that indicates whether <see cref="Exception"/> information is to be /// displayed on the application UI. /// </summary> /// <remarks> /// This setting is ignored in Windows Service and Web Service application types. /// </remarks> [Category("Logging"), DefaultValue(DefaultLogToUI), Description("Indicates whether Exception information is to be displayed on the application UI.")] public bool LogToUI { get { return m_logToUI; } set { m_logToUI = value; } } /// <summary> /// Gets or sets a boolean value that indicates whether <see cref="Exception"/> information is to be /// written to the <see cref="ErrorLog"/>. /// </summary> [Category("Logging"), DefaultValue(DefaultLogToFile), Description("Indicates whether Exception information is to be written to the ErrorLog.")] public bool LogToFile { get { return m_logToFile; } set { m_logToFile = value; } } /// <summary> /// Gets or sets a boolean value that indicates whether <see cref="Exception"/> information is to be sent /// in an e-mail to the <see cref="ContactEmail"/> address. /// </summary> [Category("Logging"), DefaultValue(DefaultLogToEmail), Description("Indicates whether Exception information is to be sent in an e-mail to the ContactEmail address.")] public bool LogToEmail { get { return m_logToEmail; } set { m_logToEmail = value; } } /// <summary> /// Gets or sets a boolean value that indicates whether <see cref="Exception"/> information is to be /// written to the <see cref="EventLog"/>. /// </summary> [Category("Logging"), DefaultValue(DefaultLogToEventLog), Description("Indicates whether Exception information is to be written to the EventLog.")] public bool LogToEventLog { get { return m_logToEventLog; } set { m_logToEventLog = value; } } /// <summary> /// Gets or sets a boolean value that indicates whether <see cref="Exception"/> information is to be /// written to the database. /// </summary> [Category("Logging"), DefaultValue(DefaultLogToDatabase), Description("Indicates whether Exception information is to be written to the database.")] public bool LogToDatabase { get { return m_logToDatabase; } set { m_logToDatabase = value; } } /// <summary> /// Gets or sets a boolean value that indicates whether information about local user (for windows applications) /// or remote user (for web applications) is to be logged when logging an <see cref="Exception"/>. /// </summary> [Category("Logging"), DefaultValue(DefaultLogUserInfo), Description("Indicates whether information about a local user (for windows application) or remote user (for web application) is to be logged when logging an Exception.")] public bool LogUserInfo { get { return m_logUserInfo; } set { m_logUserInfo = value; } } /// <summary> /// Gets or sets the maximum exception log size to maintain when logging exceptions to the database. /// </summary> [Category("Logging"), DefaultValue(DefaultDatabaseLogSize), Description("Defines the maximum exception log size to maintain when logging exceptions to the database.")] public int DatabaseLogSize { get { return m_databaseLogSize; } set { m_databaseLogSize = value; } } /// <summary> /// Gets or sets the SMTP server to be used for sending e-mail messages containing <see cref="Exception"/> /// information to the <see cref="ContactEmail"/> address. /// </summary> [Category("Settings"), DefaultValue(DefaultSmtpServer), Description("The SMTP server to be used for sending e-mail messages containing Exception information to the ContactEmail address.")] public string SmtpServer { get { return m_smtpServer; } set { m_smtpServer = value; } } /// <summary> /// Gets or sets the name of the person who can be contacted by the end-user in case of an <see cref="Exception"/>. /// </summary> [Category("Settings"), DefaultValue(DefaultContactName), Description("Name of the person who can be contacted by the end-user in case of an Exception.")] public string ContactName { getLines 1–500 of 2051. Load more
//****************************************************************************************************** // ErrorLogger.cs - Gbtc // // Copyright © 2012, Grid Protection Alliance. All Rights Reserved. // // Licensed to the Grid Protection Alliance (GPA) under one or more contributor license agreements. See // the NOTICE file distributed with this work for additional information regarding copyright ownership. // The GPA licenses this file to you under the MIT License (MIT), the "License"; you may // not use this file except in compliance with the License. You may obtain a copy of the License at: // // http://www.opensource.org/licenses/MIT // // Unless agreed to in writing, the subject software distributed under the License is distributed on an // "AS-IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. Refer to the // License for the specific language governing permissions and limitations. // // Code Modification History: // ---------------------------------------------------------------------------------------------------- // 04/03/2007 - Pinal C. Patel // Original version of source code generated. // 11/30/2007 - Pinal C. Patel // Modified the "design time" check in EndInit() method to use LicenseManager.UsageMode property // instead of DesignMode property as the former is more accurate than the latter. // 09/17/2008 - Pinal C. Patel // Converted code to C#. // 10/16/2008 - Pinal C. Patel // Edited code comments. // 06/18/2009 - Pinal C. Patel // Modified Log() to quit if Enabled is false. // 07/27/2009 - Pinal C. Patel // Made logging user information along with exception information optional via LogUserInfo property. // 08/06/2009 - Pinal C. Patel // Enabled upon initialization rather than instantiation. // 08/07/2009 - Pinal C. Patel // Added LoggingException event to notify about exceptions encountered when logging exceptions. // 09/14/2009 - Stephen C. Wills // Added new header and license agreement. // 02/11/2010 - Pinal C. Patel // Added OS version to the system information being logged. // 03/27/2012 - Prasanth GS // Exceptions logged through ErrorLogger are saved to backend db too. // 12/14/2012 - Starlynn Danyelle Gilliam // Modified Header. // 08/23/2013 - J. Ritchie Carroll // Adjusted algorithm for database inserts and curtailment to be more friendly to DB engine. // //****************************************************************************************************** #region [ Contributor License Agreements ] //******************************************************************************************************* // // Code based on the following project: // User Friendly ASP.NET Exception Handling // http://www.codeproject.com/KB/aspnet/ASPNETExceptionHandling.aspx // // Copyright Jeff Atwood // // The Code Project Open License (CPOL): // http://www.codeproject.com/info/cpol10.aspx // //******************************************************************************************************* #endregion using System; using System.Collections.Generic; using System.ComponentModel; using System.Configuration; using System.Data; using System.Diagnostics; using System.Drawing; using System.Net; using System.Reflection; using System.Text; using System.Web; using GSF.Collections; using GSF.Configuration; using GSF.Data; using GSF.Identity; using GSF.IO; using GSF.Net.Smtp; using GSF.Reflection; using Timer = System.Timers.Timer; namespace GSF.ErrorManagement { /// <summary> /// Represents a logger that can be used for logging handled as well as unhandled exceptions across multiple /// application types (Console Application, Windows Service, Web Application, Web Service). /// </summary> /// <remarks> /// <para> /// Adapted from exception handling code by Jeff Atwood of CodingHorror.com. Demo projects for handling unhandled /// exception in both windows and web environment by Jeff Atwood are available at The Code Project web site. /// See: http://www.codeproject.com/script/articles/list_articles.asp?userid=450027 /// </para> /// <para> /// Error logger with Windows Forms capabilities can be found in the GSF.Windows assembly. /// </para> /// </remarks> /// <example> /// This example shows how to use the <see cref="ErrorLogger"/> component to log handled and unhandled exceptions: /// <code> /// using System; /// using System.IO; /// using GSF.ErrorManagement; /// /// class Program /// { /// static ErrorLogger s_logger; /// /// static Program() /// { /// s_logger = new ErrorLogger(); /// s_logger.LogToUI = true; // Show exception info on the UI. /// s_logger.LogToFile = true; // Log exception info to a file. /// s_logger.LogToEmail = true; // Send exception info in an e-mail. /// s_logger.LogToEventLog = true; // Log exception info to the event log. /// s_logger.ContactEmail = "dev@email.com"; // Provide an e-mail address. /// s_logger.HandleUnhandledException = true; // Configure to handle unhandled exceptions. /// s_logger.PersistSettings = true; // Save settings to the config file. /// s_logger.Initialize(); // Initialize ErrorLogger component for use. /// } /// /// static void Main(string[] args) /// { /// try /// { /// // This may cause a handled FileNotFoundException if the file doesn't exist. /// string data = File.ReadAllText(@"c:\NonExistentFile.txt"); /// } /// catch (Exception ex) /// { /// // When logging handled exceptions we want to disable loggers (UI logger and E-mail logger) that /// // may require interaction either directly or indirectly as it can be annoying. All the loggers /// // are enabled automatically after the handled exception has been logged. /// s_logger.SuppressInteractiveLogging(); /// s_logger.Log(ex); /// } /// /// int numerator = 1; /// int denominator = 0; /// int result = numerator / denominator; // This will cause an unhandled DivideByZeroException. /// /// Console.ReadLine(); /// } /// } /// </code> /// </example> /// <seealso cref="ErrorModule"/> [ToolboxBitmap(typeof(ErrorLogger))] public class ErrorLogger : Component, ISupportLifecycle, ISupportInitialize, IProvideStatus, IPersistSettings { #region [ Members ] // Constants /// <summary> /// Specifies the default value for the <see cref="LogToUI"/> property. /// </summary> public const bool DefaultLogToUI = false; /// <summary> /// Specifies the default value for the <see cref="LogToFile"/> property. /// </summary> public const bool DefaultLogToFile = true; /// <summary> /// Specifies the default value for the <see cref="LogToEmail"/> property. /// </summary> public const bool DefaultLogToEmail = false; /// <summary> /// Specifies the default value for the <see cref="LogToEventLog"/> property. /// </summary> public const bool DefaultLogToEventLog = true; /// <summary> /// Specifies the default value for the <see cref="LogToDatabase"/> property. /// </summary> public const bool DefaultLogToDatabase = false; /// <summary> /// Specifies the default value for the <see cref="LogUserInfo"/> property. /// </summary> public const bool DefaultLogUserInfo = false; /// <summary> /// Specifies the default value for the <see cref="DefaultDatabaseLogSize"/> property. /// </summary> private const int DefaultDatabaseLogSize = 2000; /// <summary> /// Specifies the default value for the <see cref="SmtpServer"/> property. /// </summary> public const string DefaultSmtpServer = Mail.DefaultSmtpServer; /// <summary> /// Specifies the default value for the <see cref="ContactName"/> property. /// </summary> public const string DefaultContactName = ""; /// <summary> /// Specifies the default value for the <see cref="ContactEmail"/> property. /// </summary> public const string DefaultContactEmail = ""; /// <summary> /// Specifies the default value for the <see cref="ContactPhone"/> property. /// </summary> public const string DefaultContactPhone = ""; /// <summary> /// Specifies the default value for the <see cref="PersistSettings"/> property. /// </summary> public const bool DefaultPersistSettings = false; /// <summary> /// Specifies the default value for the <see cref="SettingsCategory"/> property. /// </summary> public const string DefaultSettingsCategory = "ErrorLogger"; /// <summary> /// Specifies the default value for the <see cref="HandleUnhandledException"/> property. /// </summary> public const bool DefaultHandleUnhandledException = true; /// <summary> /// Specifies the default value for the <see cref="ExitOnUnhandledException"/> property. /// </summary> public const bool DefaultExitOnUnhandledException = false; // Events /// <summary> /// Occurs when an <see cref="Exception"/> is encountered while logging an <see cref="Exception"/>. /// </summary> /// <remarks> /// <see cref="EventArgs{T}.Argument"/> is the <see cref="Exception"/> that was encountered while logging an <see cref="Exception"/>. /// </remarks> public event EventHandler<EventArgs<Exception>> LoggingException; // Fields private bool m_logToUI; private bool m_logToFile; private bool m_logToEmail; private bool m_logToEventLog; private bool m_logToDatabase; private bool m_logUserInfo; private int m_databaseLogSize; private string m_smtpServer; private string m_contactName; private string m_contactEmail; private string m_contactPhone; private bool m_persistSettings; private string m_settingsCategory; private bool m_enabled; private bool m_handleUnhandledException; private bool m_exitOnUnhandledException; private readonly LogFile m_errorLog; private Exception m_lastException; private ApplicationType m_appType; private Func<string> m_errorTextMethod; private Func<string> m_scopeTextMethod; private Func<string> m_actionTextMethod; private Func<string> m_moreInfoTextMethod; private readonly List<Action<Exception>> m_loggers; private bool m_logToFileOK; private bool m_logToEmailOK; private bool m_logToEventLogOK; private bool m_logToDatabaseOK; private bool m_disposed; private bool m_initialized; private bool m_suppressInteractiveLogging; private ProcessQueue<Tuple<string, string, string, string>> m_databaseErrorQueue; private Timer m_tableSizeCurtailmentTimer; #endregion #region [ Constructors ] /// <summary> /// Initializes a new instance of the <see cref="ErrorLogger"/> class. /// </summary> public ErrorLogger() { m_logToUI = DefaultLogToUI; m_logToFile = DefaultLogToFile; m_logToEmail = DefaultLogToEmail; m_logToEventLog = DefaultLogToEventLog; m_logToDatabase = DefaultLogToDatabase; m_logUserInfo = DefaultLogUserInfo; m_databaseLogSize = DefaultDatabaseLogSize; m_smtpServer = DefaultSmtpServer; m_contactName = DefaultContactName; m_contactEmail = DefaultContactEmail; m_contactPhone = DefaultContactPhone; m_persistSettings = DefaultPersistSettings; m_settingsCategory = DefaultSettingsCategory; m_handleUnhandledException = DefaultHandleUnhandledException; m_exitOnUnhandledException = DefaultExitOnUnhandledException; // Initialize delegate methods. m_errorTextMethod = GetErrorText; m_scopeTextMethod = GetScopeText; m_actionTextMethod = GetActionText; m_moreInfoTextMethod = GetMoreInfoText; // Initialize the error log file. m_errorLog = new LogFile(); m_errorLog.FileName = "ErrorLog.txt"; // Initialize all logger methods. m_loggers = new List<Action<Exception>>(); m_loggers.Add(ExceptionToDatabase); m_loggers.Add(ExceptionToEventLog); m_loggers.Add(ExceptionToEmail); m_loggers.Add(ExceptionToFile); m_loggers.Add(ExceptionToUI); } /// <summary> /// Initializes a new instance of the <see cref="ErrorLogger"/> class. /// </summary> /// <param name="container"><see cref="IContainer"/> object that contains the <see cref="ErrorLogger"/>.</param> public ErrorLogger(IContainer container) : this() { if ((object)container != null) container.Add(this); } #endregion #region [ Properties ] /// <summary> /// Gets or sets a boolean value that indicates whether <see cref="Exception"/> information is to be /// displayed on the application UI. /// </summary> /// <remarks> /// This setting is ignored in Windows Service and Web Service application types. /// </remarks> [Category("Logging"), DefaultValue(DefaultLogToUI), Description("Indicates whether Exception information is to be displayed on the application UI.")] public bool LogToUI { get { return m_logToUI; } set { m_logToUI = value; } } /// <summary> /// Gets or sets a boolean value that indicates whether <see cref="Exception"/> information is to be /// written to the <see cref="ErrorLog"/>. /// </summary> [Category("Logging"), DefaultValue(DefaultLogToFile), Description("Indicates whether Exception information is to be written to the ErrorLog.")] public bool LogToFile { get { return m_logToFile; } set { m_logToFile = value; } } /// <summary> /// Gets or sets a boolean value that indicates whether <see cref="Exception"/> information is to be sent /// in an e-mail to the <see cref="ContactEmail"/> address. /// </summary> [Category("Logging"), DefaultValue(DefaultLogToEmail), Description("Indicates whether Exception information is to be sent in an e-mail to the ContactEmail address.")] public bool LogToEmail { get { return m_logToEmail; } set { m_logToEmail = value; } } /// <summary> /// Gets or sets a boolean value that indicates whether <see cref="Exception"/> information is to be /// written to the <see cref="EventLog"/>. /// </summary> [Category("Logging"), DefaultValue(DefaultLogToEventLog), Description("Indicates whether Exception information is to be written to the EventLog.")] public bool LogToEventLog { get { return m_logToEventLog; } set { m_logToEventLog = value; } } /// <summary> /// Gets or sets a boolean value that indicates whether <see cref="Exception"/> information is to be /// written to the database. /// </summary> [Category("Logging"), DefaultValue(DefaultLogToDatabase), Description("Indicates whether Exception information is to be written to the database.")] public bool LogToDatabase { get { return m_logToDatabase; } set { m_logToDatabase = value; } } /// <summary> /// Gets or sets a boolean value that indicates whether information about local user (for windows applications) /// or remote user (for web applications) is to be logged when logging an <see cref="Exception"/>. /// </summary> [Category("Logging"), DefaultValue(DefaultLogUserInfo), Description("Indicates whether information about a local user (for windows application) or remote user (for web application) is to be logged when logging an Exception.")] public bool LogUserInfo { get { return m_logUserInfo; } set { m_logUserInfo = value; } } /// <summary> /// Gets or sets the maximum exception log size to maintain when logging exceptions to the database. /// </summary> [Category("Logging"), DefaultValue(DefaultDatabaseLogSize), Description("Defines the maximum exception log size to maintain when logging exceptions to the database.")] public int DatabaseLogSize { get { return m_databaseLogSize; } set { m_databaseLogSize = value; } } /// <summary> /// Gets or sets the SMTP server to be used for sending e-mail messages containing <see cref="Exception"/> /// information to the <see cref="ContactEmail"/> address. /// </summary> [Category("Settings"), DefaultValue(DefaultSmtpServer), Description("The SMTP server to be used for sending e-mail messages containing Exception information to the ContactEmail address.")] public string SmtpServer { get { return m_smtpServer; } set { m_smtpServer = value; } } /// <summary> /// Gets or sets the name of the person who can be contacted by the end-user in case of an <see cref="Exception"/>. /// </summary> [Category("Settings"), DefaultValue(DefaultContactName), Description("Name of the person who can be contacted by the end-user in case of an Exception.")] public string ContactName { get