微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – Microsoft Owin Logging – Web Api 2 – 如何创建记录器?

我正在尝试使用Web Api 2和Owin向我的应用程序添加日志记录,所以我开始使用Microsoft Owin Logging,它需要一个已经实现的ILogger和ILoggerFactory,当我需要在STARTUP方法中记录任何内容时它很有用任何Owin Middleware组件.

例如,当我在启动方法中时,我可以使用以下命令创建记录器:

public void Configuration(IAppBuilder app)
    {
        // Creates configuration
        var configuration = new HttpConfiguration();

        // Configure WebApi Settings
        WebApiConfig.Register(configuration);

        app.SetLoggerFactory(new OwinLog4NetLoggerFactory("Default"));

        var logger = app.CreateLogger<Startup>();
        logger.Writeinformation("test log");

        // Enabled WebApi in OWIN
        app.UseWebApi(configuration);
    }

其中“OwinLog4NetLoggerFactory”是我的自定义ILoggerFactory实现.

到目前为止,这么好……但是…当我在实际的web api动作方法中时,如何创建记录器?…我尝试访问Request.GetowinEnvironment()并且记录器工厂不在字典中.

例如:

public class AccountController : ApiController
{
    public int Get(int id)
    {
        // Create logger here

        return id + 1;
    }
}

我知道我可以创建一个静态类,引用Logger Factory甚至是注入来将记录器添加到api控制器,但这对于应该存在的东西来说似乎太复杂了.

任何想法,将不胜感激.

解决方法

我建议编写中间件,以便您可以处理控制器外部的日志记录:
public class LoggingMiddleware : OwinMiddleware
{
    public LoggingMiddleware(OwinMiddleware next)
        : base(next)
    {
    }

    public override async Task Invoke(IOwinContext context)
    {
            //handle request logging

            await Next.Invoke(context); 

            //handle response logging
    }

}

然后在Startup类中:

public class Startup
{
    // ReSharper disable once UnusedMember.Global
    public void Configuration(IAppBuilder appBuilder)
    {
        HttpConfiguration config = new HttpConfiguration();

        config.MapHttpAttributeRoutes();
        appBuilder.Use<LoggingMiddleware>();
        appBuilder.UseWebApi(config);
    }
}

然后请求进入,点击LoggingMiddleware中的请求日志代码,点击控制器代码,然后在返回途中将响应记录在LoggingMiddleware上.

但是,如果您只想将对象从中间件发送到控制器,则可以使用context.Set(“loggingObject”,loggingObject);在中间件然后
var loggingObject = Request.GetowinContext().Get< LoggerClass>(“loggingObject”);在控制器中.

编辑:修正了}

原文地址:https://www.jb51.cc/csharp/99794.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