.NetCore 中使用Log4Net

简介: .NetCore 中使用Log4Net

Log4Net 使用


安装2个包

Microsoft.Extensions.Logging


Microsoft.Extensions.Logging.Log4Net.AspNetCore


在Program中配置日志,请自行添加相关using

internal static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
        //配置log4net
                .ConfigureLogging(p =>
                {
                    p.AddFilter("System", LogLevel.Warning); //过滤掉系统默认的一些日志
                    p.AddFilter("Microsoft", LogLevel.Warning);//过滤掉系统默认的一些日志
                    var path = Directory.GetCurrentDirectory() + "\\log4net.config";
                    //不带参数:表示log4net.config的配置文件就在应用程序根目录下,也可以指定配置文件的路径
                    p.AddLog4Net(path);
                })                
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                }) ;


新建log4net.config 日志配置文件,加入如下代码

<log4net>
    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
        <layout type="log4net.Layout.PatternLayout" value="%date [%thread] %-5level %logger - %message%newline" />
    </appender>
    <appender name="FileAppender" type="log4net.Appender.FileAppender">
        <file value="log-file.log" />
        <appendToFile value="true" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
        </layout>
    </appender>
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
        <file value="logfile/" />
        <appendToFile value="true" />
        <rollingStyle value="Composite" />
        <staticLogFileName value="false" />
        <datePattern value="yyyyMMdd'.log'" />
        <maxSizeRollBackups value="10" />
        <maximumFileSize value="1MB" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
        </layout>
    </appender>
    <!-- Setup the root category, add the appenders and set the default level -->
    <root>
        <level value="ALL" />
        <appender-ref ref="ConsoleAppender" />
        <appender-ref ref="FileAppender" />
        <appender-ref ref="RollingLogFileAppender" />
    </root>
</log4net>


使用log4net 添加日志


NLog 使用


安装包:NLog.Web.AspNetCore


新建配置文件: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 name="asyncFile" xsi:type="AsyncWrapper">
            <!--项目日志保存文件路径说明fileName="${basedir}/保存目录,以年月日的格式创建/${shortdate}/${记录器名称}-${单级记录}-${shortdate}.txt"-->
            <target name="log_file" xsi:type="File"
                    fileName="${basedir}/ProjectLogs/${shortdate}/${logger}-${level}-${shortdate}.txt"
                    layout="${longdate} | ${message} ${onexception:${exception:format=message} ${newline} ${stacktrace} ${newline}"
                    archiveFileName="${basedir}/archives/${logger}-${level}-${shortdate}-{#####}.txt"
                    archiveAboveSize="102400"
                    archiveNumbering="Sequence"
                    concurrentWrites="true"
                    keepFileOpen="false" />
        </target>
        <!--使用可自定义的着色将日志消息写入控制台-->
        <target name="colorConsole" xsi:type="ColoredConsole" layout="[${date:format=HH\:mm\:ss}]:${message} ${exception:format=message}" />
    </targets>
    <!--规则配置,final - 最终规则匹配后不处理任何规则-->
    <rules>
        <logger name="Microsoft.*" minlevel="Info" writeTo="" final="true" />
        <logger name="*" minlevel="Info" writeTo="asyncFile" />
        <logger name="*" minlevel="Warn" writeTo="colorConsole" />
    </rules>
</nlog>


修改Program.s,声明使用nlog

