Revision: 21324
Updated Code
at September 29, 2010 08:42 by pckujawa
Updated Code
[app.config] <?xml version="1.0"?> <configuration> <configSections> <section name="nlog" type="NLog.Config.ConfigSectionHandler, NLog"/> </configSections> <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <variable name="appTitle" value="My Application"/> <variable name="logFilePath" value="${specialfolder:folder=Desktop:file=${appTitle} log.log}"/> <targets async="true"> <target name="file" xsi:type="File" fileName="${logFilePath}" layout="${longdate} ${level:upperCase=true}: ${message}${newline}(${stacktrace}) ${exception:format=ToString}"/> <target name="fileAsInfo" xsi:type="File" fileName="${logFilePath}" layout="${longdate} ${level:upperCase=true}: ${message} ${exception:format=ToString}"/> <target xsi:type="EventLog" name="eventLog" source="${appTitle}" layout="${message}${newline}${exception:format=tostring}"/> </targets> <targets> <target xsi:type="MessageBox" name="mbox" caption="Error" layout="An error has occurred. Please see the log file (${logFilePath}) or event log for more details."/> </targets> <rules> <logger name="*" level="Info" writeTo="fileAsInfo"/> <logger name="*" minlevel="Warn" writeTo="file"/> <logger name="*" minlevel="Warn" writeTo="eventLog"/> <logger name="*" minlevel="Error" writeTo="mbox"/> </rules> </nlog> </configuration> // WinForms App static class Program { private static Logger _logger = LogManager.GetCurrentClassLogger(); /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main() { Application.ThreadException += OnThreadException; AppDomain.CurrentDomain.UnhandledException += OnUnhandledException; Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); try { Application.Run(new PrimaryForm()); } catch (Exception exc) { LogFatalException(exc); throw; } } private static void LogFatalException(Exception exc) { string message = String.Format( "(Application version {0}) {1}", Application.ProductVersion, exc.Message); _logger.FatalException(message, exc); Application.Exit(); // Encouraged, but not required } private static void OnUnhandledException(object sender, UnhandledExceptionEventArgs e) { if (e.IsTerminating) { _logger.Info("Application is terminating due to an unhandled exception in a secondary thread."); } LogFatalException(e.ExceptionObject as Exception); } private static void OnThreadException(object sender, ThreadExceptionEventArgs e) { LogFatalException(e.Exception); } } // WPF App // App.xaml: <Application x:Class="UI.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" DispatcherUnhandledException="Application_DispatcherUnhandledException" Startup="Application_Startup" StartupUri="UserInterface.xaml"> <Application.Resources> </Application.Resources> </Application> // App.xaml.cs /// <summary> /// Interaction logic for App.xaml /// </summary> public partial class App : Application { private readonly Logger _logger = LogManager.GetLogger("App"); private void Application_Startup(object sender, StartupEventArgs e) { // UI Exceptions this.DispatcherUnhandledException += Application_DispatcherUnhandledException; // Thread exceptions AppDomain.CurrentDomain.UnhandledException += CurrentDomainOnUnhandledException; } private void Application_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e) { e.Handled = true; var exception = e.Exception; HandleUnhandledException(exception); } private void CurrentDomainOnUnhandledException(object sender, UnhandledExceptionEventArgs unhandledExceptionEventArgs) { HandleUnhandledException(unhandledExceptionEventArgs.ExceptionObject as Exception); if (unhandledExceptionEventArgs.IsTerminating) { _logger.Info("Application is terminating due to an unhandled exception in a secondary thread."); } } private void HandleUnhandledException(Exception exception) { string message = "Unhandled exception"; try { AssemblyName assemblyName = System.Reflection.Assembly.GetExecutingAssembly().GetName(); message = string.Format("Unhandled exception in {0} v{1}", assemblyName.Name, assemblyName.Version); } catch (Exception exc) { _logger.ErrorException("Exception in unhandled exception handler", exc); } finally { _logger.ErrorException(message, exception); } } }
Revision: 21323
Updated Code
at September 29, 2010 08:32 by pckujawa
Updated Code
[app.config] <?xml version="1.0"?> <configuration> <configSections> </sectionGroup> <section name="nlog" type="NLog.Config.ConfigSectionHandler, NLog"/> </configSections> <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <variable name="appTitle" value="My Application"/> <variable name="logFilePath" value="${specialfolder:folder=Desktop:file=${appTitle} log.log}"/> <targets async="true"> <target name="file" xsi:type="File" fileName="${logFilePath}" layout="${longdate} ${level:upperCase=true}: ${message}${newline}(${stacktrace}) ${exception:format=ToString}"/> <target name="fileAsInfo" xsi:type="File" fileName="${logFilePath}" layout="${longdate} ${level:upperCase=true}: ${message} ${exception:format=ToString}"/> <target xsi:type="EventLog" name="eventLog" source="${appTitle}" layout="${message}${newline}${exception:format=tostring}"/> </targets> <targets> <target xsi:type="MessageBox" name="mbox" caption="Error" layout="An error has occurred. Please see the log file (${logFilePath}) or event log for more details."/> </targets> <rules> <logger name="*" level="Info" writeTo="fileAsInfo"/> <logger name="*" minlevel="Warn" writeTo="file"/> <logger name="*" minlevel="Warn" writeTo="eventLog"/> <logger name="*" minlevel="Error" writeTo="mbox"/> </rules> </nlog> </configuration> // WinForms App static class Program { private static Logger _logger = LogManager.GetCurrentClassLogger(); /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main() { Application.ThreadException += OnThreadException; AppDomain.CurrentDomain.UnhandledException += OnUnhandledException; Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); try { Application.Run(new PrimaryForm()); } catch (Exception exc) { LogFatalException(exc); throw; } } private static void LogFatalException(Exception exc) { string message = String.Format( "(Application version {0}) {1}", Application.ProductVersion, exc.Message); _logger.FatalException(message, exc); Application.Exit(); // Encouraged, but not required } private static void OnUnhandledException(object sender, UnhandledExceptionEventArgs e) { if (e.IsTerminating) { _logger.Info("Application is terminating due to an unhandled exception in a secondary thread."); } LogFatalException(e.ExceptionObject as Exception); } private static void OnThreadException(object sender, ThreadExceptionEventArgs e) { LogFatalException(e.Exception); } } // WPF App // App.xaml: <Application x:Class="UI.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" DispatcherUnhandledException="Application_DispatcherUnhandledException" Startup="Application_Startup" StartupUri="UserInterface.xaml"> <Application.Resources> </Application.Resources> </Application> // App.xaml.cs /// <summary> /// Interaction logic for App.xaml /// </summary> public partial class App : Application { private readonly Logger _logger = LogManager.GetLogger("App"); private void Application_Startup(object sender, StartupEventArgs e) { // UI Exceptions this.DispatcherUnhandledException += Application_DispatcherUnhandledException; // Thread exceptions AppDomain.CurrentDomain.UnhandledException += CurrentDomainOnUnhandledException; } private void Application_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e) { e.Handled = true; var exception = e.Exception; HandleUnhandledException(exception); } private void CurrentDomainOnUnhandledException(object sender, UnhandledExceptionEventArgs unhandledExceptionEventArgs) { HandleUnhandledException(unhandledExceptionEventArgs.ExceptionObject as Exception); if (unhandledExceptionEventArgs.IsTerminating) { _logger.Info("Application is terminating due to an unhandled exception in a secondary thread."); } } private void HandleUnhandledException(Exception exception) { string message = "Unhandled exception"; try { AssemblyName assemblyName = System.Reflection.Assembly.GetExecutingAssembly().GetName(); message = string.Format("Unhandled exception in {0} v{1}", assemblyName.Name, assemblyName.Version); } catch (Exception exc) { _logger.ErrorException("Exception in unhandled exception handler", exc); } finally { _logger.ErrorException(message, exception); } } }
Revision: 21322
Updated Code
at July 24, 2010 01:26 by pckujawa
Updated Code
[app.config] <?xml version="1.0"?> <configuration> <configSections> </sectionGroup> <section name="nlog" type="NLog.Config.ConfigSectionHandler, NLog"/> </configSections> <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <variable name="appTitle" value="My Application"/> <variable name="logFilePath" value="${specialfolder:folder=Desktop:file=${appTitle} log.log}"/> <targets async="true"> <target name="file" xsi:type="File" fileName="${logFilePath}" layout="${longdate} ${level:upperCase=true}: ${message}${newline}(${stacktrace}) ${exception:format=ToString}"/> <target name="fileAsInfo" xsi:type="File" fileName="${logFilePath}" layout="${longdate} ${level:upperCase=true}: ${message} ${exception:format=ToString}"/> <target xsi:type="EventLog" name="eventLog" source="${appTitle}" layout="${message}${newline}${exception:format=tostring}"/> </targets> <targets> <target xsi:type="MessageBox" name="mbox" caption="Error" layout="An error has occurred. Please see the log file (${logFilePath}) or event log for more details."/> </targets> <rules> <logger name="*" level="Info" writeTo="fileAsInfo"/> <logger name="*" minlevel="Warn" writeTo="file"/> <logger name="*" minlevel="Warn" writeTo="eventLog"/> <logger name="*" minlevel="Error" writeTo="mbox"/> </rules> </nlog> </configuration> // WinForms App static class Program { private static Logger _logger = LogManager.GetCurrentClassLogger(); /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main() { Application.ThreadException += OnThreadException; AppDomain.CurrentDomain.UnhandledException += OnUnhandledException; Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); try { Application.Run(new PrimaryForm()); } catch (Exception exc) { LogFatalException(exc); throw; } } private static void LogFatalException(Exception exc) { string message = String.Format( "(Application version {0}) {1}", Application.ProductVersion, exc.Message); _logger.FatalException(message, exc); Application.Exit(); // Encouraged, but not required } private static void OnUnhandledException(object sender, UnhandledExceptionEventArgs e) { if (e.IsTerminating) { _logger.Info("Application is terminating due to an unhandled exception in a secondary thread."); } LogFatalException(e.ExceptionObject as Exception); } private static void OnThreadException(object sender, ThreadExceptionEventArgs e) { LogFatalException(e.Exception); } } // WPF App // App.xaml: <Application x:Class="UI.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" DispatcherUnhandledException="Application_DispatcherUnhandledException" StartupUri="UserInterface.xaml"> <Application.Resources> </Application.Resources> </Application> // App.xaml.cs /// <summary> /// Interaction logic for App.xaml /// </summary> public partial class App : Application { private readonly Logger _logger = LogManager.GetLogger("App"); private void Application_Startup(object sender, StartupEventArgs e) { // UI Exceptions this.DispatcherUnhandledException += Application_DispatcherUnhandledException; // Thread exceptions AppDomain.CurrentDomain.UnhandledException += CurrentDomainOnUnhandledException; } private void Application_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e) { e.Handled = true; var exception = e.Exception; HandleUnhandledException(exception); } private void CurrentDomainOnUnhandledException(object sender, UnhandledExceptionEventArgs unhandledExceptionEventArgs) { HandleUnhandledException(unhandledExceptionEventArgs.ExceptionObject as Exception); if (unhandledExceptionEventArgs.IsTerminating) { _logger.Info("Application is terminating due to an unhandled exception in a secondary thread."); } } private void HandleUnhandledException(Exception exception) { string message = "Unhandled exception"; try { AssemblyName assemblyName = System.Reflection.Assembly.GetExecutingAssembly().GetName(); message = string.Format("Unhandled exception in {0} v{1}", assemblyName.Name, assemblyName.Version); } catch (Exception exc) { _logger.ErrorException("Exception in unhandled exception handler", exc); } finally { _logger.ErrorException(message, exception); } } }
Revision: 21321
Updated Code
at July 15, 2010 02:25 by pckujawa
Updated Code
[app.config] <?xml version="1.0"?> <configuration> <configSections> </sectionGroup> <section name="nlog" type="NLog.Config.ConfigSectionHandler, NLog"/> </configSections> <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <variable name="appTitle" value="My Application"/> <variable name="logFilePath" value="${specialfolder:folder=Desktop:file=${appTitle} log.log}"/> <targets async="true"> <target name="file" xsi:type="File" fileName="${logFilePath}" layout="${longdate} ${level:upperCase=true}: ${message}${newline}(${stacktrace}) ${exception:format=ToString}"/> <target name="fileAsInfo" xsi:type="File" fileName="${logFilePath}" layout="${longdate} ${level:upperCase=true}: ${message} ${exception:format=ToString}"/> <target xsi:type="EventLog" name="eventLog" source="${appTitle}" layout="${message}${newline}${exception:format=tostring}"/> </targets> <targets> <target xsi:type="MessageBox" name="mbox" caption="Error" layout="An error has occurred. Please see the log file (${logFilePath}) or event log for more details."/> </targets> <rules> <logger name="*" level="Info" writeTo="fileAsInfo"/> <logger name="*" minlevel="Warn" writeTo="file"/> <logger name="*" minlevel="Warn" writeTo="eventLog"/> <logger name="*" minlevel="Error" writeTo="mbox"/> </rules> </nlog> </configuration> // WinForms App static class Program { private static Logger _logger = LogManager.GetCurrentClassLogger(); /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main() { Application.ThreadException += OnThreadException; AppDomain.CurrentDomain.UnhandledException += OnUnhandledException; Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); try { Application.Run(new PrimaryForm()); } catch (Exception exc) { LogFatalException(exc); throw; } } private static void LogFatalException(Exception exc) { string message = String.Format( "(Application version {0}) {1}", Application.ProductVersion, exc.Message); _logger.FatalException(message, exc); Application.Exit(); // Encouraged, but not required } private static void OnUnhandledException(object sender, UnhandledExceptionEventArgs e) { LogFatalException(e.ExceptionObject as Exception); } private static void OnThreadException(object sender, ThreadExceptionEventArgs e) { LogFatalException(e.Exception); } } // WPF App // App.xaml: <Application x:Class="UI.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" DispatcherUnhandledException="Application_DispatcherUnhandledException" StartupUri="UserInterface.xaml"> <Application.Resources> </Application.Resources> </Application> // App.xaml.cs /// <summary> /// Interaction logic for App.xaml /// </summary> public partial class App : Application { private readonly Logger _logger = LogManager.GetLogger("App"); private void Application_Startup(object sender, StartupEventArgs e) { // UI Exceptions this.DispatcherUnhandledException += Application_DispatcherUnhandledException; // Thread exceptions AppDomain.CurrentDomain.UnhandledException += CurrentDomainOnUnhandledException; } private void Application_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e) { e.Handled = true; var exception = e.Exception; HandleUnhandledException(exception); } private void CurrentDomainOnUnhandledException(object sender, UnhandledExceptionEventArgs unhandledExceptionEventArgs) { HandleUnhandledException(unhandledExceptionEventArgs.ExceptionObject as Exception); if (unhandledExceptionEventArgs.IsTerminating) { _logger.Info("Application is terminating due to an unhandled exception in a secondary thread."); } } private void HandleUnhandledException(Exception exception) { string message = "Unhandled exception"; try { AssemblyName assemblyName = System.Reflection.Assembly.GetExecutingAssembly().GetName(); message = string.Format("Unhandled exception in {0} v{1}", assemblyName.Name, assemblyName.Version); } catch (Exception exc) { _logger.ErrorException("Exception in unhandled exception handler", exc); } finally { _logger.ErrorException(message, exception); } } }
Revision: 21320
Updated Code
at July 13, 2010 03:10 by pckujawa
Updated Code
[app.config] <?xml version="1.0"?> <configuration> <configSections> </sectionGroup> <section name="nlog" type="NLog.Config.ConfigSectionHandler, NLog"/> </configSections> <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <variable name="appTitle" value="My Application"/> <variable name="logFilePath" value="${specialfolder:folder=Desktop:file=${appTitle} log.log}"/> <targets async="true"> <target name="file" xsi:type="File" fileName="${logFilePath}" layout="${longdate} ${level:upperCase=true}: ${message}${newline}(${stacktrace}) ${exception:format=ToString}"/> <target name="fileAsInfo" xsi:type="File" fileName="${logFilePath}" layout="${longdate} ${level:upperCase=true}: ${message} ${exception:format=ToString}"/> <target xsi:type="EventLog" name="eventLog" source="${appTitle}" layout="${message}${newline}${exception:format=tostring}"/> </targets> <targets> <target xsi:type="MessageBox" name="mbox" caption="Error" layout="An error has occurred. Please see the log file (${logFilePath}) or event log for more details."/> </targets> <rules> <logger name="*" level="Info" writeTo="fileAsInfo"/> <logger name="*" minlevel="Warn" writeTo="file"/> <logger name="*" minlevel="Warn" writeTo="eventLog"/> <logger name="*" minlevel="Error" writeTo="mbox"/> </rules> </nlog> </configuration> static class Program { private static Logger _logger = LogManager.GetCurrentClassLogger(); /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main() { Application.ThreadException += OnThreadException; AppDomain.CurrentDomain.UnhandledException += OnUnhandledException; Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); try { Application.Run(new PrimaryForm()); } catch (Exception exc) { LogFatalException(exc); throw; } } private static void LogFatalException(Exception exc) { string message = String.Format( "(Application version {0}) {1}", Application.ProductVersion, exc.Message); _logger.FatalException(message, exc); Application.Exit(); // Encouraged, but not required } private static void OnUnhandledException(object sender, UnhandledExceptionEventArgs e) { LogFatalException(e.ExceptionObject as Exception); } private static void OnThreadException(object sender, ThreadExceptionEventArgs e) { LogFatalException(e.Exception); } }
Revision: 21319
Updated Code
at February 19, 2010 15:36 by pckujawa
Updated Code
[app.config] <?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="nlog" type="NLog.Config.ConfigSectionHandler, NLog"/> </configSections> <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <targets> <target name="file" xsi:type="File" fileName="${specialfolder:folder=Desktop}/MyApp log.log" layout="${longdate} ${level:upperCase=true}: ${message}${newline}${stacktrace} ${exception:format=ToString}"/> <target xsi:type="EventLog" name="eventLog" source="MyApp" layout="${stacktrace}${newline}${message}${newline}${exception:format=tostring}"/> <target xsi:type="MessageBox" name="mbox" caption="Error" layout="${message}${newline}${stacktrace}${newline}${exception:format=ToString}" /> <!--<target xsi:type="MessageBox" name="mbox" caption="Error" layout="An error has occurred. If necessary, please contact Someone at [email protected]. (You can click on this window and press Ctrl+C to copy this text.)${newline}${newline}${message}" />--> </targets> <rules> <logger name="*" minlevel="Debug" writeTo="file" /> <logger name="*" minlevel="Debug" writeTo="eventLog" /> <logger name="*" minlevel="Error" writeTo="mbox" /> </rules> </nlog> </configuration> static class Program { private static Logger _logger = LogManager.GetCurrentClassLogger(); /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main() { Application.ThreadException += OnThreadException; AppDomain.CurrentDomain.UnhandledException += OnUnhandledException; Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); try { Application.Run(new PrimaryForm()); } catch (Exception exc) { LogFatalException(exc); throw; } } private static void LogFatalException(Exception exc) { _logger.FatalException(string.Empty, exc); } private static void OnUnhandledException(object sender, UnhandledExceptionEventArgs e) { LogFatalException(e.ExceptionObject as Exception); } private static void OnThreadException(object sender, ThreadExceptionEventArgs e) { LogFatalException(e.Exception); } }
Revision: 21318
Updated Code
at January 11, 2010 17:02 by pckujawa
Updated Code
[app.config] <?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="nlog" type="NLog.Config.ConfigSectionHandler, NLog"/> </configSections> <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <targets> <target name="file" xsi:type="File" fileName="${specialfolder:folder=Desktop}/MyApp log.log" layout="${longdate} ${level:upperCase=true}: ${message}${newline}${stacktrace} ${exception:format=ToString}"/> <target xsi:type="EventLog" name="eventLog" source="MyApp" layout="${stacktrace}${newline}${message}${newline}${exception:format=tostring}"/> <target xsi:type="MessageBox" name="mbox" caption="Error" layout="${message}${newline}${stacktrace}${newline}${exception:format=ToString}" /> <!--<target xsi:type="MessageBox" name="mbox" caption="Error" layout="An error has occurred. If necessary, please contact Someone at [email protected]. (You can click on this window and press Ctrl+C to copy this text.)${newline}${newline}${message}" />--> </targets> <rules> <logger name="*" minlevel="Debug" writeTo="file" /> <logger name="*" minlevel="Debug" writeTo="eventLog" /> <logger name="*" minlevel="Error" writeTo="mbox" /> </rules> </nlog> </configuration> static class Program { private static Logger _logger = LogManager.GetCurrentClassLogger(); /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main() { Application.ThreadException += OnThreadException; AppDomain.CurrentDomain.UnhandledException += OnUnhandledException; Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); try { Application.Run(new PrimaryForm()); } catch (Exception exc) { LogFatalException(exc); } } private static void LogFatalException(Exception exc) { _logger.FatalException(string.Empty, exc); } private static void OnUnhandledException(object sender, UnhandledExceptionEventArgs e) { LogFatalException(e.ExceptionObject as Exception); } private static void OnThreadException(object sender, ThreadExceptionEventArgs e) { LogFatalException(e.Exception); } }
Revision: 21317
Updated Code
at January 11, 2010 16:58 by pckujawa
Updated Code
[app.config] <?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="nlog" type="NLog.Config.ConfigSectionHandler, NLog"/> </configSections> <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <targets> <target name="file" xsi:type="File" fileName="${specialfolder:folder=Desktop}/MyApp log.log" layout="${longdate} ${level:upperCase=true}: ${message}${newline}${stacktrace} ${exception:format=ToString}"/> <target xsi:type="EventLog" name="eventLog" source="MyApp" layout="${stacktrace}${newline}${message}${newline}${exception:format=tostring}"/> <!--Debugging: "${message}${newline}${stacktrace}${newline}${exception:format=ToString}"--> <target xsi:type="MessageBox" name="mbox" caption="Error" layout="An error has occurred. If necessary, please contact Someone at [email protected]. (You can click on this window and press Ctrl+C to copy this text.)${newline}${newline}${message}" /> </targets> <rules> <logger name="*" minlevel="Debug" writeTo="file" /> <logger name="*" minlevel="Debug" writeTo="eventLog" /> <logger name="*" minlevel="Error" writeTo="mbox" /> </rules> </nlog> </configuration> static class Program { private static Logger _logger = LogManager.GetCurrentClassLogger(); /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main() { Application.ThreadException += OnThreadException; AppDomain.CurrentDomain.UnhandledException += OnUnhandledException; Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); try { Application.Run(new PrimaryForm()); } catch (Exception exc) { LogFatalException(exc); } } private static void LogFatalException(Exception exc) { #if DEBUG _logger.FatalException(exc.ToString(), exc); #else _logger.FatalException(string.Empty, exc); #endif } private static void OnUnhandledException(object sender, UnhandledExceptionEventArgs e) { LogFatalException(e.ExceptionObject as Exception); } private static void OnThreadException(object sender, ThreadExceptionEventArgs e) { LogFatalException(e.Exception); } }
Revision: 21316
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at December 10, 2009 12:33 by pckujawa
Initial Code
[app.config] <?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" > <section name="HawkConfigGUI.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" /> </sectionGroup> <section name="nlog" type="NLog.Config.ConfigSectionHandler, NLog"/> </configSections> <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <targets> <target name="file" xsi:type="File" fileName="${specialfolder:folder=Desktop}/MyApp log.log" layout="${longdate} ${level:upperCase=true}: ${message}${newline}${stacktrace} ${exception:format=ToString}"/> <target xsi:type="EventLog" name="eventLog" source="MyApp" layout="${stacktrace}${newline}${message}${newline}${exception:format=tostring}"/> <!--Debugging: "${message}${newline}${stacktrace}${newline}${exception:format=ToString}"--> <target xsi:type="MessageBox" name="mbox" caption="Error" layout="An error has occurred. If necessary, please contact Someone at [email protected]. (You can click on this window and press Ctrl+C to copy this text.)${newline}${newline}${message}" /> </targets> <rules> <logger name="*" minlevel="Debug" writeTo="file" /> <logger name="*" minlevel="Debug" writeTo="eventLog" /> <logger name="*" minlevel="Error" writeTo="mbox" /> </rules> </nlog> <userSettings> <HawkConfigGUI.Properties.Settings> <setting name="FpgaFilePath" serializeAs="String"> <value /> </setting> </HawkConfigGUI.Properties.Settings> </userSettings> </configuration> static class Program { /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main() { Application.ThreadException += OnThreadException; AppDomain.CurrentDomain.UnhandledException += OnUnhandledException; Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); try { Application.Run(new PrimaryForm()); } catch (Exception exc) { LogFatalException(exc); } } private static void LogFatalException(Exception exc) { #if DEBUG _logger.FatalException(exc.ToString(), exc); #else _logger.FatalException(string.Empty, exc); #endif } private static void OnUnhandledException(object sender, UnhandledExceptionEventArgs e) { LogFatalException(e.ExceptionObject as Exception); } private static void OnThreadException(object sender, ThreadExceptionEventArgs e) { LogFatalException(e.Exception); } private static Logger _logger = LogManager.GetCurrentClassLogger(); }
Initial URL
http://nlog-project.org
Initial Description
[NLog](http://nlog-project.org) is an awesome, simple logging solution for .NET. In the code below, there is an example entry into app.config (there are other methods for doing NLog config files, but I have found that this one works with ClickOnce deployments). There is also a snippet for catching and logging all exceptions in a WinForms application and one for a WPF application. I also have a [question on stackoverflow](http://stackoverflow.com/questions/4091606/most-useful-nlog-configurations) with a lot of useful NLog configuration answers.
Initial Title
Logging in .NET with NLog (default config file, catch all exceptions and route to logger, ...)
Initial Tags
Initial Language
C#