系列目录

循序渐进学.Net Core Web Api开发系列目录

本系列涉及到的源码下载地址:https://github.com/seabluescn/Blog_WebApi

一、本篇概述

本篇介绍日志的使用,包括系统默认的控制台日志和第三方NLog日志管理。

二、使用系统控制台日志

1、使用内置日志

    [Produces("application/json")]
[Route("api/Article")]
public class ArticleController : Controller
{ private readonly ILogger _logger;
public ArticleController(SalesContext context, ILogger<ArticleController> logger)
{
_logger = logger;
} [HttpGet("logger")]
public void TestLogger()
{
_logger.LogCritical("LogCritical");
_logger.LogError("LogError");
_logger.LogWarning("LogWarning");
_logger.LogInformation("LogInformation");
_logger.LogDebug("LogDebug"); return;
}
}

默认只能看到前三条记录:

主要原因是日志的最低级别默认为Warring,如果要显示其他级别日志,需要修改application.json文件。

{
"Logging": {
"IncludeScopes": false,
"Debug": {
"LogLevel": {
"Default": "Error"
}
},
"Console": {
"LogLevel": {
"Default": "Information"
}
}
}
}

日志级别优先级如下顺序:

Critical > Error > Warning > Information > Debug

调整日志级别为Information 或Debug以后会显示太多无关的日志信息,可以配置默认级别为Warring,而自己项目命名空间的日志级别为Debug。

"Console": {
"LogLevel": {
"Default": "Warning",
"SaleService.Controllers": "DEBUG"
}
}

2、几点说明

1)目前日志已经可以正常工作了,把项目发布到Linux环境下,通过配置Supervisor可以把控制台的内容输出到文件系统,建议在调试环境下采用Debug日志级别,而在生成环境采用Error日志级别。配置Supervisor的内容可以参考:循序渐进学.Net Core Web Api开发系列【7】:项目发布

2)如果稍微了解依赖注入(DI)的知识,就可以理解我们在Controoler中使用ILogger是采用标准的构造函数注入的方式,但是问题是用户并没有注册该服务,其实是系统在CreateDefaultBuilder时帮我们注册了日志服务。可以看几段源码的片段:

CreateDefaultBuilder:
using System;
using System.IO;
using System.Reflection;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Routing;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging; namespace Microsoft.AspNetCore
{
public static class WebHost
{
public static IWebHostBuilder CreateDefaultBuilder(string[] args)
{
return WebHostBuilderIISExtensions.UseIISIntegration(HostingAbstractionsWebHostBuilderExtensions.UseContentRoot(WebHostBuilderKestrelExtensions.UseKestrel(new WebHostBuilder()), Directory.GetCurrentDirectory()).ConfigureAppConfiguration(delegate(WebHostBuilderContext hostingContext, IConfigurationBuilder config)
{
IHostingEnvironment hostingEnvironment = hostingContext.HostingEnvironment;
JsonConfigurationExtensions.AddJsonFile(JsonConfigurationExtensions.AddJsonFile(config, "appsettings.json", true, true), string.Format("appsettings.{0}.json", hostingEnvironment.EnvironmentName), true, true);
if (HostingEnvironmentExtensions.IsDevelopment(hostingEnvironment))
{
Assembly assembly = Assembly.Load(new AssemblyName(hostingEnvironment.ApplicationName));
if (assembly != null)
{
UserSecretsConfigurationExtensions.AddUserSecrets(config, assembly, true);
}
}
EnvironmentVariablesExtensions.AddEnvironmentVariables(config);
if (args != null)
{
CommandLineConfigurationExtensions.AddCommandLine(config, args);
}
}).ConfigureLogging(delegate(WebHostBuilderContext hostingContext, ILoggingBuilder logging)
{
LoggingBuilderExtensions.AddConfiguration(logging, hostingContext.Configuration.GetSection("Logging"));
logging.AddConsole();
logging.AddDebug();
})).UseDefaultServiceProvider(delegate(WebHostBuilderContext context, ServiceProviderOptions options)
{
options.ValidateScopes = HostingEnvironmentExtensions.IsDevelopment(context.HostingEnvironment);
});
}
}
}
AddConsole:
using System;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging.Console; namespace Microsoft.Extensions.Logging
{
public static class ConsoleLoggerExtensions
{
public static ILoggingBuilder AddConsole(this ILoggingBuilder builder)
{
builder.Services.AddSingleton<ILoggerProvider, ConsoleLoggerProvider>();
return builder;
}
}
}

