博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
.NET跨平台之旅:在Linux上将ASP.NET 5运行日志写入文件
阅读量:4984 次
发布时间:2019-06-12

本文共 4084 字,大约阅读时间需要 13 分钟。

在前一篇博文()中,我们遇到了这样一个问题:虽然有一些.NET日志组件(比如Serilog, NLog)已经开始支持.NET Core,但目前只支持控制台输出日志,不支持将日志写入文件;这就意味着我们在Linux上运行的无法将日志写入文件,给排查问题造成很大的麻烦,比如现在示例站点经常挂掉的问题。

面对这个问题我们没有善罢甘休,不想因为这个问题影响.NET跨平台之旅的步伐,我们要解决它,而且希望先用简单的方法解决,不想从头实现一个日志组件。

在上一篇博文发布后,一位同事给出了这样一个提示:既然Serilog记录日志时是直接将日志信息写入控制台的输出流( .WriteTo.TextWriter(Console.Out) ),那么应该也可以用它写入文件的写入流,都是Stream嘛。

好主意!可行!但有一个前提是corefx中的文件操作类库要支持Linux,也就是实现了跨平台。

那.NET Core中的文件操作类库是否已经跨平台了呢?我们的文件日志问题是否可以通过它解决呢?码一下,就会知道。

于是将Startup.cs中的 .WriteTo.TextWriter(Console.Out) 改为下面的代码:

.WriteTo.TextWriter(new StreamWriter(logFilePath))

运行 dnx kestrel 命令却出现下面的错误:

DNXCore,Version=v5.0 error CS1503: Argument 1: cannot convert from 'string' to 'System.IO.Stream'

出现这个错误是因为corefx中实现的StreamWriter的构造函数不支持文件路径作为参数,.NET Framework中是支持的。所以需要修改一下代码,将FileStream类型的参数传递给StreamWriter的构造函数,代码如下:

.WriteTo.TextWriter(new StreamWriter(new FileStream(logFilePath, FileMode.OpenOrCreate)))

这样改了之后,站点成功启动。

Logging to /data/git/AboutUs/logs/log.txtHosting environment: ProductionNow listening on: http://*:8001Application started. Press Ctrl+C to shut down.

然后用浏览器访问一下站点,并用tail命令看一下日志是否成功写入到了日志文件中?

# tail log.txt11/22/2015 14:08:58 +08:00 [Debug] The view '"Intro"' was found.11/22/2015 14:08:58 +08:00 [Information] Executing ViewResult, running view at path "/Views/About/Intro.cshtml".11/22/2015 14:08:58 +08:00 [Information] User profile is available. Using '"/root/.aspnet/DataProtection-Keys"' as key repository; keys will not be encrypted at rest.11/22/2015 14:09:01 +08:00 [Debug] Data Source=xxx11/22/2015 14:09:03 +08:00 [Information] Microsoft.Data.Entity.Storage.DbCommandLogData11/22/2015 14:09:03 +08:00 [Debug] Data Source=xxx11/22/2015 14:09:03 +08:00 [Information] Executed action "CNBlogs.AboutUs.Web.AboutController.Intro" in 0.6192ms11/22/2015 14:09:03 +08:00 [Information] Request finished in 0.6196ms 200 text/html; charset=utf-811/22/2015 14:09:16 +08:00 [Error] Connection id "4" disconnected.11/22/2015 14:09:16 +08:00 [Error] Connection id "3" disconnected.

成功!在Linux上记录ASP.NET 5站点的运行日志到文件的问题就这么临时解决了。

顺便分享一下目前Startup.cs中的最新代码:

using System;using System.IO;using System.Linq;using Microsoft.AspNet.Builder;using Microsoft.Extensions.DependencyInjection;using Microsoft.Data.Entity;using CNBlogs.AboutUs.Data;using Microsoft.Dnx.Runtime;using Microsoft.Extensions.PlatformAbstractions;using Microsoft.Extensions.Configuration;using System.Data.SqlClient;using Microsoft.Extensions.Logging;using Serilog;namespace CNBlogs.AboutUs.Web{    public class Startup    {        public Startup(IApplicationEnvironment appEnv)        {            IConfigurationBuilder builder = new ConfigurationBuilder()                .SetBasePath(appEnv.ApplicationBasePath)                .AddJsonFile("config.json", false);            Configuration = builder.Build();            var logFilePath = Path.Combine(appEnv.ApplicationBasePath,"logs/log.txt");            Console.WriteLine("Logging to "+ logFilePath);            Log.Logger = new LoggerConfiguration()                    .MinimumLevel.Debug()                    .WriteTo.TextWriter(new StreamWriter(                        new FileStream(logFilePath, FileMode.OpenOrCreate)))                    .CreateLogger();            }        public IConfiguration Configuration { get; set; }        public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory)        {            loggerFactory                .AddSerilog()                .AddConsole();            app.UseDeveloperExceptionPage();            app.UseMvcWithDefaultRoute();                        app.UseStaticFiles();                        app.UseRuntimeInfoPage();        }        public void ConfigureServices(IServiceCollection services)        {            services.AddMvc();            services.AddEntityFramework()                .AddSqlServer()                .AddDbContext
(options => { options.UseSqlServer(Configuration["data:ConnectionString"]); }); services.AddTransient
(); } }}

转载于:https://www.cnblogs.com/cmt/p/4985777.html

你可能感兴趣的文章
Hash_Map 原理
查看>>
mysql函数大全pdf
查看>>
Asp.net 2.0在Windows 2003 Server 上配置Microsoft Excel、Microsoft Word应用程序权限时 error: 8000401a 的解决方法!...
查看>>
SDUT 识别浮点常量问题 编译原理作业
查看>>
BZOJ 2819: Nim dfs序维护树状数组,倍增
查看>>
WinRAR(5.21)-0day漏洞-始末分析
查看>>
终端检测HTTPS服务端
查看>>
证件照换底色
查看>>
Candies
查看>>
EAS部署:linux 下安装EAS后启动不了服务
查看>>
[BZOJ3244][NOI2013] 树的计数
查看>>
[web]python3一句话开启http服务
查看>>
基于 控制台 简易 学生信息管理系统 (增、删、改)
查看>>
Cannot add foreign key constraint 错误解决办法
查看>>
To-Read List
查看>>
PHP漏洞全解(三)-客户端脚本植入
查看>>
重载类型运算符
查看>>
poj2676
查看>>
工作时候需要学习的东西
查看>>
Win8安装教程!笔记本用U盘安装Win8只需三步
查看>>