安装 Nuget 包

▲ 这个没什么说的。

log4net.config

右键项目新建程序配置:

log4net.config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <!--配置节点-->
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
  </configSections>
  <log4net>
    <appender name="InfoAppender" type="log4net.Appender.RollingFileAppender">
      <!--日志路径-->
      <param name="File" value="Log\\Info\\" />
      <!--是否是向文件中追加日志-->
      <param name="AppendToFile" value="true" />
      <!--log保留天数-->
      <param name="MaxSizeRollBackups" value="30" />
      <!--log文件大小-->
      <param name="maximumFileSize" value="100MB"/>
      <!--日志文件名是否是固定不变的-->
      <param name="StaticLogFileName" value="false" />
      <!--日志文件名格式为:2008-08-31.log-->
      <param name="DatePattern" value="yyyy-MM-dd'_INFO''.log'" />
      <!--日志根据日期滚动-->
      <param name="RollingStyle" value="Composite" />
      <!--最小锁定模型以允许多个进程可以写入同一个文件-->
      <param name="lockingModel" type="log4net.Appender.FileAppender+MinimalLock" />
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%d [thread:%t] %-3p %F line:%L func:%c - %m%n" />
      </layout>
      <filter type="log4net.Filter.LevelMatchFilter">
        <levelToMatch  value="INFO" />
      </filter>
      <filter type="log4net.Filter.DenyAllFilter" />
    </appender>

    <appender name="DebugAppender" type="log4net.Appender.RollingFileAppender">
      <!--日志路径-->
      <param name="File" value="Log\\Debug\\" />
      <!--是否是向文件中追加日志-->
      <param name="AppendToFile" value="true" />
      <!--log保留天数-->
      <param name="MaxSizeRollBackups" value="30" />
      <!--log文件大小-->
      <param name="maximumFileSize" value="100MB"/>
      <!--日志文件名是否是固定不变的-->
      <param name="StaticLogFileName" value="false" />
      <!--日志文件名格式为:2008-08-31.log-->
      <param name="DatePattern" value="yyyy-MM-dd'_DEBUG''.log'" />
      <!--日志根据日期滚动-->
      <param name="RollingStyle" value="Composite" />
      <!--最小锁定模型以允许多个进程可以写入同一个文件-->
      <param name="lockingModel" type="log4net.Appender.FileAppender+MinimalLock" />
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%d [thread:%t] %-5p %7c - %m%n" />
      </layout>
      <filter type="log4net.Filter.LevelMatchFilter">
        <levelToMatch  value="DEBUG" />
      </filter>
      <filter type="log4net.Filter.DenyAllFilter" />
    </appender>

    <appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender">
      <!--日志路径-->
      <param name="File" value="Log\\Error\\" />
      <!--是否是向文件中追加日志-->
      <param name="AppendToFile" value="true" />
      <!--log保留天数-->
      <param name="MaxSizeRollBackups" value="30" />
      <!--log文件大小-->
      <param name="maximumFileSize" value="100MB"/>
      <!--日志文件名是否是固定不变的-->
      <param name="StaticLogFileName" value="false" />
      <!--日志文件名格式为:2008-08-31.log-->
      <param name="DatePattern" value="yyyy-MM-dd'_ERROR''.log'" />
      <!--日志根据日期滚动-->
      <param name="RollingStyle" value="Composite" />
      <!--最小锁定模型以允许多个进程可以写入同一个文件-->
      <param name="lockingModel" type="log4net.Appender.FileAppender+MinimalLock" />
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%d [thread:%t] %p %c - %m%n" />
      </layout>
      <filter type="log4net.Filter.LevelRangeFilter">
        <levelMin  value="WARN" />
        <levelMax value="FATAL"/>
      </filter>
    </appender>
    <root>
      <!--(高) OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL (低) -->
      <!--系统上线初期或发生异常可将此Level设定为DEBUG或ALL-->
      <level value="ALL" />
      <appender-ref ref="InfoAppender" />
      <appender-ref ref="DebugAppender" />
      <appender-ref ref="ErrorAppender" />
    </root>
  </log4net>
</configuration>

自动复制配置文件

LogHelper 类包装

public static class LogHelper
{
    static LogHelper()
    {
        //log4net.Config.XmlConfigurator.Configure();
        log4net.Config.XmlConfigurator.Configure(new System.IO.FileInfo("./log4net.config")); // 设置更新是自动复制
    }

    private static ILog logInfo = LogManager.GetLogger("Default");
    /// <summary>
    /// 自定义方法名,同一个方法中可只传一次
    /// </summary>
    /// <param name="className"></param>
    /// <returns></returns>
    public static ILog GetLogger(string className)
    {
        logInfo = LogManager.GetLogger(className);
        return logInfo;
    }
    /// <summary>
    /// 记录Info日志
    /// </summary>
    /// <param name="info"></param>
    public static void Info(string info)
    {
        if (logInfo.IsInfoEnabled && !string.IsNullOrEmpty(info))
        {
            logInfo.Info(info);
        }
    }
    /// <summary>
    /// 记录error日志
    /// </summary>
    /// <param name="info"></param>
    public static void Error(string info)
    {
        if (!string.IsNullOrEmpty(info))
        {
            logInfo.Error(info);
        }
    }
    /// <summary>
    /// 记录debug日志
    /// </summary>
    /// <param name="info"></param>
    public static void Debug(string info)
    {
        if (logInfo.IsDebugEnabled && !string.IsNullOrEmpty(info))
        {
            logInfo.Debug(info);
        }
    }
    /// <summary>
    /// 记录Fatal日志 致命错误
    /// </summary>
    /// <param name="info"></param>
    public static void Fatal(string info)
    {
        logInfo.Fatal(info);
    }
    /// <summary>
    /// 警告信息
    /// </summary>
    /// <param name="info"></param>
    public static void Warn(string info)
    {
        logInfo.Warn(info);
    }
}

AssemblyInfo.cs 配置

新增:

新增:

//设置独立配置文件,log4net.config
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]

使用

其他程序集使用的时候也需要引用 log4net.dll。如果需要增加新的 log 对象:GetLogger(string className) 一下。


参考:

https://blog.csdn.net/baidu_37842527/article/details/125851930

原文地址:http://www.cnblogs.com/huvjie/p/16887947.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性