首页 > 编程语言 >Asp.Net 6中使用Log4Net

Asp.Net 6中使用Log4Net

时间:2023-07-25 21:24:02浏览次数:42  
标签:Log4Net 输出 Asp log4net var Net 日志 logger

Asp.Net 6中使用Log4Net

1. 先新建一个ASP.NET Core空项目

1

2. 通过Nuget包管理器安装下面两个包

log4net
Microsoft.Extensions.Logging.Log4Net.AspNetCore

2

3. 在项目根目录下新建log4net的配置文件log4net.config,并将其设置为始终复制。

<?xml version="1.0" encoding="utf-8" ?>
<log4net>
    <!--根配置-->
    <root>
        <!--日志级别:可选值: ERROR > WARN > INFO > DEBUG -->
        <level value="ERROR"/>
        <level value="WARN"/>
        <level value="INFO"/>
        <level value="DEBUG"/>
        <appender-ref ref="ErrorLog" />
        <appender-ref ref="WarnLog" />
        <appender-ref ref="InfoLog" />
        <appender-ref ref="DebugLog" />
    </root>
    <!-- 错误 Error.log-->
    <appender name="ErrorLog" type="log4net.Appender.RollingFileAppender">
        <!--目录路径,可以是相对路径或绝对路径-->
        <param name="File" value="C:\logs\"/>
        <!--文件名,按日期生成文件夹-->
        <param name="DatePattern" value="/yyyy-MM-dd/"Error.log""/>
        <!--追加到文件-->
        <appendToFile value="true"/>
        <!--创建日志文件的方式,可选值:Date[日期],文件大小[Size],混合[Composite]-->
        <rollingStyle value="Composite"/>
        <!--写到一个文件-->
        <staticLogFileName value="false"/>
        <!--单个文件大小。单位:KB|MB|GB-->
        <maximumFileSize value="200MB"/>
        <!--最多保留的文件数,设为"-1"则不限-->
        <maxSizeRollBackups value="-1"/>
        <!--日志格式-->
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="[%d{HH:mm:ss}]%m%n"/>
        </layout>
        <filter type="log4net.Filter.LevelRangeFilter">
            <param name="LevelMin" value="ERROR" />
            <param name="LevelMax" value="ERROR" />
        </filter>
    </appender>
 
    <!-- 警告 Warn.log-->
    <appender name="WarnLog" type="log4net.Appender.RollingFileAppender">
        <!--目录路径,可以是相对路径或绝对路径-->
        <param name="File" value="C:\logs\"/>
        <!--文件名,按日期生成文件夹-->
        <param name="DatePattern" value="/yyyy-MM-dd/"Warn.log""/>
        <!--追加到文件-->
        <appendToFile value="true"/>
        <!--创建日志文件的方式,可选值:Date[日期],文件大小[Size],混合[Composite]-->
        <rollingStyle value="Composite"/>
        <!--写到一个文件-->
        <staticLogFileName value="false"/>
        <!--单个文件大小。单位:KB|MB|GB-->
        <maximumFileSize value="200MB"/>
        <!--最多保留的文件数,设为"-1"则不限-->
        <maxSizeRollBackups value="-1"/>
        <!--日志格式-->
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="[%d{HH:mm:ss}]%m%n"/>
        </layout>
        <filter type="log4net.Filter.LevelRangeFilter">
            <param name="LevelMin" value="WARN" />
            <param name="LevelMax" value="WARN" />
        </filter>
    </appender>
 
    <!-- 信息 Info.log-->
    <appender name="InfoLog" type="log4net.Appender.RollingFileAppender">
        <!--目录路径,可以是相对路径或绝对路径-->
        <param name="File" value="C:\logs\"/>
        <!--文件名,按日期生成文件夹-->
        <param name="DatePattern" value="/yyyy-MM-dd/"Info.log""/>
        <!--追加到文件-->
        <appendToFile value="true"/>
        <!--创建日志文件的方式,可选值:Date[日期],文件大小[Size],混合[Composite]-->
        <rollingStyle value="Composite"/>
        <!--写到一个文件-->
        <staticLogFileName value="false"/>
        <!--单个文件大小。单位:KB|MB|GB-->
        <maximumFileSize value="200MB"/>
        <!--最多保留的文件数,设为"-1"则不限-->
        <maxSizeRollBackups value="-1"/>
        <!--日志格式-->
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="[%d{HH:mm:ss}]%m%n"/>
        </layout>
        <filter type="log4net.Filter.LevelRangeFilter">
            <param name="LevelMin" value="INFO" />
            <param name="LevelMax" value="INFO" />
        </filter>
    </appender>
 
    <!-- 调试 Debug.log-->
    <appender name="DebugLog" type="log4net.Appender.RollingFileAppender">
        <!--目录路径,可以是相对路径或绝对路径-->
        <param name="File" value="C:\logs\"/>
        <!--文件名,按日期生成文件夹-->
        <param name="DatePattern" value="/yyyy-MM-dd/"Debug.log""/>
        <!--追加到文件-->
        <appendToFile value="true"/>
        <!--创建日志文件的方式,可选值:Date[日期],文件大小[Size],混合[Composite]-->
        <rollingStyle value="Composite"/>
        <!--写到一个文件-->
        <staticLogFileName value="false"/>
        <!--单个文件大小。单位:KB|MB|GB-->
        <maximumFileSize value="200MB"/>
        <!--最多保留的文件数,设为"-1"则不限-->
        <maxSizeRollBackups value="-1"/>
        <!--日志格式-->
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="[%d{HH:mm:ss}]%m%n"/>
        </layout>
        <filter type="log4net.Filter.LevelRangeFilter">
            <param name="LevelMin" value="DEBUG" />
            <param name="LevelMax" value="DEBUG" />
        </filter>
    </appender>
 
