- 添加log4net.dll
- 添加配置(以控制台为例)
log4net.config(添加)
<?xml version="1.0" encoding="utf-8" ?> <log4net debug="false"> <!-- name属性指定其名称,type则是log4net.Appender命名空间的一个类的名称,意思是,指定使用哪种介质--> <appender name="ADONetAppender" type="log4net.Appender.ADONetAppender"> <!--日志缓存写入条数 设置为0时只要有一条就立刻写到数据库--> <bufferSize value="0" /> <!--日志数据库连接串--> <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=2.0.0.0, Culture=Neutral, PublicKeyToken=b77a5c561934e089" /> <connectionString value="Data Source=.;Initial Catalog=TestDB;Integrated Security=True" /> <!--日志数据库脚本--> <commandText value="INSERT INTO LogDetails ([LogDate],[LogLevel],[LogMessage]) VALUES (@log_date,@log_level,@message)" /> <!--日志时间 --> <parameter> <parameterName value="@log_date" /> <dbType value="DateTime" /> <layout type="log4net.Layout.RawTimeStampLayout" /> </parameter> <!--日志级别 --> <parameter> <parameterName value="@log_level" /> <dbType value="String" /> <size value="20" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%p" /> </layout> </parameter> <!--日志内容 --> <parameter> <parameterName value="@message" /> <dbType value="String" /> <size value="3000" /> <layout type="Log4NetApply.MyLayout"> <conversionPattern value="%property{Message}" /> </layout> </parameter> <!--线程号--> <!-- <parameter> <parameterName value="@thread" /> <dbType value="String" /> <size value="100" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%t" /> </layout> </parameter>--> <!--日志名称--> <!-- <parameter> <parameterName value="@logger" /> <dbType value="String" /> <size value="500" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%logger" /> </layout> </parameter>--> <!--<parameter> <parameterName value="@ActionsClick" /> <dbType value="String" /> <size value="4000" /> <layout type="Log4NetApply.MyLayout" > <conversionPattern value = "%property{ActionsClick}"/> </layout> </parameter> --> <!--自定义UserName --> <!-- <parameter> <parameterName value="@UserName" /> <dbType value="String" /> <size value="30" /> <layout type="Log4NetApply.MyLayout" > --> <!--log4net.MDC.Set("UserName", "asdfasdf"); <conversionPattern value = "%X{UserName}"/>--> <!-- <conversionPattern value = "%property{UserName}"/> </layout> </parameter> <parameter> <parameterName value="@UserIP" /> <dbType value="String" /> <size value="20" /> <layout type="Log4NetApply.MyLayout" > <conversionPattern value = "%property{UserIP}"/> </layout> </parameter>--> </appender> <!-- setup the root category, add the appenders and set the default level --> <root> <appender-ref ref="ADONetAppender" /> </root> </log4net>
App.config (修改)
<?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/> </configSections> <log4net configSource="log4net.config"/> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" /> </startup> </configuration>
- 创建数据库(MSSQL)
CREATE TABLE [dbo].[LogDetails]( [LogID] [int] IDENTITY(1,1) NOT NULL, [LogDate] [datetime] NOT NULL, [LogLevel] [nvarchar](20) NOT NULL, [LogMessage] [nvarchar](3000) NOT NULL, CONSTRAINT [PK_LogDetails] PRIMARY KEY CLUSTERED ( [LogID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY]
- 修改AssemblyInfo.cs
//注意: ConfigFile 可以指定相对路径 和 绝对路径。 [assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", ConfigFileExtension = "config", Watch = true)]
- 新增类
LogPublicClass.cs
using log4net.Layout; using log4net.Layout.Pattern; using System.Reflection; namespace Log4NetApply { /// <summary> /// 包含了所有的自定字段属性 /// </summary> public class LogContent { public LogContent(string message) { Message = message; } /// <summary> /// 日志描述信息 /// </summary> public string Message { get; set; } } public class MyLayout : PatternLayout { public MyLayout() { this.AddConverter("property", typeof(LogInfoPatternConverter)); } } public class LogInfoPatternConverter : PatternLayoutConverter { protected override void Convert(System.IO.TextWriter writer, log4net.Core.LoggingEvent loggingEvent) { if (Option != null) { // Write the value for the specified key WriteObject(writer, loggingEvent.Repository, LookupProperty(Option, loggingEvent)); } else { // Write all the key value pairs WriteDictionary(writer, loggingEvent.Repository, loggingEvent.GetProperties()); } } /// <summary> /// 通过反射获取传入的日志对象的某个属性的值 /// </summary> /// <param name="property"></param> /// <returns></returns> private object LookupProperty(string property, log4net.Core.LoggingEvent loggingEvent) { object propertyValue = string.Empty; PropertyInfo propertyInfo = loggingEvent.MessageObject.GetType().GetProperty(property); if (propertyInfo != null) propertyValue = propertyInfo.GetValue(loggingEvent.MessageObject, null); return propertyValue; } } }
LogHelper.cs
using log4net; using Log4NetApply; using System; namespace Log4Pro { public class LogHelper { public static readonly ILog loginfo = LogManager.GetLogger("INFO"); public static readonly ILog logerror = LogManager.GetLogger("ERROR"); public static readonly ILog logwarn = LogManager.GetLogger("WARN"); public static readonly ILog logfatal = LogManager.GetLogger("FATAL"); public static readonly ILog logdebug = LogManager.GetLogger("DEBUG"); public static void Info(LogContent content) { loginfo.Info(content); } public static void Error(LogContent content, Exception ex) { logerror.Error(content, ex); } public static void Warn(LogContent content) { logwarn.Warn(content); } public static void Fatal(LogContent content) { logfatal.Fatal(content); } public static void Debug(LogContent content) { logdebug.Debug(content); } } }
- 调用端代码
class Program { static void Main(string[] args) { //初始化配置 XmlConfigurator.Configure(); LogHelper.Info(new LogContent("这是一条普通信息")); LogHelper.Warn(new LogContent("这是一条警告信息")); LogHelper.Fatal(new LogContent("这是一条致命信息")); LogHelper.Debug(new LogContent("这是一条调试信息")); LogHelper.Error(new LogContent("这是一条错误信息"), new Exception("test")); Console.WriteLine("执行完成"); Console.ReadLine(); } }
效果——
- 代码下载
完整代码下载:https://pan.baidu.com/s/177kaNMeOPRs4SbI2-ZxPzg 0udu
参考文章:https://blog.csdn.net/kongwei521/article/details/52242319
log4net日志写入数据库
最新推荐文章于 2024-05-06 02:19:39 发布