public static void Main(string[] args)
{
    CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
    .UseNLog() //使用nlog
    .ConfigureWebHostDefaults(webBuilder =>
                              {
                                  webBuilder.UseStartup<Startup>();
                              });


至此,准备工作已经结束


使用nlog 记录日志

public class HomeController : Controller
{
    private readonly ILogger<HomeController> _logger;
    public HomeController(ILogger<HomeController> logger)
    {
        _logger = logger;
    }
    public IActionResult Index()
    {
        _logger.LogInformation("进入Home-Index页面啦");
        _logger.LogError("页面发生错误的时候记录");
        _logger.LogWarning("页面发生警告");
        return View();
    }
}


NLog配置文件信息简单概述:


rules【规则】说明:

规则是logger具有以下属性的元素:

name - 记录器名称过滤器 - 可能包含通配符(*和?)

minlevel - 记录的最低级别

maxlevel - 记录的最高级别

level - 单级记录

levels - 逗号分隔的记录级别列表

writeTo - 逗号分隔的要写入的目标列表

final - 最终规则匹配后不处理任何规则

enabled- 设置为false禁用规则而不删除它

ruleName- 规则标识符,允许使用Configuration.FindRuleByName和进行规则查找Configuration.RemoveRuleByName。在NLog 4.6.4中引入

注意:虽然命名了规则logger,但它没有定义记录器。它引用一个或多个记录器。

通过将规则name模式与记录器名称匹配,将规则映射到记录器。规则name属性可以包括通配符(*和?),以通过通配符匹配来匹配记录器名称。

* - 匹配0个或更多字符

? - 恰好匹配1个字符


targets【目标】:

每个目标由一个target元素表示。每个目标需要两个属性:

name - 目标名称

type - 目标类型 - 例如“文件”,“数据库”,“邮件”。使用名称空间时,此属性已命名xsi:type。

除了这些属性之外,目标通常还接受其他参数,这些参数会影响诊断跟踪的写入方式。每个目标都有一组不同的参数,它们在项目主页上有详细描述,并且它们是上下文相关的。Intellisense也可以在Visual Studio中使用。

例如,File目标接受fileName定义输出文件名的参数,Console目标具有error参数,该参数确定诊断跟踪是否写入标准错误(stderr)而不是进程的标准输出(stdout)。

此示例演示了一个targets定义多个目标的部分:两个文件,一个网络目标和OutputDebugString目标:

< targets >
< target name = “ f1 ” xsi :type = “ File ” fileName = “ file1.txt ” />
< target name = “ f2 ” xsi :type = “ File ” fileName = “ file2.txt ” /> 
< target name = “ n1 ” xsi :type = “ Network ” address = “ tcp:// localhost:4001 ” />
< target name = “ ds ” xsi :type = “ OutputDebugString ” />
</ targets >


NLog提供了许多预定义的目标。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
19天前
|
数据可视化 网络协议 C#
C#/.NET/.NET Core优秀项目和框架2024年3月简报
公众号每月定期推广和分享的C#/.NET/.NET Core优秀项目和框架(每周至少会推荐两个优秀的项目和框架当然节假日除外),公众号推文中有项目和框架的介绍、功能特点、使用方式以及部分功能截图等(打不开或者打开GitHub很慢的同学可以优先查看公众号推文,文末一定会附带项目和框架源码地址)。注意:排名不分先后,都是十分优秀的开源项目和框架,每周定期更新分享(欢迎关注公众号:追逐时光者,第一时间获取每周精选分享资讯🔔)。
|
3月前
|
开发框架 前端开发 JavaScript
盘点72个ASP.NET Core源码Net爱好者不容错过
盘点72个ASP.NET Core源码Net爱好者不容错过
72 0
|
3月前
|
开发框架 .NET
ASP.NET Core NET7 增加session的方法
ASP.NET Core NET7 增加session的方法
37 0
|
3月前
|
开发框架 JavaScript .NET
ASP.NET Core的超级大BUG
ASP.NET Core的超级大BUG
43 0
|
1月前
|
开发框架 人工智能 .NET
C#/.NET/.NET Core拾遗补漏合集(持续更新)
C#/.NET/.NET Core拾遗补漏合集(持续更新)
|
1月前
|
开发框架 中间件 .NET
C# .NET面试系列七:ASP.NET Core
## 第一部分:ASP.NET Core #### 1. 如何在 controller 中注入 service? 在.NET中,在ASP.NET Core应用程序中的Controller中注入服务通常使用<u>依赖注入(Dependency Injection)</u>来实现。以下是一些步骤,说明如何在Controller中注入服务: 1、创建服务 首先,确保你已经在应用程序中注册了服务。这通常在Startup.cs文件的ConfigureServices方法中完成。例如: ```c# services.AddScoped<IMyService, MyService>(); //
65 0
|
2月前
|
开发框架 前端开发 .NET
福利来袭,.NET Core开发5大案例,30w字PDF文档大放送!!!
为了便于大家查找,特将之前开发的.Net Core相关的五大案例整理成文,共计440页,32w字,免费提供给大家,文章底部有PDF下载链接。
37 1
福利来袭,.NET Core开发5大案例,30w字PDF文档大放送!!!
|
2月前
|
算法 BI API
C#/.NET/.NET Core优秀项目和框架2024年1月简报
C#/.NET/.NET Core优秀项目和框架2024年1月简报
|
3月前
|
算法 C#
C# .Net Core bytes转换为GB/MB/KB 算法
C# .Net Core bytes转换为GB/MB/KB 算法
42 0
|
3月前
|
前端开发
.net core mvc获取IP地址和IP所在地(其实是百度的)
.net core mvc获取IP地址和IP所在地(其实是百度的)
125 0