</log4net>

log4net配置参数此处不多赘述,只针对日志的输出格式参数conversionPattern配置做简要说明。

%M      输出日志方法名
%m      输出日志消息内容
%p      输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
%r      输出自应用启动到输出该log信息耗费的毫秒数
%c      输出所属的类目,通常就是所在类的全名
%t      输出产生该日志事件的线程名
%n      输出一个换行符
%l或%L  输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。
%c      输出日志信息所属的类的全名
%d      输出完整的日志时间点的日期时间,支持自定义格式。比如:%d{HH:mm:ss},输出类似:22:10:28
%f      输出日志信息所属的类的类名

4. 在Program中使用log4net输出自定义日志内容

using log4net;
 
var builder = WebApplication.CreateBuilder(args);
//注入Log4Net
builder.Services.AddLogging(cfg =>
{
    cfg.AddLog4Net();
    //默认的配置文件路径是在根目录,且文件名为log4net.config
    //如果文件路径或名称有变化,需要重新设置其路径或名称
    //比如在项目根目录下创建一个名为cfg的文件夹,将log4net.config文件移入其中,并改名为log.config
    //则需要使用下面的代码来进行配置
    //cfg.AddLog4Net(new Log4NetProviderOptions()
    //{
    //    Log4NetConfigFileName = "cfg/log.config",
    //    Watch = true
    //});
});
var app = builder.Build();
//访问根页面时
app.MapGet("/", (ILogger<Program> logger) =>
{
    logger.LogInformation("logger:测试一下Log4Net=》Info");
    return "Hello World!";
});
//访问test页面时
app.MapGet("/test", () =>
{
    var log = LogManager.GetLogger(typeof(Program));
    log.Info("log:这是一条普通日志信息");
});
app.Run();

5. 将项目运行起来,即可发现日志文件已生成

3

4

6. 扩展使用:使用简单工厂模式IOC注入到自定义类中使用

新建一个ITestLog4Net接口文件,并为其定义一个Log方法

public interface ITestLog4Net
{
	public void Log();
}

并且新建一个TestLog4Net的自定义类,继承于ITestLog4Net,并实现该Log方法。

public class TestLog4Net : ITestLog4Net
{
    private readonly ILogger<TestLog4Net> _logger;
    public TestLog4Net(ILogger<TestLog4Net> logger)
    {
        _logger = logger;
        _logger.LogInformation("ctor测试一下Log4Net=》Info");
    }

    public void Log()
    {
        _logger.LogInformation("测试一下Log4Net=》Info");
    }
}

在Program中注入我们的自定义类TestLog4Net

builder.Services.AddTransient<ITestLog4Net, TestLog4Net>();

使用方法

var testLog4Net = app.Services.GetService<ITestLog4Net>()!;
testLog4Net.Log();

或者

var services = new ServiceCollection()!;
var provider = services.BuildServiceProvider()!;
var testLog4Net = provider.GetService<ITestLog4Net>()!;
testLog4Net.Log();

