博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
.Net Core项目添加日志功能
阅读量:5037 次
发布时间:2019-06-12

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

一、微软内置的日志组件

  在.Net Core中使用模板新建的Web Api项目时,会自动加入日志功能。只需要在控制器中注入ILogger就可以了。命名空间为:Microsoft.Extensions.Logging。

会发现只有Error被打印到了控制台,Trace没有被打印。那是因为在appsetting.json中配置了Logging>Console>Default的等级为Debug,日志的等级大于等于Debug才会输出到控制台。在这里说一下LogLevel:Trace<Debug<Information<Warning<Error<Critical<None。

  当打开appsettings.development.json文件你会发现跟appsettings.json配置不同。如下:

{  "Logging": {    "IncludeScopes": false,    "LogLevel": {      "Default": "Debug",      "System": "Information",      "Microsoft": "Information"    }  }}

 

 例如:

"System": "Information" 表示命名空间以System开头的类中且日志等级大于等于Information才会输出到控制台。

"Default": "Debug" 表示除以System和Microsoft开头的命名空间日志等级大约等于Debug才会输出到控制台。

这里说明一下到底是在什么时候,读取了appsettings.json中的配置了了? 其实是在Program中 WebHost.CreateDefaultBuilder(arge)。打开发现

当然我们可以不用微软提供的默认配置

public class Program    {        public static void Main(string[] args)        {            //指定配置文件路径            var configBuilder = new ConfigurationBuilder()                                 .SetBasePath(Directory.GetCurrentDirectory())                                .AddJsonFile($"appsettings.json", true, true)                                .AddJsonFile($"appsettings.{EnvironmentName.Development}.json", true, true);            var config = configBuilder.Build();                        var host = new WebHostBuilder()                        .UseKestrel()                        .UseStartup
() .UseContentRoot(Directory.GetCurrentDirectory()) .UseUrls(config["AppSettings:Url"])//设置启动时的地址 .Build(); host.Run(); } }

配置文件为:

{  "AppSettings": {    "Url": "http://0.0.0.0:6000"  },  "Logging": {    "IncludeScopes": false,    "Debug": {      "LogLevel": {        "Default": "Info"      }    },    "Console": {      "LogLevel": {        "Default": "Warning"      }    }  }}

StartUp为:

public class Startup    {        public IConfiguration Configuration { get; private set; }        public Startup(IHostingEnvironment env)//在构造函数中注入 IHostingEnvironment         {            Configuration = new ConfigurationBuilder()                                .SetBasePath(env.ContentRootPath)                                .AddJsonFile($"appsettings.json")                                .Build();        }        public void ConfigureServices(IServiceCollection services)        {            services.AddMvc();        }        public void Configure(IApplicationBuilder app,            IHostingEnvironment env,            ILoggerFactory loggerFactory)        {            if (env.IsDevelopment())            {                app.UseDeveloperExceptionPage();            }            //添加控制台输出            loggerFactory.AddConsole(Configuration.GetSection("Logging"));            loggerFactory.AddDebug();            app.UseMvc();        }    }

 

但是微软提供的内置的日志组件没有实现将日志记录到文件、数据库上。下面介绍NLog

二、NLog

首先使用NuGet添加NLog,然后在Startup的Configure中添加以下代码
public void Configure(IApplicationBuilder app,            IHostingEnvironment env,            ILoggerFactory loggerFactory)        {            if (env.IsDevelopment())            {                app.UseDeveloperExceptionPage();            }            //添加控制台输出            loggerFactory.AddConsole(Configuration.GetSection("Logging"));            loggerFactory.AddDebug();            loggerFactory.AddNLog();//添加NLog            NLog.LogManager.LoadConfiguration($@"{env.ContentRootPath}/nlog.config");//指定NLog的配置文件            app.UseMvc();        }

配置NLog的配置文件

   <target name="network" xsi:type="Network" address="udp://chinacloudapp.cn:4561" layout="Development|${longdate}|${event-properties:item=EventId.Id}|${logger}|${uppercase:${level}}|${message} ${exception}" />//将日志通过网络输出

//将日志输出到控制台

xsi:type=“File”存储日志为文件格式 ,

xsi:type="Console" 表示为控制台输出。

fileName="./logs/${shortdate}/all.log" 表示存储文件路径。
layout="${longdate}|${message} ${exception}" 表示为文件内容的布局。

rules标签下面表示,对应等级的日志写到对应target中。如

表示等级为Info的日志写到target名称为infofile的文件中。
表示日志等级大于Trace的日志写到target名称为allfile和debuge(控制台输出)中。

同样在使用的时候,只需要在用到的地方注入ILogger,就可以使用了。

转载于:https://www.cnblogs.com/MicroHeart/p/9268596.html

你可能感兴趣的文章
语法分析的那些算法
查看>>
jQuery each使用
查看>>
立即执行函数
查看>>
第四次寒假作业
查看>>
USE_FUNC.txt
查看>>
分享一下 Eclipse 插件 PyDev 的安装
查看>>
(转)Python3之os模块
查看>>
hdu 4038 stone
查看>>
ASP.NET 显示项目之外的图片
查看>>
2011数字图书馆前沿问题高级研讨班-学习笔记1
查看>>
深度学习系列 Part(3)
查看>>
HDFS之HBase伪分布安装
查看>>
android 测试----Monkey
查看>>
static 关键字
查看>>
Vue 的基本认识
查看>>
最高的分数
查看>>
命令别名设置: alias, unalias
查看>>
1051. 复数乘法 (15)
查看>>
gcc相关
查看>>
tmp目录
查看>>