Skip to content

ASP.NET WebApi

Catalin Gavan edited this page Nov 23, 2021 · 6 revisions

These steps describe how to install and configure KissLog for a ASP.NET WebApi application.

A full working example can be found here.

By following the install instructions, you will:

  • configure KissLog to capture and log all the unhandled exceptions
  • configure KissLog to capture all the HTTP properties (User-Agent, QueryString, FormData, Headers, StatusCode, etc.)
  • register LocalTextFileListener listener which will save the captured data to logs folder

Instructions

  1. Install NuGet Package
PM> Install-Package KissLog.AspNet.WebApi
  1. Update Global.asax
using KissLog;
using KissLog.AspNet.Mvc;
using KissLog.AspNet.Web;
using KissLog.Listeners.FileListener;

namespace AspNet.WebApi
{
    public class WebApiApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            GlobalConfiguration.Configure(WebApiConfig.Register);

            ConfigureKissLog();
        }

        protected void Application_Error(object sender, EventArgs e)
        {
            Exception exception = Server.GetLastError();
            if (exception != null)
            {
                var logger = Logger.Factory.Get();
                logger.Error(exception);

                if (logger.AutoFlush() == false)
                {
                    Logger.NotifyListeners(logger);
                }
            }
        }

        private void ConfigureKissLog()
        {
            KissLogConfiguration.Listeners
                .Add(new LocalTextFileListener("logs", FlushTrigger.OnFlush));
        }

        // Register HttpModule
        public static KissLogHttpModule KissLogHttpModule = new KissLogHttpModule();

        public override void Init()
        {
            base.Init();

            KissLogHttpModule.Init(this);
        }
    }
}
  1. Update WebApiConfig.cs
using KissLog.AspNet.WebApi;
using System.Web.Http;
using System.Web.Http.ExceptionHandling;

namespace AspNet.WebApi
{
    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            // Add KissLog Exception logger
            config.Services.Replace(typeof(IExceptionLogger), new KissLogExceptionLogger());

            // Add KissLog exception filter
            config.Filters.Add(new KissLogWebApiExceptionFilterAttribute());

            // Web API routes
            config.MapHttpAttributeRoutes();

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
        }
    }
}

Write logs

Logs can be written using KissLog.IKLogger interface.

To receive the logger instance, use Logger.Factory.Get() factory method.

For web applications, Logger.Factory.Get() will return the same logger instance shared across the HTTP request.

using KissLog;
using System.Web.Http;

namespace AspNet.WebApi.Controllers
{
    public class ValuesController : Controller
    {
        private readonly IKLogger _logger;
        public ValuesController()
        {
            _logger = Logger.Factory.Get();
        }

        public IEnumerable<string> Get()
        {
            _logger.Trace("Trace message");

            return new string[] { "value1", "value2" };
        }
    }
}