标签:Log4Net,输出,Asp,log4net,var,Net,日志,logger
From: https://www.cnblogs.com/chenhanhans/p/17581055.html

相关文章

  • Asp.Net MVC 使用Log4Net
    Asp.NetMVC使用Log4Net在ASP.NETMVC中使用Log4net需要进行一些配置和代码集成。下面是在ASP.NETMVC中使用Log4net的步骤:1.安装Log4netNuGet包打开NuGet包管理器控制台,并运行以下命令来安装Log4net:Install-Packagelog4net2.添加Log4net配置文件在你......
  • Asp.Net 使用Log4Net (SQL Server)
    Asp.Net使用Log4Net(SQLServer)1.创建数据库表首先,在你的SQLServer数据库中创建一个用于存储日志的表。以下是一个简单的表结构示例:CREATETABLE[dbo].[Logs]([Id][INT]IDENTITY(1,1)PRIMARYKEY,[Date][DATETIME]NOTNULL,[Thread][VARCHAR](255)......
  • AI面试官:Asp.Net 中使用Log4Net (三)
    AI面试官:Asp.Net中使用Log4Net(三)当面试涉及到使用log4net日志记录框架的相关问题时,通常会聚焦在如何在.NET或.NETCore应用程序中集成和使用log4net。以下是一些关于log4net的面试题目,以及相应的解答、案例和代码:目录AI面试官:Asp.Net中使用Log4Net(三)11.如何在log4net中......
  • AI面试官:Asp.Net 中使用Log4Net (二)
    AI面试官:Asp.Net中使用Log4Net(二)当面试涉及到使用log4net日志记录框架的相关问题时,通常会聚焦在如何在.NET或.NETCore应用程序中集成和使用log4net。以下是一些关于log4net的面试题目,以及相应的解答、案例和代码:目录AI面试官:Asp.Net中使用Log4Net(二)6.如何配置log4net,......
  • AI面试官:Asp.Net 中使用Log4Net (一)
    AI面试官:Asp.Net中使用Log4Net(一)1.先新建一个ASP.NETCore空项目目录AI面试官:Asp.Net中使用Log4Net(一)1.先新建一个ASP.NETCore空项目1.什么是log4net?它的作用是什么?2.log4net日志级别有哪些?如何设置日志级别?3.如何在.NETCore应用程序中使用log4net记录日志?4.log......
  • 我喜欢的.NET8 Preview 1功能
    .NET8的第一个预预览版发布了,又开启了一波新技术的学习和研究。简单过了一下.NET8Preview1,中间有两个功能是我的痛点,先睹为快。在项目中,数据从前端UI到后端(后端也分为好几层),再到数据库端,每个端或层的命名规则不尽相同,所以在端之间的数据项命名转换就个痛点,C#中,帕斯卡命......
  • 我喜欢的.NET8 Preview 1功能
    .NET8的第一个预预览版发布了,又开启了一波新技术的学习和研究。简单过了一下.NET8Preview1,中间有两个功能是我的痛点,先睹为快。在项目中,数据从前端UI到后端(后端也分为好几层),再到数据库端,每个端或层的命名规则不尽相同,所以在端之间的数据项命名转换就个痛点,C#中,帕斯卡命......
  • >.NET Core|--Quartz.Net|--控制台应用程序
    前言#VisualStudio版本MicrosoftVisualStudioProfessional2022(64位)#Quartz.Net版本Quartz.Net3.6.3#C#语言版本(别小看这个,否则我下面的代码在你那里很可能跑不起来)10.0安装Quartz.Net我是直接通过Nuget包管理器安装的其它安装方式,也可以使用命......
  • quartz.net 配置UseClustering
    Quartz.NET配置UseClustering概述在开始之前,我们需要明确一些概念。Quartz.NET是一个强大且灵活的开源任务调度库,它可以帮助我们在.NET应用程序中实现各种定时任务。而UseClustering则是Quartz.NET提供的一项功能,用于在多个节点之间分配和处理任务。本文将教你如何通过......
  • quartz.net core
    如何使用Quartz.NetCore介绍Quartz.NetCore是一个开源的任务调度库,可以帮助开发者实现定时任务的调度和执行。本文将指导你如何使用Quartz.NetCore。首先,让我们看一下整个实现过程的流程图。实现步骤下面是使用Quartz.NetCore实现定时任务的步骤:步骤描述步......