本文所有配置都是在core3.1环境下。

首先看看最终的效果。

请求监控:对每次请求的相关信息做一个记录。

全局异常:我不想我的错误信息,跟其他的信息混合在一起,查看的时候不大方便。

应用日志:这个主要用于记录生产环境的一些调试信息。

这里关于关于Log4Net在Core中的配置我就不叙述了,百度一大把的。。

下面重点介绍配置文件。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<log4net>
<appender name="DebugAppender" type="log4net.Appender.DebugAppender" >
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
</layout>
</appender>
<!--全局异常日志-->
<appender name="RollingFile" type="log4net.Appender.RollingFileAppender">
<file value="logs/全局异常/" />
<appendToFile value="true" />
<rollingStyle value="Composite" />
<staticLogFileName value="false" />
<datePattern value="yyyyMMdd'.log'" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="2MB" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%newline %n记录时间:%date{yyyy-MM-dd HH:mm:ss fff} %n线程ID:[%thread] %n日志级别:%-5level %n跟踪描述:%message%newline %n"/>
</layout>
<filter type="log4net.Filter.LevelRangeFilter"><!--日志过滤器:日志最大级别和最小级别。我现在的是全局错误记录所以限定级别为Error-->
<levelMin value="Error" />
<levelMax value="Error" />
</filter>
</appender>
<!--监控日志-->
<appender name="MonitorAppender" type="log4net.Appender.RollingFileAppender">
<param name="File" value="logs/请求监控/" />
<param name="AppendToFile" value="true" />
<param name="MaxFileSize" value="10240" />
<param name="MaxSizeRollBackups" value="100" />
<param name="StaticLogFileName" value="false" />
<param name="DatePattern" value="yyyyMMdd'.log'" />
<param name="RollingStyle" value="Date" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%newline %n记录时间:%date{yyyy-MM-dd HH:mm:ss fff} %n线程ID:[%thread] %n日志级别:%-5level %n跟踪描述:%message%newline %n"/>
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="Warn" />
<levelMax value="Warn" />
</filter>
</appender>
<!--程序日志-->
<appender name="AppLogs" type="log4net.Appender.RollingFileAppender">
<param name="File" value="logs/应用日志/" />
<param name="AppendToFile" value="true" />
<param name="MaxFileSize" value="10240" />
<param name="MaxSizeRollBackups" value="100" />
<param name="StaticLogFileName" value="false" />
<param name="DatePattern" value="yyyyMMdd'.log'" />
<param name="RollingStyle" value="Date" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%newline %n记录时间:%date{yyyy-MM-dd HH:mm:ss fff} %n线程ID:[%thread] %n日志级别:%-5level %n跟踪描述:%message%newline %n"/>
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="DEBUG" />
<levelMax value="Info" />
</filter>
</appender>
<root>
<level value="All"/>
<appender-ref ref="MonitorAppender" />
<!--<level value="Debug" />-->
<appender-ref ref="RollingFile" />
<appender-ref ref="AppLogs" />
<!--<appender-ref ref="DebugAppender" />-->
</root>
<!--请求日志记录-->
<logger name="LLZ.Project.WebApi.Middleware.RequestLogMiddleware"><!--这个name的命名的意思是:是我中间件cs文件的命名空间-->
<level value="Warn" />
</logger>
<!--全局错误记录-->
<logger name="LLZ.Project.WebApi.Filters.SysExceptionFilter">
<level value="Error" />
</logger>
<!--调试,以及生产环境日志-->
<logger name="LLZ.Project.WebApi.Helper.LogHelper">
<level value="DEBUG" />
<level value="INFO" />
</logger>
</log4net>
</configuration>

列一下Log4的日志级别等级,优先级从高到低依次为:OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、 ALL。

首先这个多文件夹的实现思路,需要配置多次。而且每个配置的日志级别是做了限制的。

比如我的全局错误记录,用的日志级别是Error,那么我要实现的效果就是这个文件夹下的所有日志都只记录错误信息,所以我在配置的时候在过滤器中完全限定为Error。

这里说一下我踩的坑,在配置应用日志的时候,我一直没有在过滤器中加上LevelMax,从而导致我的请求记录都记录到了这个日志文件里面。这是因为优先级的原因,因为我请求记录日志的级别是Warn,

比Info高,所以才会出现这种情况,之后我加上LevelMax完全限定死,就没有这种情况了。

ps:因为个人比较喜欢这种内容细分,让我排除错误或者开发更加便捷。

完结!!!

