分享免费的编程资源和教程

网站首页 > 技术教程 正文

219.C# Log4Net日志类 c# 日志框架

goqiw 2024-10-27 10:35:56 技术教程 31 ℃ 0 评论

摘要


log4net是.Net下一个非常优秀的开源日志记录组件。log4net记录日志的功能非常强大。它可以将日志分不同的等级,以不同的格式,输出到不同的媒介。

正文


最常用的日志记录需求

  1. 日志文件保存到项目启动目录下的logs文件夹
  2. 以天为单位进行日志文件的保存

通过NuGet直接搜索log4net进行安装

项目下右键新建log4net.config文件

设置总是copy

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="yyyyMMdd'.html'" />
      <!--日志根据日期滚动-->
      <param name="RollingStyle" value="Composite" />
      <!--最小锁定模型以允许多个进程可以写入同一个文件-->
      <param name="lockingModel" type="log4net.Appender.FileAppender+MinimalLock" />
      <!--错误日志布局-->
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="<HR COLOR=rreen>%n异常时间:%d [%t] <BR>%n异常级别:%-5p <BR>%n异 常 类:%c [%x] <BR>%n%m <BR>%n <HR Size=1>"  />
      </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" />
      <!--日志文件名格式为:20230101.log-->
      <param name="DatePattern" value="yyyyMMdd'.html'" />
      <!--日志根据日期滚动-->
      <param name="RollingStyle" value="Composite" />
      <!--最小锁定模型以允许多个进程可以写入同一个文件-->
      <param name="lockingModel" type="log4net.Appender.FileAppender+MinimalLock" />
      <!--错误日志布局-->
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="<HR COLOR=blue>%n异常时间:%d [%t] <BR>%n异常级别:%-5p <BR>%n异 常 类:%c [%x] <BR>%n%m <BR>%n <HR Size=1>"  />
      </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="yyyyMMdd'.html'" />
      <!--日志根据日期滚动-->
      <param name="RollingStyle" value="Composite" />
      <!--最小锁定模型以允许多个进程可以写入同一个文件-->
      <param name="lockingModel" type="log4net.Appender.FileAppender+MinimalLock" />
      <!--错误日志布局-->
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="<HR COLOR=red>%n异常时间:%d [%t] <BR>%n异常级别:%-5p <BR>%n异 常 类:%c [%x] <BR>%n%m <BR>%n <HR Size=1>"  />
      </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>

输出的日志消息
%n(newline)  //换行
%d(datetime)  //输出当前语句运行的时刻
%r(runtime)  //输出程序执行到当前消耗的毫秒数
%t(threadid)  //当前语句所在的线程ID
%p(priority)  //日志的当前日志级别
%c(class)  //当前日志对象的名称
%L  //输出语句所在的行号
%F  //输出语句所在的文件名
%-10  //最小长度为10,不够空格填充

LogHelper类

/// <summary>
/// Log4Net日志记录类
/// </summary>
public class LogHelper
{
    private static readonly ILog Log;

    static LogHelper()
    {
        XmlConfigurator.ConfigureAndWatch(new FileInfo(AppDomain.CurrentDomain.BaseDirectory + "Log4net.config"));
        Log = LogManager.GetLogger(typeof(LogHelper));
    }
    /// <summary>
    /// 记录调试信息
    /// </summary>
    /// <param name="message">信息</param>
    public static void Debug(object message)
    {
        Log.Debug(message);
    }

    /// <summary>
    /// 记录警告信息
    /// </summary>
    /// <param name="message">信息</param>
    public static void Warn(object message)
    {
        Log.Warn(message);
    }

    /// <summary>
    /// 记录错误信息
    /// </summary>
    /// <param name="message">信息</param>
    public static void Error(object message)
    {
        Log.Error(message);
    }

    /// <summary>
    /// 记录重要提示信息
    /// </summary>
    /// <param name="message">信息</param>
    public static void Info(object message)
    {
        Log.Info(message);
    }

    /// <summary>
    /// 记录信息和异常信息
    /// </summary>
    /// <param name="message">错误信息</param>
    /// <param name="ex">异常对象</param>
    public static void Debug(object message, Exception ex)
    {
        Log.Debug(message, ex);
    }

    /// <summary>
    /// 记录信息和异常信息
    /// </summary>
    /// <param name="message">错误信息</param>
    /// <param name="ex">异常对象</param>
    public static void Warn(object message, Exception ex)
    {
        Log.Warn(message, ex);
    }

    /// <summary>
    /// 记录信息和异常信息
    /// </summary>
    /// <param name="message">错误信息</param>
    /// <param name="ex">异常对象</param>
    public static void Error(object message, Exception ex)
    {
        Log.Error(message, ex);
    }

    /// <summary>
    /// 记录信息和异常信息
    /// </summary>
    /// <param name="message">错误信息</param>
    /// <param name="ex">异常对象</param>
    public static void Info(object message, Exception ex)
    {
        Log.Info(message, ex);
    }
}

保存到数据表

修改配制文件

在.net6环境下需要nuget安装System.Data.SqlClient

<?xml version="1.0"?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
  </configSections>
  <log4net>
    <!--注册Appender-->
    <root>
      <level value="ALL" />
      <appender-ref ref="AdoNetAppender" />
    </root>
    <!--配置Appender-->
    <appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
      <bufferSize value="-1" />
      <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=2.0.0.0, Culture=Neutral, PublicKeyToken=b77a5c561934e089" />
      <connectionString value="data source=idio-002;initial catalog=bzscada;persist security info=True;user id=sa;password=123;MultipleActiveResultSets=True;" />
      <commandText value="INSERT INTO sys_log ([Createddate],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@createddate, @thread, @log_level, @logger, @message, @exception)" />
      <parameter>
        <parameterName value="@createddate"  />
        <dbType value="DateTime" />
        <layout type="log4net.Layout.RawTimeStampLayout" />
      </parameter>
      <parameter>
        <parameterName value="@thread" />
        <dbType value="String" />
        <size value="255" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%thread" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@log_level" />
        <dbType value="String" />
        <size value="50" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%level" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@logger" />
        <dbType value="String" />
        <size value="255" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%logger" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@message" />
        <dbType value="String" />
        <size value="4000" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%message" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@exception" />
        <dbType value="String" />
        <size value="2000" />
        <layout type="log4net.Layout.ExceptionLayout" />
      </parameter>
    </appender>
  </log4net>
</configuration>

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表