三、使用NLog

1、通过NuGet获取包:NLog.Web.AspNetCore

2、修改Startup类的Configure方法:

 public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
loggerFactory.AddNLog();
loggerFactory.ConfigureNLog("nlog.config"); //如果采用默认配置文件nlog.config,该语句可以省略
}
}

nlog.config配置文件内容如下:

<?xml version="1.0" encoding="utf-8"?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<targets>
<target xsi:type="File" name="logfile" fileName="${basedir}/logs/${shortdate}_all.log" keepFileOpen="false" layout="${longdate}|${callsite:fileName=True}|${uppercase:${level}}|${message} ${exception}" />
<target xsi:type="File" name="debugfile" fileName="${basedir}/logs/${shortdate}_debug.log" keepFileOpen="false" layout="${longdate}|${callsite:fileName=True}|${uppercase:${level}}|${message} ${exception}" />
<target xsi:type="File" name="errfile" fileName="${basedir}/logs/${shortdate}_error.log" keepFileOpen="false" layout="${longdate}|${callsite:fileName=True}|${uppercase:${level}}|${message} ${exception}" />
</targets>
<rules>
<logger name="*" level="Debug" writeTo="debugfile" />
<logger name="*" level="Error" writeTo="errfile" />
<logger name="*" minlevel="Trace" writeTo="logfile" />
</rules>
</nlog>

项目发布时修改配置文件,只保留errfile即可。

以上就是全部代码,Controller中的代码无需修改。

3、两个注意点

1)目前我们已经采用NLog来进行日志的记录,此时系统默认的日志仍然是正常工作的,项目发布时建议把系统默认的日志级别改成Error,nlog的输出日志只保留errfile,以免造成服务器磁盘空间浪费。

2)项目发布时nlog.config文件可能不会发布到目标目录,需要修改该文件的文件属性:

循序渐进学.Net Core Web Api开发系列【10】:使用日志的更多相关文章

  1. 循序渐进学.Net Core Web Api开发系列【0】:序言与目录

    一.序言 我大约在2003年时候开始接触到.NET,最初在.NET framework 1.1版本下写过代码,曾经做过WinForm和ASP.NET开发.大约在2010年的时候转型JAVA环境,这么多 ...

  2. 循序渐进学.Net Core Web Api开发系列【16】:应用安全续-加密与解密

    系列目录 循序渐进学.Net Core Web Api开发系列目录 本系列涉及到的源码下载地址:https://github.com/seabluescn/Blog_WebApi 一.概述 应用安全除 ...

  3. 循序渐进学.Net Core Web Api开发系列【15】:应用安全

    系列目录 循序渐进学.Net Core Web Api开发系列目录 本系列涉及到的源码下载地址:https://github.com/seabluescn/Blog_WebApi 一.概述 本篇介绍W ...

  4. 循序渐进学.Net Core Web Api开发系列【14】:异常处理

    系列目录 循序渐进学.Net Core Web Api开发系列目录 本系列涉及到的源码下载地址:https://github.com/seabluescn/Blog_WebApi 一.概述 本篇介绍异 ...

  5. 循序渐进学.Net Core Web Api开发系列【13】:中间件(Middleware)

    系列目录 循序渐进学.Net Core Web Api开发系列目录 本系列涉及到的源码下载地址:https://github.com/seabluescn/Blog_WebApi 一.概述 本篇介绍如 ...

  6. 循序渐进学.Net Core Web Api开发系列【12】:缓存

    系列目录 循序渐进学.Net Core Web Api开发系列目录 本系列涉及到的源码下载地址:https://github.com/seabluescn/Blog_WebApi 一.概述 本篇介绍如 ...

  7. 循序渐进学.Net Core Web Api开发系列【11】:依赖注入

    系列目录 循序渐进学.Net Core Web Api开发系列目录 本系列涉及到的源码下载地址:https://github.com/seabluescn/Blog_WebApi 一.概述 本篇介绍如 ...

  8. 循序渐进学.Net Core Web Api开发系列【9】:常用的数据库操作

    系列目录 循序渐进学.Net Core Web Api开发系列目录 本系列涉及到的源码下载地址:https://github.com/seabluescn/Blog_WebApi 一.概述 本篇描述一 ...

  9. 循序渐进学.Net Core Web Api开发系列【8】:访问数据库(基本功能)

    系列目录 循序渐进学.Net Core Web Api开发系列目录 本系列涉及到的源码下载地址:https://github.com/seabluescn/Blog_WebApi 一.概述 本篇讨论如 ...