Asp.Net Core Log4Net 配置分多个文件记录日志(不同日志级别)的更多相关文章

  1. ASP.NET Core的配置(4):多样性的配置来源[中篇]

    我们在本篇文章中会介绍三种针对物理文件的ConfiguationProvider,它们分别是针对JSON文件的JsonConfiguationProvider,针对XML文件的XmlConfiguat ...

  2. ASP.NET Core的配置(3): 将配置绑定为对象[下篇]

    我们在<读取配置信息>通过实例的形式演示了如何利用Options模型以依赖注入的方式直接获取由指定配置节绑定生成的Options对象,我们再次回顾一下当初我们编写的程序.如下面的代码片段所 ...

  3. ASP.NET Core的配置(2):配置模型详解

    在上面一章我们以实例演示的方式介绍了几种读取配置的几种方式,其中涉及到三个重要的对象,它们分别是承载结构化配置信息的Configuration,提供原始配置源数据的ConfigurationProvi ...

  4. ASP.NET Core的配置(1):读取配置信息

    提到"配置"二字,我想绝大部分.NET开发人员脑海中会立马浮现出两个特殊文件的身影,那就是我们再熟悉不过的app.config和web.config,多年以来我们已经习惯了将结构化 ...

  5. ASP.NET Core Identity 配置 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core Identity 配置 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Identity 配置 上一章节我们简单介绍了下 Id ...

  6. Asp.net Core + Log4net + ELK 搭建日志中心

    原文:Asp.net Core + Log4net + ELK 搭建日志中心 Docker中一键安装ELK 对于这种工具类的东西,第一步就直接到docker的hub中查找了,很幸运,不仅有Elasti ...

  7. ASP.NET Core的配置(5):配置的同步[设计篇]

    本节所谓的"配置同步"主要体现在两个方面:其一,如何监控配置源并在其变化的时候自动加载其数据,其目的是让应用中通过Configuration对象承载的配置与配置源的数据同步:其二. ...

  8. ASP.NET Core的配置(5):配置的同步[ 实例篇]

    ConfigurationBuilder在生成以Configuration对象的时候会利用注册其中的ConfigurationProvider加载原始的配置数据,那么一旦配置源中的数据发生变化,应用程 ...

  9. ASP.NET Core的配置(4):多样性的配置来源[下篇]

    我们在上篇和中篇对配置模型中默认提供的各种ConfigurationProvider进行了深入详尽的介绍,如果它们依然不能满足项目中的配置需求,我们可以还可以通过自定义ConfigurationPro ...

随机推荐

  1. await,async 我要把它翻个底朝天,这回你总该明白了吧

    一:背景 1. 讲故事 await,async 这玩意的知识点已经被人说的烂的不能再烂了,看似没什么好说的,但我发现有不少文章还是从理论上讲述了这两个语法糖的用法,懂得还是懂,不懂的看似懂了过几天又不 ...

  2. OI常用数学定理&方法总结

    组合数计算($O(n)$) https://www.cnblogs.com/linzhuohang/p/11548813.html Lucas定理 如果要计算很大的组合数,但模数较小,考虑这个方法 对 ...

  3. Gradle Wrapper

    Gradle Wrapper 当把本地一个项目放入到远程版本库的时候,如果这个项目是以gradle构建的,那么其他人从远程仓库拉取代码之后如果本地没有安装过gradle会无法编译运行,如果对gradl ...

  4. Jeecg-Cloud学习之路(一)

    首先,Spring-Cloud目前是行业的潮流,貌似不会就落后了,笔者为了不脱离大部队只能深入学习一下了. 其次.跳槽到一家公司,给公司推荐了Jeecg-Boot的开发平台,那么为了后面扩展为clou ...

  5. 单元测试利器Mockito框架

    什么是Mock Mock 的中文译为仿制的,模拟的,虚假的.对于测试框架来说,即构造出一个模拟/虚假的对象,使我们的测试能顺利进行下去. Mock 测试就是在测试过程中,对于某些 不容易构造(如 Ht ...

  6. Nginx Ingress 高并发实践

    概述 Nginx Ingress Controller 基于 Nginx 实现了 Kubernetes Ingress API,Nginx 是公认的高性能网关,但如果不对其进行一些参数调优,就不能充分 ...

  7. googleEarth

    中国航天科技集团有限公司 http://www.spacechina.com/n25/n144/n210/index.html Celestia [官网]: https://celestia.spac ...

  8. Spine学习一 -渲染组件

    一共有四个播放的组件: SkeletonAnimation:有点儿类似于 unity的 Animation,挂上一个spine资源,就可以跑了 SkeletonRenderer:SkeletonAni ...

  9. python小白入门基础(二:变量)

    #变量:可以改变的量就是变量,实际上是由内存开辟的一块空间,临时存在内存中,以便后续代码使用.#作用:代指内存中某个地址中的内容. #1.变量的概念name = "王五"name ...

  10. 跟着尚硅谷系统学习Docker-【day03】

    day03-20200715   p15.docker容器命令(下)   以守护进程的形式启动 [docker run -d 容器名]后台运行 启动了后又关闭了,与前台没有交互,立刻就kill了.前台 ...