log4net是.Net下一个非常优秀的开源日志记录组件。log4net记录日志的功能非常强大。它可以将日志分不同的等级,以不同的格式,输出到不同的媒介。
最常用的日志记录需求
通过NuGet直接搜索log4net进行安装
项目下右键新建log4net.config文件
设置总是copy
log4net.config文件
XML<?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类
C#/// <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<?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>
本文作者:技术老小子
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!