log4net 的简单配置

安装 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) 一下。




更新下配置:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <!--配置节点-->
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
  </configSections>
  <log4net>

    <!--自定义 logger-->

    <appender name="CSVAppender" type="log4net.Appender.RollingFileAppender">
      <!--日志路径-->
      <param name="File" value="D:\\Data\\RunData\\" />
      <!--是否是向文件中追加日志-->
      <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'''.csv'" />
      <!--日志根据日期滚动-->
      <param name="RollingStyle" value="Composite" />
      <!--最小锁定模型以允许多个进程可以写入同一个文件-->
      <param name="lockingModel" type="log4net.Appender.FileAppender+MinimalLock" />
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%d{yyyy'/'MM'/'dd HH':'mm':'ss},%m%n" />
      </layout>
      <filter type="log4net.Filter.LevelMatchFilter">
        <levelToMatch  value="INFO" />
      </filter>
      <filter type="log4net.Filter.DenyAllFilter" />
    </appender>

    <!--默认 Root logger-->

    <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="ERROR" />
        <levelMax value="ERROR"/>
      </filter>
      <!--<filter type="log4net.Filter.LevelMatchFilter">
        <levelToMatch  value="ERROR" />
      </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>

    <!--自定义 Logger-->

    <logger name="Custom_CSV" additivity="false">
      <level value="ALL"/>
      <appender-ref ref="CSVAppender" />
    </logger>
  </log4net>
</configuration>

自定义一个暴力的

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <!--配置节点-->
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
  </configSections>
  <log4net>

    <!--自定义 csv logger-->

    <appender name="CSVAppender_1" type="log4net.Appender.RollingFileAppender">
      <!--日志路径-->
      <param name="File" value="D:\\Data\\RunData\\" />
      <!--是否是向文件中追加日志-->
      <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'_WorkData''.csv'" />
      <!--日志根据日期滚动-->
      <param name="RollingStyle" value="Composite" />
      <!--最小锁定模型以允许多个进程可以写入同一个文件-->
      <param name="lockingModel" type="log4net.Appender.FileAppender+MinimalLock" />
      <layout type="log4net.Layout.PatternLayout">
        <!--<header value="时间,标题1,标题1,标题1&#13;&#10;" />-->
        <param name="ConversionPattern" value="%m%n" />
        <!--<footer  value="时间,设备号,上料Tray盘SN,治具SN,治具已用次数,治具1穴,治具2穴&#13;&#10;" />-->
        <!--<footer  value="时间,标题1,标题1,标题1&#13;&#10;" />-->
      </layout>
      <filter type="log4net.Filter.LevelMatchFilter">
        <levelToMatch  value="INFO" />
      </filter>
      <filter type="log4net.Filter.DenyAllFilter" />
    </appender>

    <appender name="CSVAppender_2" type="log4net.Appender.RollingFileAppender">
      <!--日志路径-->
      <param name="File" value="D:\\Data\\RunData\\" />
      <!--是否是向文件中追加日志-->
      <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'_WorkData''.csv'" />
      <!--日志根据日期滚动-->
      <param name="RollingStyle" value="Composite" />
      <!--最小锁定模型以允许多个进程可以写入同一个文件-->
      <param name="lockingModel" type="log4net.Appender.FileAppender+MinimalLock" />
      <layout type="log4net.Layout.PatternLayout">
        <!--<header value="时间,标题1,标题1,标题1&#13;&#10;" />-->
        <param name="ConversionPattern" value="%m%n" />
        <!--<footer  value="时间,标题1,标题2,标题3&#13;&#10;" />-->
        <!--<footer  value="时间,标题1,标题1,标题1&#13;&#10;" />-->
      </layout>
      <filter type="log4net.Filter.LevelMatchFilter">
        <levelToMatch  value="INFO" />
      </filter>
      <filter type="log4net.Filter.DenyAllFilter" />
    </appender>

    <appender name="CSVAppender_3" type="log4net.Appender.RollingFileAppender">
      <!--日志路径-->
      <param name="File" value="D:\\Data\\RunData\\" />
      <!--是否是向文件中追加日志-->
      <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'_WorkData''.csv'" />
      <!--日志根据日期滚动-->
      <param name="RollingStyle" value="Composite" />
      <!--最小锁定模型以允许多个进程可以写入同一个文件-->
      <param name="lockingModel" type="log4net.Appender.FileAppender+MinimalLock" />
      <layout type="log4net.Layout.PatternLayout">
        <!--<header value="时间,标题1,标题1,标题1&#13;&#10;" />-->
        <param name="ConversionPattern" value="%m%n" />
        <!--<footer  value="时间,设备号,治具1SN,治具1使用次数,治具2SN,治具2使用次数,压力1,压力2,压力3,压力4&#13;&#10;" />-->
        <!--<footer  value="时间,标题1,标题1,标题1&#13;&#10;" />-->
      </layout>
      <filter type="log4net.Filter.LevelMatchFilter">
        <levelToMatch  value="INFO" />
      </filter>
      <filter type="log4net.Filter.DenyAllFilter" />
    </appender>

    <appender name="CSVAppender_4" type="log4net.Appender.RollingFileAppender">
      <!--日志路径-->
      <param name="File" value="D:\\Data\\RunData\\" />
      <!--是否是向文件中追加日志-->
      <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'_WorkData''.csv'" />
      <!--日志根据日期滚动-->
      <param name="RollingStyle" value="Composite" />
      <!--最小锁定模型以允许多个进程可以写入同一个文件-->
      <param name="lockingModel" type="log4net.Appender.FileAppender+MinimalLock" />
      <layout type="log4net.Layout.PatternLayout">
        <!--<header value="时间,标题1,标题1,标题1&#13;&#10;" />-->
        <param name="ConversionPattern" value="%m%n" />
        <!--<footer  value="时间,标题1,标题2,标题3&#13;&#10;" />-->
        <!--<footer  value="时间,标题1,标题1,标题1&#13;&#10;" />-->
      </layout>
      <filter type="log4net.Filter.LevelMatchFilter">
        <levelToMatch  value="INFO" />
      </filter>
      <filter type="log4net.Filter.DenyAllFilter" />
    </appender>

    <appender name="CSVAppender_5" type="log4net.Appender.RollingFileAppender">
      <!--日志路径-->
      <param name="File" value="D:\\Data\\RunData\\" />
      <!--是否是向文件中追加日志-->
      <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'_WorkData''.csv'" />
      <!--日志根据日期滚动-->
      <param name="RollingStyle" value="Composite" />
      <!--最小锁定模型以允许多个进程可以写入同一个文件-->
      <param name="lockingModel" type="log4net.Appender.FileAppender+MinimalLock" />
      <layout type="log4net.Layout.PatternLayout">
        <!--<header value="时间,标题1,标题1,标题1&#13;&#10;" />-->
        <param name="ConversionPattern" value="%m%n" />
        <!--<footer  value="时间,标题1,标题2,标题3&#13;&#10;" />-->
        <!--<footer  value="时间,标题1,标题1,标题1&#13;&#10;" />-->
      </layout>
      <filter type="log4net.Filter.LevelMatchFilter">
        <levelToMatch  value="INFO" />
      </filter>
      <filter type="log4net.Filter.DenyAllFilter" />
    </appender>

    <appender name="CSVAppender_6" type="log4net.Appender.RollingFileAppender">
      <!--日志路径-->
      <param name="File" value="D:\\Data\\RunData\\" />
      <!--是否是向文件中追加日志-->
      <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'_WorkData''.csv'" />
      <!--日志根据日期滚动-->
      <param name="RollingStyle" value="Composite" />
      <!--最小锁定模型以允许多个进程可以写入同一个文件-->
      <param name="lockingModel" type="log4net.Appender.FileAppender+MinimalLock" />
      <layout type="log4net.Layout.PatternLayout">
        <!--<header value="时间,标题1,标题1,标题1&#13;&#10;" />-->
        <param name="ConversionPattern" value="%m%n" />
        <!--<footer  value="时间,标题1,标题2,标题3&#13;&#10;" />-->
        <!--<footer  value="时间,标题1,标题1,标题1&#13;&#10;" />-->
      </layout>
      <filter type="log4net.Filter.LevelMatchFilter">
        <levelToMatch  value="INFO" />
      </filter>
      <filter type="log4net.Filter.DenyAllFilter" />
    </appender>

    <appender name="CSVAppender_7" type="log4net.Appender.RollingFileAppender">
      <!--日志路径-->
      <param name="File" value="D:\\Data\\RunData\\" />
      <!--是否是向文件中追加日志-->
      <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'_WorkData''.csv'" />
      <!--日志根据日期滚动-->
      <param name="RollingStyle" value="Composite" />
      <!--最小锁定模型以允许多个进程可以写入同一个文件-->
      <param name="lockingModel" type="log4net.Appender.FileAppender+MinimalLock" />
      <layout type="log4net.Layout.PatternLayout">
        <!--<header value="时间,标题1,标题1,标题1&#13;&#10;" />-->
        <param name="ConversionPattern" value="%m%n" />
        <!--<footer  value="时间,标题1,标题2,标题3&#13;&#10;" />-->
        <!--<footer  value="时间,标题1,标题1,标题1&#13;&#10;" />-->
      </layout>
      <filter type="log4net.Filter.LevelMatchFilter">
        <levelToMatch  value="INFO" />
      </filter>
      <filter type="log4net.Filter.DenyAllFilter" />
    </appender>

    <appender name="CSVAppender_8" type="log4net.Appender.RollingFileAppender">
      <!--日志路径-->
      <param name="File" value="D:\\Data\\RunData\\" />
      <!--是否是向文件中追加日志-->
      <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'_WorkData''.csv'" />
      <!--日志根据日期滚动-->
      <param name="RollingStyle" value="Composite" />
      <!--最小锁定模型以允许多个进程可以写入同一个文件-->
      <param name="lockingModel" type="log4net.Appender.FileAppender+MinimalLock" />

      <layout type="log4net.Layout.DynamicPatternLayout">
        <param name="ConversionPattern" value="%m%n" />
        <!--<param name="Header" value="时间,设备号,下料TraySN,治具SN,治具使用次数,治具穴位,Tray盘穴位%newline" />-->
        <!--<param name="Footer" value="时间,设备号,下料TraySN,治具SN,治具使用次数,治具穴位,Tray盘穴位%newline" />-->
      </layout>
      
      <!--<layout type="log4net.Layout.PatternLayout">
        --><!--<header value="时间,标题1,标题1,标题1&#13;&#10;" />--><!--
        <param name="ConversionPattern" value="%m%n" />
        <footer  value="时间,设备号,下料TraySN,治具SN,治具使用次数,治具穴位,Tray盘穴位&#13;&#10;" />
        --><!--<footer  value="时间,标题1,标题1,标题1&#13;&#10;" />--><!--
      </layout>-->

      <filter type="log4net.Filter.LevelMatchFilter">
        <levelToMatch  value="INFO" />
      </filter>
      <filter type="log4net.Filter.DenyAllFilter" />
    </appender>
    
    
    <!--默认 Root logger-->

    <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 %-5p - %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] %-3p %F line:%L func:%c - %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] %-3p %F line:%L func:%c - %m%n" />
      </layout>
      <filter type="log4net.Filter.LevelRangeFilter">
        <levelMin  value="ERROR" />
        <levelMax value="ERROR"/>
      </filter>
      <!--<filter type="log4net.Filter.LevelMatchFilter">
        <levelToMatch  value="ERROR" />
      </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>
    
    
    <!--自定义 Logger-->

    <logger name="Custom_CSV_1" additivity="false">
      <level value="ALL"/>
      <appender-ref ref="CSVAppender_1" />
    </logger>
    <logger name="Custom_CSV_2" additivity="false">
      <level value="ALL"/>
      <appender-ref ref="CSVAppender_2" />
    </logger>
    <logger name="Custom_CSV_3" additivity="false">
      <level value="ALL"/>
      <appender-ref ref="CSVAppender_3" />
    </logger>
    <logger name="Custom_CSV_4" additivity="false">
      <level value="ALL"/>
      <appender-ref ref="CSVAppender_4" />
    </logger>
    <logger name="Custom_CSV_5" additivity="false">
      <level value="ALL"/>
      <appender-ref ref="CSVAppender_5" />
    </logger>
    <logger name="Custom_CSV_6" additivity="false">
      <level value="ALL"/>
      <appender-ref ref="CSVAppender_6" />
    </logger>
    <logger name="Custom_CSV_7" additivity="false">
      <level value="ALL"/>
      <appender-ref ref="CSVAppender_7" />
    </logger>
    <logger name="Custom_CSV_8" additivity="false">
      <level value="ALL"/>
      <appender-ref ref="CSVAppender_8" />
    </logger>
  </log4net>
</configuration>

包装类:

using log4net;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Logger
{

    // 互联网参考:
    // https://blog.csdn.net/baidu_37842527/article/details/125851930

    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"); //选择<logger name="Default">的配置, 找不到就用的<root></root>下面的默认对象?
        /// <summary>
        /// 自定义方法名,同一个方法中可只传一次
        /// </summary>
        /// <param name="className"></param>
        /// <returns></returns>
        public static ILog GetLogger(string className = null)
        {
            if (string.IsNullOrEmpty(className))
            {
                return LogManager.GetLogger("Default");
            }

            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);
        }
    }
}




参考:

posted @ 2022-11-14 08:47  double64  阅读(291)  评论(0编辑  收藏  举报