本文所有配置都是在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. selenium定位方法(二)

    selenium定位方法(二)  1.xpath定位:xpath是在XML中查找节点所在的路径的表达式 1)绝对路径的Xpath表达式 例:/html/body/div/div[1]/ul//li[3 ...

  2. python数值运算 四则运算

    数值运算 描述 获得用户输入的一个字符串,格式如下:‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬ ...

  3. element UI 上传文件成功后 - 清空文件

    request({ url: '/jiekou', method: 'post', data }).then(res => { this.$message({ type: 'success', ...

  4. Urule开源版系列4——Core包核心接口之规则解析过程

    Urule运行规则文件,是如何进行的,通过一个请求doTest来探一下 com.bstek.urule.console.servlet.respackage.PackageServletHandler ...

  5. 安装oracleXE快捷版(二)

    -bash-3.2$ 是oracle用户下的提示符 [root@localhost ~]# 是root用户下的提示符 #用root去修改oracle用户的密码123456[root@localhost ...

  6. vim编辑器 与etc目录

    第1章         目录结构 1.1  vim  vim故障 vim  是vi的升级版本 vi类似于文本文档  vim类似于notepad++ 编辑 必须先安装vim命令 yum -y insta ...

  7. 精华技巧,学会这几招可以假装是Python高手

    Python里面的技巧真的是太多了,菜鸟如何假装自己的是高手呢,下面教大家几招快速变成老司机的招数,尤其是在实战的项目中,用上这几招一定让你周围的同事刮目相看,哇这个代码有两把刷子. 很多人学习pyt ...

  8. [AngstromCTF 2019]Cookie Cutter

    最近看到了一个国外高中生的CTF比赛,翻了一下往年的例题,发现有一道关于jwt session伪造的题比较有意思,记录一下 题目简介中给出了我们题目的地址和后端处理的源码,看看源码先代码审计一下: c ...

  9. vue问题整理

    生命周期面试题 1.什么是 vue 生命周期 vue 实例从创建到销毁的过程就是生命周期. 也就是从开始创建.初始化数据.编译模板.挂在 dom -> 渲染.更新 -> 渲染.卸载等一系列 ...

  10. Activiti7 任务人员动态分配(UEL-Value方式)

    先修改流程图 测试之前记得先删除之前发布的流程定义,并重新发布改过的 /** * 使用UEL-Value动态分配任务人员 */ @Test public void uelValue(){ // 获取R ...