.NET跨平台之旅:增加文件日志功能遇到的挫折
2015-11-21 20:26
483 查看
在将我们的ASP.NET 5示例站点(about.cnblogs.com)升级至ASP.NET 5 RC1的时候,我们增加了控制台日志功能。
在ASP.NET 5添加日志功能很简单,只需在project.json中添加Microsoft.Extensions.Logging.Console的引用:
并且在 Startup.cs 中添加 loggerFactory.AddConsole() :
然后在控制台就能看到站点运行时的日志信息:
但控制台日志查看与查找日志信息都不方便,文件日志才是解决之道。所以打算增加文件日志功能,那在ASP.NET 5中如何实现呢?
首先要选择一个日志组件,我们开始选用的是 Serilog.Framework.Logging。
先在 project.json 中添加 Serilog.Framework.Logging 的引用:
然后运行dnu restore命令安装nuget包包。
接着在 Startup.cs 中添加如下的代码:
用 dnx kestrel 运行时却出现了下面的错误:
而将 .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进行改写,任重而道远。
在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进行改写,任重而道远。
相关文章推荐
- Netcat:TCP/IP瑞士军刀
- 多线程
- MySQL批量插入,,SQL插入性能优化
- 室内装修风水 之 堂前聚水法 - oralusa.com
- 反射
- Android中的Handler的用法和用Handler进行更新版本
- nginx proxy_pass 后面的url 加与不加/的区别
- Unix环境编程学习笔记-----编程实例---- the normal exit1
- 在VS中让JS文件显示智能感知的一个犀利方法
- php 上传文件视频显示未找到文件错误
- 集合
- JAVA Hibernate工作原理及为什么要用(hibernate 简介)
- 大话设计模式之代理模式
- C语言重要常用知识点梳理
- <精华帖>在Struts2中使用ValueStack、ActionContext、ServletContext、request、session等 .
- 四种常见的 POST 提交数据方式
- Python抓取糗事百科网页信息以及源码下载
- ubuntu下mysql的安装和启动
- nasm BIOS绘制直线
- 更新Xamarin.Forms至2.0版本