随机推荐

  1. Java基础-JAVA中常见的数据结构介绍

    Java基础-JAVA中常见的数据结构介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是数据结构 答:数据结构是指数据存储的组织方式.大致上分为线性表.栈(Stack) ...

  2. saltstack主机管理项目【day39】:主机管理项目开发

    项目目标 salt state.apply -h "ubuntu,centos" -g "ubuntu,centos" -f "ubuntu,cent ...

  3. Oracle 重要知识点

    这些是最简单的,理解这些再去看其他的高深一点的吧....... 游标 oracle里面的游标分为四种情况,分别是LOOP循环,FOR循环,删除,更新 1.LOOP循环 检索EMP表.使用LOOP循环语 ...

  4. ThinkPHP框架学习(一)

    这几天呢,断断续续地在看孙叔华老师的ThinkPHP教程,期间还做了一些其他事情,出去办了点事,总结总结下一学期规划等等,不知不觉间又过去了大半个星期.现在呢,看完了一天的教程,在这里,还是希望稍微总 ...

  5. 洛谷 P4128: bzoj 1815: [SHOI2006]有色图

    题目传送门:洛谷 P4128. 计数好题,原来是 13 年前就出现了经典套路啊.这题在当年应该很难吧. 题意简述: \(n\) 个点的完全图,点没有颜色,边有 \(m\) 种颜色,问本质不同的图的数量 ...

  6. python运行execjs解密js

    [转]http://www.knowsky.com/1041161.html python 记一次计算qzonetoken经历 之前用python写了个发表说说的爬虫,但最近发现在post数据时返回不 ...

  7. JVM 垃圾回收算法及案例分析

    一. 在说垃圾回收算法之前,先谈谈JVM怎样确定哪些对象是“垃圾”. 1.引用计数器算法: 引用计数器算法是给每个对象设置一个计数器,当有地方引用这个对象的时候,计数器+1,当引用失效的时候,计数器- ...

  8. 替换openjdk的版本时遇到报错Transaction check error

    x想要使用jmap对jvm内存进行排查问题,但是默认安装的openjdk包中并不带有这个命令,需要新升级到新版本才有 而在安装新的版本时,遇到报错: :   file /usr/lib64/libns ...

  9. Python多线程-2(线程共享全局变量)

    例子: from threading import Thread,Lock from time import sleep, ctime global_num = [] def func1(): glo ...

  10. 一次“ora-12170 tns 连接超时”的经历

      win7    64位系统 oracle  10g   64位 plsql之前连接是好使的,突然连接不上,提示错误“ora-12170 tns 连接超时” 1.ping IP    没有问题 2. ...