zoukankan      html  css  js  c++  java
  • .NET跨平台之旅:增加文件日志功能遇到的挫折团队

    在将我们的ASP.NET 5示例站点(about.cnblogs.com)升级至ASP.NET 5 RC1的时候,我们增加了控制台日志功能。

    在ASP.NET 5添加日志功能很简单,只需在project.json中添加Microsoft.Extensions.Logging.Console的引用:

    "dependencies":{
        "Microsoft.Extensions.Logging.Console": "1.0.0-*"
    }

    并且在 Startup.cs 中添加 loggerFactory.AddConsole() :

    using Microsoft.Extensions.Logging;
    
    namespace CNBlogs.AboutUs.Web
    {
        public class Startup
        {
            public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory)
            {
                loggerFactory.AddConsole();
            }
        }
    }

    然后在控制台就能看到站点运行时的日志信息:

    但控制台日志查看与查找日志信息都不方便,文件日志才是解决之道。所以打算增加文件日志功能,那在ASP.NET 5中如何实现呢?

    首先要选择一个日志组件,我们开始选用的是 Serilog.Framework.Logging

    先在 project.json 中添加  Serilog.Framework.Logging 的引用:

    "dependencies":{
        "Serilog.Framework.Logging":"1.0.0-*"
    }

    然后运行dnu restore命令安装nuget包包。

    接着在 Startup.cs 中添加如下的代码:

    using System.IO;
    using Serilog;
    
    public class Startup {
        public Startup(IApplicationEnvironment appEnv) {
            Log.Logger = new LoggerConfiguration()
                .MinimumLevel.Debug()
                .WriteTo.RollingFile(Path.Combine(
                    appEnv.ApplicationBasePath,"logs/log-{Date}.txt"))
                .CreateLogger();
        }
    
        public void Configure(IApplicationBuilder app,
                                    ILoggerFactory loggerFactory) {
            loggerFactory.AddSerilog();
        }
    }

    用 dnx kestrel 运行时却出现了下面的错误:

    DNXCore,Version=v5.0 error CS1061: 'LoggerSinkConfiguration' does not contain a definition for 'RollingFile' and no extension method 'RollingFile' accepting a first argument of type 'LoggerSinkConfiguration' could be found (are you missing a using directive or an assembly reference?)

    而将 .WriteTo.RollingFile 改为 .WriteTo.TextWriter(Console.Out) 使用控制台则能正常显示日志信息。

    开始以为是缺少了某个命名空间的引用,后来发现是因为 serilog 的 .RollingFile 目前还不支持 .NET Core。

    只能寻找其它的日志组件。

    准备改用NLog,结果发现NLog的文件日志也不支持 .NET Core。

    log4net就更别谈了,它还没开始支持.NET Core。

    于是,不得不面对这样的现实:目前在Linux上跑ASP.NET 5站点,竟然没有可用的将日志信息记录到文件的日志组件。

    所以,.NET的跨平台不仅仅是.NET Core的跨平台,而且整个.NET生态的跨平台,很多组件都需要针对.NET Core进行改写,任重而道远。

  • 相关阅读:
    变分自编码器(Variational Autoencoder, VAE)通俗教程
    神经网络图灵机(Neural Turing Machines, NTM)
    【Java设计模式】单例模式
    SupportV7包中 SwipeRefreshLayout 修改下拉控件的距离
    eclipse项目导入androidstudio
    LiveWriter Test
    【Android学习】XML文本的三种解析方式(通过搭建本地的Web项目提供XML文件)
    【百度地图学习-一】初始化以及TextOverlay
    【Android学习】四种布局方式
    【Android学习】数据传递三种方式
  • 原文地址:https://www.cnblogs.com/cmt/p/4983913.html
Copyright © 2011-2022 走看看