时间:2021-07-01 10:21:17 帮助过:4人阅读
123456789101112131415161718192021 | CREATE TABLE [dbo].[LogDetails] ( [LogID] int NOT NULL IDENTITY(1,1) , [LogDate] datetime NOT NULL , [LogThread] nvarchar(100) NOT NULL , [LogLevel] nvarchar(200) NOT NULL , [LogLogger] nvarchar(500) NOT NULL , [LogMessage] nvarchar(3000) NOT NULL , [LogActionClick] nvarchar(4000) NULL , [UserName] nvarchar(30) NULL , [UserIP] varchar(20) NULL ) |
2:创建项目然后下载log4net.dll 在项目中添加引用 http://logging.apache.org/log4net/download_log4net.cgi下载Binaries 下面的
3:创建 log4net.config
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285 | <?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=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> <connectionString value= "DATABASE=GoodLook;SERVER=xx.xx.140.170;UID=sa;PWD=123456a;Connect Timeout=30;" /> <!--日志数据库脚本--> <commandText value= "INSERT INTO LogDetails ([LogDate],[LogThread],[LogLevel],[LogLogger],[LogActionClick],[LogMessage],[UserName],[UserIP]) VALUES (@log_date, @thread, @log_level, @logger, @ActionsClick, @message,@UserName,@UserIP)" /> <!--日志时间LogDate --> <parameter> <parameterName value= "@log_date" /> <dbType value= "DateTime" /> <layout type= "log4net.Layout.RawTimeStampLayout" /> </parameter> <!--线程号--> <parameter> <parameterName value= "@thread" /> <dbType value= "String" /> <size value= "100" /> <layout type= "log4net.Layout.PatternLayout" > <conversionPattern value= "%t" /> </layout> </parameter> <!--日志类型LogLevel --> <parameter> <parameterName value= "@log_level" /> <dbType value= "String" /> <size value= "200" /> <layout type= "log4net.Layout.PatternLayout" > <conversionPattern value= "%p" /> </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= "@message" /> <dbType value= "String" /> <size value= "3000" /> <layout type= "Log4NetApply.MyLayout" > <conversionPattern value= "%property{Message}" /> </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> <level value= "Warn" /><!-- 定义记录的日志级别--> <level value= "Info" /> <level value= "Debug" /> <level value= "Fine" /> <appender- ref ref = "ADONetAppender" /><!-- 记录到什么介质中--> </root> <!-- specify the level for some specific categories --> <!-- //关于上边root到logger这块,如果同时出现,有可能会出现重复插入记录的情况:--> <!--<logger name= "iNotes" > <level value= "WARN" /> <level value= "INFO" /> <level value= "DEBUG" /> <level value= "FINE" /> <appender- ref ref = "ADONetAppender" /> </logger> <logger name= "StellaLogger" > <level value= "ALL" /> <appender- ref ref = "AdoNetAppender" /> </logger>--> <appender name= "ReflectionLayout" type= "log4net.Appender.RollingFileAppender,log4net" > <!--日志文件路径,按文件大小方式输出时在这里指定文件名,并且前面的日志按天在文件名后自动添加当天日期形成文件--> <param name= "File" value= "D:/Log/" /> <!--是否追加到文件--> <param name= "AppendToFile" value= "true" /> <!--记录日志写入文件时,不锁定文本文件--> <!--<lockingModel type= "log4net.Appender.FileAppender+MinimalLock" />--> <!--Unicode编码--> <!--<Encoding value= "UTF-8" />--> <!--最多产生的日志文件数,value= "-1" 为不限文件数--> <!--<param name= "MaxSizeRollBackups" value= "10" />--> <!--是否只写到一个文件中--> <param name= "StaticLogFileName" value= "false" /> <!--按照何种方式产生多个日志文件(日期[Date],文件大小[Size],混合[Composite])--> <param name= "RollingStyle" value= "Composite" /> <!--按日期产生文件夹,文件名[在日期方式与混合方式下使用]--> <param name= "DatePattern" value= "yyyy-MM-dd/" ReflectionLayout.log "" /> <!--<param name= "DatePattern" value= "yyyyMMdd/yyyyMMdd" -TimerServer.log "" />--> <!--<param name= "DatePattern" value= "yyyyMMdd/" TimerServer/TimerServer.log "" />--> <!--每个文件的大小。只在混合方式与文件大小方式下使用,超出大小的在文件名后自动增加1重新命名--> <param name= "maximumFileSize" value= "500KB" /> <!--记录的格式。--> <layout type= "TGLog.ExpandLayout2.ReflectionLayout,TGLog" > <param name= "ConversionPattern" value= "记录时间:%date 线程ID:[%thread] 日志级别:%-5level 记录类:%logger 操作者ID:%property{Operator} 操作类型:%property{Action}%n 当前机器名:%property%n当前机器名及登录用户:%username %n 记录位置:%location%n 消息描述:%property{Message}%n 异常:%exception%n 消息:%message%newline%n%n" /> </layout> </appender> </log4net> |
4:在Web.config 里面加 configSections 节点 (CS可直接写在app.config里面,或者都写在一个config里面)
1234567891011121314151617181920212223 | <configuration> <strong> <span style= "color:#FF0000;" > <configSections> <section name= "log4net" type= "log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> </configSections> <log4net configSource= "log4net.config" /></span></strong> <system.web> <compilation debug= "true" targetFramework= "4.5" /> <httpRuntime targetFramework= "4.5" /> </system.web> </configuration> |
12345 | //[assembly: log4net.Config.XmlConfigurator(Watch = true)] //注意: ConfigFile 可以指定相对路径 和 绝对路径。 eg: /log/xxxx.log 或者 d://log//xxxx.log [assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config" , ConfigFileExtension = "config" , Watch = true )] |
然后在Application_Start 追加 读取配置程序文件
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184 | protected void Application_Start( object sender, EventArgs e) { //应用程序启动时,自动加载配置log4Net XmlConfigurator.Configure(); } 7:创建自定义类 LogPublicClass.cs,为了方便写入数据库中 自定义的一些信息 using log4net.Layout; using log4net.Layout.Pattern; using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Web; namespace Log4NetApply { /// <summary> /// 包含了所有的自定字段属性 /// </summary> public class LogContent { public LogContent( string macAddress, string computerName, string actionsclick, string description) { UserIP = macAddress; UserName = computerName; ActionsClick = actionsclick; Message = description; } /// <summary> /// 访问IP /// </summary> public string UserIP { get ; set ; } /// <summary> /// 系统登陆用户 /// </summary> public string UserName { get ; set ; } /// <summary> /// 动作事件 /// </summary> public string ActionsClick { get ; set ; } /// <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; } } } |
1234567891011121314151617 | try { log.Info( new LogContent( "127.0.0.1" , "111111" , "登陆系统" , "登陆成功" )); var ss = 1 - int .Parse( "sss" ); } catch (Exception ex) { log.Error( new LogContent( "127.0.0.1" , "111111" , "登陆系统" , ex.Message+ ":" +ex.StackTrace)); } |
12345678 | http: //www.cnblogs.com/kissazi2/p/3393151.html http: //blog.csdn.net/zdw_wym/article/details/48802821 http: //blog.csdn.net/ydm19891101/article/details/50561638 http: //www.cnblogs.com/yuangang/archive/2016/05/16/5497140.html |
C# log4net 日志写入到数据库
标签:类型 comm dll namespace assembly values 描述 opera var