.net 日志ILogger基本使用

.net 日志ILogger基本使用

最基本的使用,输出一些东西:

在Controller中

using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;

namespace NetTest.Controllers
{
    [ApiController]
    [Route("[controller]")]
    public class LogTestController : ControllerBase
    {
        // 从容器中获取ILogger实例
        private readonly ILogger<LogTestController> _logger;
        public LogTestController(ILogger<LogTestController> logger)
        {
            _logger = logger;
        }

        // 使用ILogger
        [HttpGet("log")]
        public void Log()
        {
            _logger.LogInformation("Info");
            _logger.LogError("Error");
            _logger.LogWarning("Warning");
        }
    }
}

运行项目,访问相关的Action,发现控制台打印了日志
在这里插入图片描述
可以看到,控制台输出了内容

并且,我们发现这些内容具有不同的颜色,这就涉及到了日志级别的概念

日志级别LogLevel:

要弄清楚日志级别,首先要明白日志为什么要分级?

举个例子,你的女朋友很爱说话,整天说这说那,说些有的没的,这些信息都不重要,因此你有的听了有的不听,因为你认为这些信息并不是什么重要的信息,听不听都没什么关系
但是突然有一天,你女朋友跟你提分手了,你意识到这是一个危险信息,因此你能很认真地听

日志也是如此,大多数日志信息是不那么重要的,它只是记录了一下程序内部发生了什么(例如:“XXX登录了”),你知不知道其实对程序本身并没有什么影响

但是突然程序运行时发生异常了,它产生了一个异常信息,这就需要你引起高度重视了

因此日志级别就是用来区分信息严重程度的一个东西

.net 默认的日志提供程序将日志级别划分为以下几种:(严重程度由低到高)
在这里插入图片描述
设置日志级别
appsetting.json中默认设置了日志级别为“Default”:“Information”
在这里插入图片描述
这意味着严重程度低于“Information”级别的日志将不被输出

我们如果把它改为“Warning”,则严重程度低于“Warning”级别的日志将不被输出,这意味着“Information”级别的日志将不被输出

除了在Default中设置日志级别外,我们还可以指定某个强类型的日志级别,例如我们希望ILogger<LogTestController> _logger的日志级别为Warning,我们可以这样修改配置(类需要指定全名):
在这里插入图片描述

在 ASP.NET MVC 中实现日志功能是应用程序开发中的重要组成部分,它有助于跟踪应用程序的运行状态、调试问题以及监控性能。以下是一个详细的日志实现指南,涵盖从基础配置到高级用法的内容。 ### 配置日志框架 ASP.NET MVC 支持多种日志框架,如 **NLog**, **log4net**, **Serilog**, 以及内置的 **Microsoft.Extensions.Logging**。以下是使用内置日志框架的配置方法。 #### 使用 `Microsoft.Extensions.Logging` 在 ASP.NET MVC Core 中,`Microsoft.Extensions.Logging` 是默认的日志抽象层。可以通过以下步骤进行配置: 1. **注册日志服务** 在 `Startup.cs` 文件的 `ConfigureServices` 方法中注册日志服务: ```csharp public void ConfigureServices(IServiceCollection services) { services.AddLogging(loggingBuilder => { loggingBuilder.AddConsole(); loggingBuilder.AddDebug(); }); services.AddControllersWithViews(); } ``` 2. **在控制器中使用日志** 通过依赖注入获取 `ILogger<T>` 接口,并在控制器中使用: ```csharp public class HomeController : Controller { private readonly ILogger<HomeController> _logger; public HomeController(ILogger<HomeController> logger) { _logger = logger; } public IActionResult Index() { _logger.LogInformation("Index page visited."); return View(); } } ``` 3. **日志级别** ASP.NET Core 提供了多个日志级别,包括 `Trace`, `Debug`, `Information`, `Warning`, `Error`, 和 `Critical`。可以根据需要选择合适的日志级别进行记录。 #### 使用 NLog 如果需要更强大的日志功能,可以集成 **NLog**。以下是基本配置步骤: 1. **安装 NuGet 包** 安装 `NLog.Web.AspNetCore` 和 `NLog.Config` 包: ```bash dotnet add package NLog.Web.AspNetCore dotnet add package NLog.Config ``` 2. **配置 NLog** 在项目中创建 `nlog.config` 文件,并配置日志输出路径和格式: ```xml <?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" autoReload="true" internalLogLevel="Info" internalLogFile="c:\temp\internal-nlog.txt"> <targets> <target xsi:type="File" name="allfile" fileName="c:\temp\nlog-all-${shortdate}.log" layout="${longdate}|${logger}|${uppercase:${level}}|${message} ${exception}" /> </targets> <rules> <logger name="*" minlevel="Trace" writeTo="allfile" /> </rules> </nlog> ``` 3. **注册 NLog 服务** 在 `Startup.cs` 中注册 NLog: ```csharp public void ConfigureServices(IServiceCollection services) { services.AddNLogWeb(); services.AddControllersWithViews(); } ``` 4. **使用日志记录** 与 `Microsoft.Extensions.Logging` 类似,注入 `ILogger<T>` 并使用: ```csharp public class HomeController : Controller { private readonly ILogger<HomeController> _logger; public HomeController(ILogger<HomeController> logger) { _logger = logger; } public IActionResult About() { _logger.LogWarning("About page accessed."); return View(); } } ``` ### 高级日志实践 - **结构化日志** 使用 Serilog 等支持结构化日志的框架可以更方便地进行日志分析。结构化日志允许将日志数据以 JSON 等格式存储,便于后续处理和查询。 - **日志聚合** 对于分布式系统,可以使用 **ELK Stack**(Elasticsearch, Logstash, Kibana)或 **Seq** 等工具集中管理日志。 - **日志安全与性能优化** 在生产环境中,应避免记录敏感信息,并确保日志文件的访问权限受到严格控制。此外,可以配置日志轮转策略以防止磁盘空间耗尽。 - **异步日志记录** 使用异步方式记录日志可以减少对主线程的影响,提高应用程序性能。大多数现代日志框架都支持异步写入。 ### 示例代码 ```csharp public class AccountController : Controller { private readonly ILogger<AccountController> _logger; public AccountController(ILogger<AccountController> logger) { _logger = logger; } public IActionResult Login(string username) { _logger.LogInformation("User {Username} is attempting to log in.", username); // 登录逻辑 return View(); } public IActionResult Error() { _logger.LogError("An error occurred while processing the request."); return View(); } } ``` ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值