1. 使用NuGet 安装 log4net。
  2. 创建log4net.config文件。
  3. 配置log4net.config文件。
    `
<!-- 日志默认值节点 -->
<root>
  <!-- 默认日志对象级别 -->
  <!--(高) OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL (低) -->
  <level value="all" />
  <!-- 默认日志记录方式 ref为<appender>节点的name属性-->
  <appender-ref ref="MyColoredConsoleAppender"/>
  <!--<appender-ref ref="MyRollingFileAppender"/>-->
</root>
<!-- 注意!!! <root>节点和<logger>节点,如果同时出现,会先执行root的内容,再执行logger的内容,有可能会出现重复插入记录的情况,解决方案:默认节点不设置默认记录方式 -->
<!-- 指定类别日志设置节点 name为LogManager.GetLogger("logger.db.debug")中的name参数 -->
<!-- 文本日志 -->
<logger name="debug">
  <!-- 该日志对象的级别(可多个级别设置在一起,公用同一个记录方式)-->
  <level value="DEBUG"/>
  <!-- 该日志对象的记录方式(可多个记录方式设置在一起,同时记录到多种媒介上) -->
  <appender-ref ref="RollingFileAppender_Debug"/>
</logger>
<logger name="info">
  <level value="INFO" />
  <appender-ref ref="RollingFileAppender_Info"/>
</logger>
<logger name="error">
  <level value="ERROR" />
  <appender-ref ref="RollingFileAppender_Error"/>
</logger>

<!-- AdoNetAppender:利用ADO.NET记录到数据库的日志。ConsoleAppender:将日志输出到控制台。RollingFileAppender:将日志以回滚文件(重复操作原始文件)的形式写到文件中。-->
<!-- 控制台显示日志 -->
<appender name="MyColoredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender">
  <!-- 设置不同级别控制台显示的不同颜色 -->
  <mapping>
    <level value="INFO" />
    <foreColor value="Green" />
  </mapping>
  <mapping>
    <level value="ERROR" />
    <foreColor value="Red, HighIntensity" />
  </mapping>
  <!-- 记录的格式。 -->
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%date{HH:mm:ss,fff} [%-5level] %m %n" />
  </layout>
  <!-- 过滤器type有如下几种类型
  log4net.Filter.DenyAllFilter        丢弃所有日志事件。
  log4net.Filter.LevelMatchFilter      准确匹配事件等级。
  log4net.Filter.LevelRangeFilter      匹配一个范围的等级。
  log4net.Filter.LoggerMatchFilter    匹配一个日志器名字的开始。
  log4net.Filter.PropertyFilter        匹配指定属性名称的子字符串。
  log4net.Filter.StringMatchFilter    匹配事件消息的子字符串。
  -->
  <filter type="log4net.Filter.LevelRangeFilter">
    <!-- 控制输出日志的级别范围 -->
    <param name="LevelMin" value="Info" />
    <param name="LevelMax" value="Error" />
  </filter>
</appender>

<!-- 文件形式记录日志-Debug -->
<appender name="RollingFileAppender_Debug" type="log4net.Appender.RollingFileAppender">
  <!--日志文件路径,按文件大小方式输出时在这里指定文件名,并且前面的日志按天在文件名后自动添加当天日期形成文件-->
  <param name= "File" value= "Log\\Debug\\"/>
  <!--是否是向文件中追加日志-->
  <param name= "AppendToFile" value= "true"/>
  <!--记录日志写入文件时,不锁定文本文件-->
  <!--<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />-->
  <!--Unicode编码-->
  <!--<Encoding value="UTF-8" />-->
  <!--最多产生的日志文件数,value="-1"为不限文件数-->
  <!--<param name="MaxSizeRollBackups" value="10" />-->
  <!--log保留天数-->
  <param name= "MaxSizeRollBackups" value= "10"/>
  <!--日志文件名是否是固定不变的(是否只写到一个文件中)-->
  <param name= "StaticLogFileName" value= "false"/>
  <!--按日期产生文件夹,文件名[在日期方式与混合方式下使用]日志文件名格式为:2008-08-31.log -->
  <param name= "DatePattern" value= "yyyyMMdd&quot;.log&quot;"/>
  <!--<param name="DatePattern" value="yyyy-MM-dd/"-ReflectionLayout.log=""""  />
  <param name="DatePattern" value="yyyyMMdd/yyyyMMdd"-TimerServer.log""  />
  <param name="DatePattern" value="yyyyMMdd/"TimerServer/TimerServer.log""  />-->
  <!--按照何种方式产生多个日志文件(日期[Date],文件大小[Size],混合[Composite])-->
  <param name="RollingStyle" value="Date" />
  <!--每个文件的大小。只在混合方式与文件大小方式下使用,超出大小的在文件名后自动增加1重新命名-->
  <param name="maximumFileSize" value="500KB" />
  <!--记录的格式。-->
  <layout type="log4net.Layout.PatternLayout">
    <param name="ConversionPattern" value="%d [%t] [%c] : %m %n" />
  </layout>
</appender>
<appender name="RollingFileAppender_Info" type="log4net.Appender.RollingFileAppender">
  <param name= "File" value= "Log\\Info\\"/>
  <param name= "AppendToFile" value= "true"/>
  <param name= "MaxSizeRollBackups" value= "10"/>
  <param name= "StaticLogFileName" value= "false"/>
  <param name= "DatePattern" value= "yyyyMMdd&quot;.log&quot;"/>
  <param name="RollingStyle" value="Date" />
  <param name="maximumFileSize" value="500KB" />
  <layout type="log4net.Layout.PatternLayout">
    <param name="ConversionPattern" value="%d [%t] [%c] : %m %n" />
  </layout>
</appender>
<appender name="RollingFileAppender_Error" type="log4net.Appender.RollingFileAppender">
  <param name= "File" value= "Log\\Error\\"/>
  <param name= "AppendToFile" value= "true"/>
  <param name= "MaxSizeRollBackups" value= "10"/>
  <param name= "StaticLogFileName" value= "false"/>
  <param name= "DatePattern" value= "yyyyMMdd&quot;.log&quot;"/>
  <param name="RollingStyle" value="Date" />
  <param name="maximumFileSize" value="500KB" />
  <layout type="log4net.Layout.PatternLayout">
    <param name="ConversionPattern" value="%d [%t] [%c] : %m %n" />
  </layout>
</appender>

4. C#代码

using log4net;
using log4net.Config;
using System;
using System.IO;
namespace Log4Test
{
    class Program
    {
        static void Main(string[] args)
        {
            //配置文件
            var logCfg = new FileInfo(AppDomain.CurrentDomain.BaseDirectory + "log4net.config");
            //加载配置
            XmlConfigurator.ConfigureAndWatch(logCfg);
            // 配置文件中logger节点
            var debug = LogManager.GetLogger("debug");
            // 写Debug Log
            debug.Debug("test");
            Console.WriteLine("完成!");
            Console.ReadKey();
        }
    }
}

`
5.执行后 输出内容

2020-10-24 12:57:07,929 [1] DEBUG debug - test debug