net6 项目搭建及引用框架记录(log4net,autofac,exception,api result,jwt,efcore)二配置log4net

Posted 圆滚滚的胖狸

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了net6 项目搭建及引用框架记录(log4net,autofac,exception,api result,jwt,efcore)二配置log4net相关的知识,希望对你有一定的参考价值。

注意:所有的Nuget包默认都装在NET6Demo_WebApi项目下,其它类库项目按需添加

第一步,安装nuget包。 

 第二步,添加log4net的配置文件

在api层,添加文件夹Config,然后添加log4net.config文件

 log4net 在.net6 中对写入数据库并不友好,不建议写入数据库

<?xml version="1.0"?>

<configuration>
	<configSections>
		<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
	</configSections>

	<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>-->
    <root>
      <priority value="ALL"/>
      <level value="ALL"/>

      <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">
			<!--目录路径,可以是相对路径或绝对路径-->
			<file value="Log\\\\LogError\\\\"/>
      <!--防止多线程时不能写Log,官方说线程非安全-->
      <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
      <!--文件名,按日期生成文件夹-->
      <datePattern value="yyyyMMdd&quot;.log&quot;"/>
			<!--追加到文件-->
			<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="[%dHH:mm:ss]%m%n"/>
			</layout>
			<filter type="log4net.Filter.LevelRangeFilter">
				<LevelMin value="ERROR" />
				<LevelMax value="ERROR" />
			</filter>
		</appender>

		<!-- 警告 Warn.log-->
		<appender name="WarnLog" type="log4net.Appender.RollingFileAppender">
			<!--目录路径,可以是相对路径或绝对路径-->
			<file value="Log\\\\LogWarn\\\\"/>
      <!--防止多线程时不能写Log,官方说线程非安全-->
      <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
			<!--文件名,按日期生成文件夹-->
      <datePattern value="yyyyMMdd&quot;.log&quot;"/>
			<!--追加到文件-->
			<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="[%dHH:mm:ss]%m%n"/>
			</layout>
			<filter type="log4net.Filter.LevelRangeFilter">
				<LevelMin value="WARN" />
				<LevelMax value="WARN" />
			</filter>
		</appender>

		<!-- 信息 Info.log-->
		<appender name="InfoLog" type="log4net.Appender.RollingFileAppender">
			<!--目录路径,可以是相对路径或绝对路径-->
			<file value="Log\\\\LogInfo\\\\"/>
      <!--防止多线程时不能写Log,官方说线程非安全-->
      <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
      <!--文件名,按日期生成文件夹-->
      <datePattern value="yyyyMMdd&quot;.log&quot;"/>
			<!--追加到文件-->
			<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="[%dHH:mm:ss]%m%n"/>
			</layout>
			<filter type="log4net.Filter.LevelRangeFilter">
				<LevelMin value="INFO" />
				<LevelMax value="INFO" />
			</filter>
		</appender>

		<!-- 调试 Debug.log-->
		<appender name="DebugLog" type="log4net.Appender.RollingFileAppender">
			<!--目录路径,可以是相对路径或绝对路径-->
			<file value="Log\\\\LogDebug\\\\"/>
      <!--防止多线程时不能写Log,官方说线程非安全-->
      <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
      <!--文件名,按日期生成文件夹-->
      <datePattern value="yyyyMMdd&quot;.log&quot;"/>
			<!--追加到文件-->
			<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="[%dHH:mm:ss]%m%n"/>
			</layout>
			<filter type="log4net.Filter.LevelRangeFilter">
				<LevelMin value="DEBUG" />
				<LevelMax value="DEBUG" />
			</filter>
		</appender>

	</log4net>

</configuration>

在项目Utility中添加类Loh4Extention.cs

代码内容如下。主要是过滤掉日志中太多的重复信息。注意代码粘贴后会报错,多是因为没有安装包。解决方法就是哪里报错就在哪里安装包 

using Microsoft.Extensions.Logging;

namespace NET6Demo.Utility.Log

    public static class Log4Extention
    
        public static void InitLog4(ILoggingBuilder loggingBuilder)
        
            loggingBuilder.AddFilter("System", LogLevel.Warning);
            loggingBuilder.AddFilter("Microsoft", LogLevel.Warning);//过滤掉系统默认的一些日志
            loggingBuilder.AddLog4Net(new Log4NetProviderOptions()
            
                Log4NetConfigFileName = "Config/log4net.config",
                Watch = true
            );
        
    

program.cs文件中添加以下代码,添加log4net全局引用.注意代码粘贴后会报错,多是因为没有安装包,或者没有引用。解决方法就是哪里报错就在哪里安装包

#region 添加Log4net

builder.Host.ConfigureLogging((context, loggingBuilder) =>

    Log4Extention.InitLog4(loggingBuilder);
);



#endregion

使用时依赖注入,现在开始建立控制器

先建立一个基类控制器,再建一个测试控制器继承基类控制器

 BaseController.cs

using Microsoft.AspNetCore.Mvc;

namespace NET6Demo_WebApi.Controllers

    [ApiController]
    public abstract class BaseController : ControllerBase
    
        
    

TestController.cs

using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;

namespace NET6Demo_WebApi.Controllers

    public class TestController : BaseController
    
        private ILogger<TestController> _logger;
        public TestController(ILogger<TestController> logger)
        
            _logger = logger;
        

        [AllowAnonymous]
        [HttpGet("GetTest")]
        public async Task<IActionResult> GetTestResult()
        
            Console.WriteLine("测试一下输出日志");
            _logger.LogInformation("日志输出了");
            return Ok();
        
    

启动项目,来测试一下,打开swagger首页,点击Test的try it out ,然后点击 Execute ,让程序执行

控制台可以看到输出内容

 

 打开项目的bin文件夹,可以看到已经生成的log目录

找到其中的loginfo,因为刚刚的日志是用log.infomation写入的。

 

由日期生成的文件名,打开可以看到日志内容已被写入 

 到此。log4net配置完毕。注意所有使用log4net的类,都需要依赖注入ILogger

以上是关于net6 项目搭建及引用框架记录(log4net,autofac,exception,api result,jwt,efcore)二配置log4net的主要内容,如果未能解决你的问题,请参考以下文章

net6 项目搭建及引用框架记录(log4net,autofac,exception,api result,jwt,efcore)二配置log4net

net6 项目搭建及引用框架记录(log4net,autofac,exception,api result,jwt,efcore)六添加身份验证,引入JWT

net6 项目搭建及引用框架记录(log4net,autofac,exception,api result,jwt,efcore)六添加身份验证,引入JWT

net6 项目搭建及引用框架记录(log4net,autofac,exception,api result,jwt,efcore)六添加身份验证,引入JWT

net6 项目搭建及引用框架记录(log4net,autofac,exception,api result,jwt,efcore)一建立项目,使用Swagger

net6 项目搭建及引用框架记录(log4net,autofac,exception,api result,jwt,efcore)一建立项目,使用Swagger