net5 站点log4net日志处理-file、mongodb

net5站点添加log4net日志处理,记录到txt和mongodb

1、新建站点,修改为net5

 2、nuget上搜索log4net,或者使用集成的扩展Microsoft.Extensions.Logging.Log4Net.AspNetCore。这里使用了log4net。后续把log4日志集成保存到mongodb

 3、站点配增加log4net.config文件,并且再startup中增加加载配置文件的代码

log4net.Config.XmlConfigurator.Configure进行加载

4、统一增加loghelper类,用于方便调用,定义log对象

 5、代码中直接使用loghelper.info进行日志记录

6、log4net.config配置文件如下:

  

<?xml version="1.0" encoding="utf-8" ?>
<log4net>
  <!--<appender name="DebugAppender2" type="log4net.Appender.DebugAppender" >
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
    </layout>
  </appender>-->
  <!--指定日记记录方式,以滚动文件的方式(文件记录)-->
  <appender name="DebugAppender" type="log4net.Appender.RollingFileAppender">
    <!--日志路径-->
    <file value="loglogDebug" />
    <!--是否是向文件中追加日志-->
    <appendToFile value="true" />
    <!--log保留天数-->
    <param name= "MaxSizeRollBackups" value= "10"/>
    <!--每个文件最大1M-->
    <param name="maximumFileSize" value="1MB" />
    <!--日志根据日期滚动-->
    <param name="RollingStyle" value="Date" />
    <!--日志文件名格式为:logs_20080831.log-->
    <param name="DatePattern" value="&quot;logs_&quot;yyyyMMdd&quot;.log&quot;" />
    <!--日志文件名是否是固定不变的-->
    <param name="StaticLogFileName" value="false" />
    <!--布局-->
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date %5level %logger.%method [%line] - MESSAGE: %message%newline %exception" />
    </layout>
    <filter type="log4net.Filter.LevelRangeFilter">
      <!--OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、 ALL-->
      <levelMin value="DEBUG" />
      <levelMax value="DEBUG" />
    </filter>
  </appender>
  <!--指定日记记录方式,以滚动文件的方式(文件记录)-->
  <appender name="InfoAppender" type="log4net.Appender.RollingFileAppender">
    <!--日志路径-->
    <file value="loglogInfo" />
    <!--是否是向文件中追加日志-->
    <appendToFile value="true" />
    <!--log保留天数-->
    <param name= "MaxSizeRollBackups" value= "10"/>
    <!--每个文件最大1M-->
    <param name="maximumFileSize" value="1MB" />
    <!--日志根据日期滚动-->
    <param name="RollingStyle" value="Date" />
    <!--日志文件名格式为:logs_20080831.log-->
    <param name="DatePattern" value="&quot;logs_&quot;yyyyMMdd&quot;.log&quot;" />
    <!--日志文件名是否是固定不变的-->
    <param name="StaticLogFileName" value="false" />
    <!--布局-->
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date %5level %logger.%method [%line] - MESSAGE: %message%newline %exception" />
    </layout>
    <filter type="log4net.Filter.LevelRangeFilter">
      <!--OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、 ALL-->
      <levelMin value="INFO" />
      <levelMax value="INFO" />
    </filter>
  </appender>
  <!--指定日记记录方式,以滚动文件的方式(文件记录)-->
  <appender name="WarnAppender" type="log4net.Appender.RollingFileAppender">
    <!--日志路径-->
    <file value="loglogWarn" />
    <!--是否是向文件中追加日志-->
    <appendToFile value="true" />
    <!--log保留天数-->
    <param name= "MaxSizeRollBackups" value= "10"/>
    <!--每个文件最大1M-->
    <param name="maximumFileSize" value="1MB" />
    <!--日志根据日期滚动-->
    <param name="RollingStyle" value="Date" />
    <!--日志文件名格式为:logs_20080831.log-->
    <param name="DatePattern" value="&quot;logs_&quot;yyyyMMdd&quot;.log&quot;" />
    <!--日志文件名是否是固定不变的-->
    <param name="StaticLogFileName" value="false" />
    <!--布局-->
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date %5level %logger.%method [%line] - MESSAGE: %message%newline %exception" />
    </layout>
    <filter type="log4net.Filter.LevelRangeFilter">
      <!--OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、 ALL-->
      <levelMin value="WARN" />
      <levelMax value="WARN" />
    </filter>
  </appender>
  <!--指定日记记录方式,以滚动文件的方式(文件记录)-->
  <appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender">
    <!--日志路径-->
    <file value="loglogError" />
    <!--是否是向文件中追加日志-->
    <appendToFile value="true" />
    <!--log保留天数-->
    <param name= "MaxSizeRollBackups" value= "10"/>
    <!--每个文件最大1M-->
    <param name="maximumFileSize" value="1MB" />
    <!--日志根据日期滚动-->
    <param name="RollingStyle" value="Date" />
    <!--日志文件名格式为:logs_20080831.log-->
    <param name="DatePattern" value="&quot;logs_&quot;yyyyMMdd&quot;.log&quot;" />
    <!--日志文件名是否是固定不变的-->
    <param name="StaticLogFileName" value="false" />
    <!--布局-->
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date %5level %logger.%method [%line] - MESSAGE: %message%newline %exception" />
    </layout>
    <filter type="log4net.Filter.LevelRangeFilter">
      <!--OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、 ALL-->
      <levelMin value="ERROR" />
      <levelMax value="ERROR" />
    </filter>
  </appender>
  <root>
    <level value="ALL"/>
    <appender-ref ref="DebugAppender" />
    <appender-ref ref="InfoAppender" />
    <appender-ref ref="WarnAppender" />
    <appender-ref ref="ErrorAppender" />
  </root>
</log4net>

7、记录到文本文件的则到此结束

8、配置记录到mongodb

引用nuget:log4mongo-net。项目配置相对简单一些,可以直接github查找源代码进行自己的配置修改等

引用完后,loghelper的logName对应改成配置文件定义的名称,不然会记录不到

9、配置文件如下:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <!--声明一个名为“log4net”的自定义配置节-->
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
  </configSections>
  <!--log4net配置信息-->
  <log4net>
    <logger name="MongoDBLogger">
      <level value="ALL"/>
      <appender-ref ref="MongoDBAppender" />
    </logger>
    <appender name="MongoDBAppender" type="By56.Services.Common.Log.Mongo.MongoDBAppender, By56.Services.Common">
      <connectionString value="mongodb://root:123@192.168.1.14:27017/ByLog?authSource=admin" />
      <CollectionName value="logs_demo"/>
    </appender>
  </log4net>
</configuration>

这里CollectionName只能定义一个名字,不能按日期拆分等。如果需要,需要下载源码,自己编译处理。

源码就四个文件。想自定义格式,可以找到MongoDBAppender.cs文件

 找到这个方法。这里定义了如果没有名字,则使用默认的logs

可以自己在这个基础上进行修改,如添加{yyyyMMdd}格式,判断名称带有这个的,那么直接把这串替换成年月日方式,或者定义{yyyy}按年拆分格式,{yyyyMm}按月拆分格式

具体解析这个格式的代码很简单,这里不再列出,直接在这个变量后面加上自己的逻辑就ok了

注意:loghelper里面logName必须使用配置文件里面的MongoDBAppender,否则记录不成功

原文地址:https://www.cnblogs.com/Skyxu/p/14543673.html