本文所有配置都是在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. 虚拟化技术之kvm虚拟机创建工具qemu-kvm

    在前边的博客中我们介绍了如何创建kvm虚拟机,以及一些常用的工具的介绍和使用,今天我们来了解下kvm原始工具qemu-kvm:为什么说qemu-kvm是一个原始的工具呢,如果你用kvm虚拟机,心细的你 ...

  2. .NET 设计模式 思维导图

    关于.NET 设计模式 思维导图 背景说明 以前都在匆匆忙忙写代码,在无穷无尽的需求中间左冲右突,最近终于有一些闲暇的时间,来总结和思考编程中的一些核心思想,磨刀不误砍柴的功夫,期望通过总结和学习,能 ...

  3. 计算机网络-应用层(2)FTP协议

    文件传输协议(FTP,File Transfer Protocol)是Internet上使用最广泛的文件传送协议.FTP提供交互式的访问,允许客户指明文件的类型与格式,并允许文件具有存取权限.它屏蔽了 ...

  4. 区块链入门到实战(35)之Solidity – 变量作用域

    局部变量的作用域仅限于定义它们的函数,但是状态变量可以有三种作用域类型. Public – 公共状态变量可以在内部访问,也可以通过消息访问.对于公共状态变量,将生成一个自动getter函数. Inte ...

  5. 《Java从入门到失业》第三章:基础语法及基本程序结构(四):基本数据类型(字符编码和char型)

    3.6.4字符编码 咦?怎么好像有东西乱入了?不是讲基本数据类型么?哈哈,因为还剩下最后一个char型了,因为char型会牵涉到Unicode编码相关,因此我决定先科普一下字符集编码. 我儿子现在上小 ...

  6. 8.深入k8s:资源控制Qos和eviction及其源码分析

    转载请声明出处哦~,本篇文章发布于luozhiyun的博客:https://www.luozhiyun.com,源码版本是1.19 又是一个周末,可以愉快的坐下来静静的品味一段源码,这一篇涉及到资源的 ...

  7. 23种设计模式 - 接口隔离(Facade - Proxy - Mediator - Adapter)

    其他设计模式 23种设计模式(C++) 每一种都有对应理解的相关代码示例 → Git原码 ⌨ 接口隔离 在组件构建过程中,某些接口之间直接的依赖常常会带来很多问题.甚至根本无法实现.采用添加一层间接( ...

  8. 详细分析栈和队列的数据结构的实现过程(Java 实现)

    目录 栈和队列的数据结构的实现过程(Java 实现) 栈的数据结构的实现 栈的基础知识回顾 栈的常见应用 基于数组的栈的实现 具体代码设计 基于数组的栈简单的时间复杂度分析 关于栈的一个算法应用:括号 ...

  9. e3mall商城的归纳总结5之修改商品分类、e3mall—content的搭建

    说在前面的话 本节基本上没有用到新的知识点.主要还是对数据库的增删改查以及创建了一个新的内容模块. 新增商品分类 由于easyUI的Tree需要三个字段(Id.state.text), [{ &quo ...

  10. Spring Security如何优雅的增加OAuth2协议授权模式

    一.什么是OAuth2协议? OAuth 2.0 是一个关于授权的开放的网络协议,是目前最流行的授权机制. 数据的所有者告诉系统,同意授权第三方应用进入系统,获取这些数据.系统从而产生一个短期的进入令 ...