NLog configured to automatically log all exceptions?

前端 未结 2 884
我在风中等你
我在风中等你 2021-02-05 13:09

Is there a way to configure NLog to automatically log all exceptions my application can send? Currently I am going to all TRY/CATCH blocks and manually adding logging in the CAT

相关标签:
2条回答
  • 2021-02-05 13:31

    For WebApi application you can do this in Global.asax.cs like that

    protected void Application_Error()
    {
        Exception lastException = Server.GetLastError();
        NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();
        logger.Fatal(lastException);
    }
    

    MSDN resource

    0 讨论(0)
  • 2021-02-05 13:34

    As far as I know, there is no way to confineNLog to log all exceptions.

    If all you want is to log unhandled exceptions, you could add an "UnhandledException Handler" to the AppDomain when initializing your application. Note that under some circumstances it may not be possible to log the error (e.g. in case of an OutOfMemory exception or something terrible).

    Note that the AppDomain also has a FirstChanceException event you can subscribe to, but this would mean that you get notified about every exception that occurs (and may be handled by the usercode) - in this are many.

    AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(AppDomain_CurrentDomain_UnhandledException);
    
    static void AppDomain_CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
    {
        // use logger here to log the events exception object
        // before the application quits
    }
    

    Note that this will only allow you to log exceptions that cause your application to crash - you cannot prevent it to crash (therefore the name: unhandled exception).

    Another option would be to use Aspect Oriented Programming (AOP) - and introduce a Logging aspect after each method call, in case of an error. If your application uses a Layered architecture, this may be relatively easy to do (e.g. add an aspect to all calls of your business logic layer...).

    You may find a framework like PostSharp or Spring.Net useful (usually their websites provide some easy examples for that).

    0 讨论(0)
提交回复
热议问题