zoukankan      html  css  js  c++  java
  • 在Asp.Net MVC 中配置 Serilog

    Serilog 是一种非常简便记录log 的处理方式,使用Serilog可以生成本地的text文件, 也可以通过 Seq 来在Web界面中查看具体的log内容。

    接下来就简单的介绍一下在Asp.Net MVC中如何配置是Serilog 生效:

    1):下载并且安装Seq,具体的下载URL 为 【http://getseq.net/Download】,安装到默认的路径之后,实际上时候启动了一个Win Service,并且监听的端口号默认为 5341.

    安装的最后一步截图如下:

    然后我们到Service列表中可以找到对应的Service, 如下图所示:

     

    2):创建一个Asp.Net MVC 5的一个工程, 然后通过 Nuget 下载并且安装 对应的 package,如下图所示

      

    3):在 App_Start 文件夹下创建一个 class 叫做 SerilogConfig.cs , 代码如下所示

    using Serilog;
    using SerilogWeb.Classic.Enrichers;
    using System;
    using System.Collections.Generic;
    using System.Configuration;
    using System.IO;
    using System.Linq;
    using System.Reflection;
    using System.Web;
    using System.Web.Hosting;
    
    namespace TestSerilog.App_Start
    {
        public class SerilogConfig
        {
            public static ILogger CreateLogger()
            {
                var logpath = HostingEnvironment.MapPath("~");
                var config = new LoggerConfiguration()
                    .Enrich.WithMachineName()
                    .Enrich.WithProperty("ApplicationName", AssemblyTitle)
                    .Enrich.With<HttpRequestClientHostIPEnricher>()
                    .Enrich.With<HttpRequestRawUrlEnricher>()
                    .Enrich.With<HttpRequestIdEnricher>()
                    .Enrich.With<UserNameEnricher>()
                    //.Enrich.WithProperty("RuntimeVersion", Environment.Version)
                    // this ensures that calls to LogContext.PushProperty will cause the logger to be enriched
                    .Enrich.FromLogContext()
                    .MinimumLevel.Verbose()
                    .WriteTo.Seq(ConfigurationManager.AppSettings["SeqServer"], apiKey: ConfigurationManager.AppSettings["SeqApiKey"])
                    .WriteTo.RollingFile(Path.Combine(logpath, "Logs\EricSunTestLog-{Date}.log"), retainedFileCountLimit: null, outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level}] {SourceContext} - ({MachineName}|{HttpRequestId}|{UserName}) {Message}{NewLine}{Exception}");
                return config.CreateLogger();
            }
    
            public static string AssemblyTitle
            {
                get
                {
                    var attributes = typeof(SerilogConfig).Assembly.GetCustomAttributes(typeof(AssemblyTitleAttribute), false);
                    if (attributes.Length > 0)
                    {
                        var titleAttribute = (AssemblyTitleAttribute)attributes[0];
                        if (titleAttribute.Title.Length > 0)
                            return titleAttribute.Title;
                    }
                    return Path.GetFileNameWithoutExtension(Assembly.GetEntryAssembly().CodeBase);
                }
            }
        }
    }

    4):在 Web.config 中添加补全所用到的 appSettings

      <appSettings>
        <add key="SeqServer" value="http://localhost:5341/" />
        <add key="SeqApiKey" value="" />
      </appSettings>

    5):在 Startup.cs 中添加如下代码完成注册

    using Microsoft.Owin;
    using Owin;
    using Serilog;
    using TestSerilog.App_Start;
    
    [assembly: OwinStartupAttribute(typeof(TestSerilog.Startup))]
    namespace TestSerilog
    {
        public partial class Startup
        {
            public void Configuration(IAppBuilder app)
            {
                ConfigureAuth(app);
                Log.Logger = SerilogConfig.CreateLogger();
            }
        }
    }

    6): 在 HomeController 中的 Index Action 中添加如下代码,测试对应的Debug,Information,Warning 和 Error 方法

    using Serilog;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    
    namespace TestSerilog.Controllers
    {
        public class HomeController : Controller
        {
            private ILogger _logger = Log.Logger; 
    
            public ActionResult Index()
            {
                _logger.Debug("This is index -- debug.");
                _logger.Information("This is index -- information.");
                _logger.Warning("This is index -- warning.");
                _logger.Error("This is index -- error.");
                return View();
            }
    
            public ActionResult About()
            {
                ViewBag.Message = "Your application description page.";
    
                return View();
            }
    
            public ActionResult Contact()
            {
                ViewBag.Message = "Your contact page.";
    
                return View();
            }
        }
    }

    7):直接 VS 2015 运行之后, 再去 http://localhost:5341/#/events 中观察对应的 log 记录, 如下截图

    这样简单的配置 Serilog 就完成了, 同时我们也可以到 C:ProgramDataSeqLogs 目录中找到 Log 的文本文件。

    更多内容请看如下链接:

    http://serilog.net/

    https://github.com/serilog/serilog 

  • 相关阅读:
    对文本抽取词袋模型特征
    jieba分词
    家用电器用户行为分析与事件识别
    Linux系统调用:创建和终止进程
    Linux系统调用:获取进程PID
    使用函数指针解决函数重载二义性调用问题
    C++ string基本操作
    有界深度优先搜索-八数码问题
    数据传送指令
    x86-64数据格式、通用寄存器与操作数格式
  • 原文地址:https://www.cnblogs.com/mingmingruyuedlut/p/5133349.html
Copyright © 2011-2022 走看看