.net core 日志模型设计

本文介绍了.NET Core中的日志相关内容。ILogger是.NET Core的日志对象,由ILoggerFactory生成,可通过注册多个ILoggerProvider合并为一个ILogger,自定义日志需实现相关接口。此外,还提到了常用的第三方日志log4net,.NET Core中整合了它,并给出了相关包和配置示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

word文档地址:https://github.com/IceEmblem/-/tree/master/%E5%AD%A6%E4%B9%A0%E8%B5%84%E6%96%99/Windows%20%E5%B9%B3%E5%8F%B0/NetCore/.net%20core/.net%20core%20%E6%A1%86%E6%9E%B6%E8%AE%BE%E8%AE%A1%E5%8E%9F%E7%90%86

参考文章:https://www.cnblogs.com/artech/p/inside-asp-net-core-1.html
嗯,不用说,也很常见

简单示例

public static void Main(string[] args)
{
    //注册EncodingProvider实现对中文编码的支持
    Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);

    // 日志过滤器
Func<string, LogLevel, bool> filter = (category, level) => level >= LogLevel.Warning;

    // 新建日志工厂
    ILoggerFactory loggerFactory = new LoggerFactory();
    // 添加日志提供者
    loggerFactory.AddProvider(new ConsoleLoggerProvider(filter, false));
loggerFactory.AddProvider(new DebugLoggerProvider(filter));

    // 生成日志
ILogger logger = loggerFactory.CreateLogger(nameof(Program));

    int eventId = 3721;
    // 写入消息日志
    logger.LogInformation(eventId, "升级到最新.NET Core版本({version})", "1.0.0");
    // 写入警告日志
    logger.LogWarning(eventId, "并发量接近上限({maximum}) ", 200);
    // 写入错误日志
    logger.LogError(eventId, "数据库连接失败(数据库:{Database},用户名:{User})", "TestDb", "sa");
}

ILogger日志

ILogger是 .net core 的日志,我们可以使用该对象记录各种日志

ILogger的生成

ILogger由ILoggerFactory生成

public interface ILoggerFactory : IDisposable
{
    void AddProvider(ILoggerProvider provider);

    ILogger CreateLogger(string categoryName);
}

ILoggerFactory如何生成ILogger

我们可以向ILoggerFactory注册多个ILoggerProvider,ILoggerFactory利用ILoggerProvider提供的ILogger合并为一个ILogger

public interface ILoggerProvider : IDisposable
{
    ILogger CreateLogger(string categoryName);
}

要想自定义日志,我们需要实现ILoggerProvider和对应的ILogger

设计图

来源:https://www.cnblogs.com/artech/p/inside-asp-net-core-1.html
在这里插入图片描述

log4net日志

log4net日志是比较常用的第三方日志,.net core中整合了log4net
包:Microsoft.Extensions.Logging.Log4Net.AspNetCore

示例
项目结构:
在这里插入图片描述

Program.cs:

static void Main (string[] args) {
    // 新建日志工厂
    ILoggerFactory loggerFactory = new LoggerFactory ();

    // 添加日志提供者,使用扩展方法 AddLog4Net 或 AddProvider 添加日志提供者
    loggerFactory.AddLog4Net ("log4net.xml");
	// loggerFactory.AddProvider(new Log4NetProvider("log4net.xml"));
	
	// 生成 Logger
	ILogger logger = loggerFactory.CreateLogger (nameof (Program));
	
	// 写入日志消息
	logger.LogInformation ("这是一条log4net日志消息");

    Console.WriteLine ("Hello World!");
}

在log4net可以提供log4net的日志配置文件,这里我们提供了log4net.xml配置文件
Log4net.xml(记得设置文件始终复制):

<?xml version="1.0" encoding="utf-8"?>
<log4net>
    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
        <file value="App_Data/Logs/Logs.txt" />
        <appendToFile value="true" />
        <rollingStyle value="Size" />
        <maxSizeRollBackups value="10" />
        <maximumFileSize value="10000KB" />
        <staticLogFileName value="true" />
        <!-- 日志记录格式 -->
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value=" 【时间】:%d%n 【级别】:%p%n 【类名】:%c%n 【线程ID】: %thread %n 【日志内容】:%m%n 【日记详细】:%exception %n---------------------------------------------------------------------------------------------------------------%n" />
        </layout>
        <!-- 级别过滤 -->
        <filter type="log4net.Filter.LevelRangeFilter">
            <levelMin value="INFO" />
            <levelMax value="ERROR" />
        </filter>
        <!-- 字符串匹配过滤 -->
        <!-- <filter type = "log4net.Filter.StringMatchFilter" >
      <stringToMatch value = "IELog" />
    </filter>
    <filter type = "log4net.Filter.DenyAllFilter" /> -->
    </appender>
    <!-- 处理DEBUG级别以上日志 -->
    <root>
        <appender-ref ref="RollingFileAppender" />
        <level value="DEBUG" />
    </root>
    <logger name="NHibernate">
        <level value="WARN" />
    </logger>
</log4net>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值