log4net_数据库方式记录
第一 添加 log4net.dll 引用
第二 复制一份 log4net.config 到网站根目录下面
第三
C/S应用程序:(应用程序主入口 main 方法里面,一定要在程序加载之前)
string strDataDir = AppDomain.CurrentDomain.BaseDirectory.ToLower(); if(strDataDir.EndsWith(@"\bin\debug\") || strDataDir.EndsWith(@"\bin\release")){ strDataDir = System.IO.Directory.GetParent(strDataDir).Parent.Parent.FullName; AppDomain.CurrentDomain.SetData("DataDirectory", strDataDir); } log4net.Config.XmlConfigurator.ConfigureAndWatch(new System.IO.FileInfo(strDataDir + @"\log4net.config"),true );
网站:
复制 log4net.Config.XmlConfigurator.ConfigureAndWatch(new System.IO.FileInfo(@"\log4net.config")); 到 Global.aspx.cs
第四 创建表
CREATE TABLE [dbo].[log4net_log] ( [Id] [int] IDENTITY (1, 1) NOT NULL, [Date] [datetime] NULL, --异常记录时间 [Thread] [varchar] (255) NULL, --线程ID(数字) [Level] [varchar] (50) NULL, --日志级别(FALAT,ERROR,WARN,INFO,DEBUG) [Logger] [varchar] (255) NULL, --记录的类 [Message] [varchar] (4000) NULL, --消息 [Millisecond] [varchar] (255), --程序从运行到当前语句的毫秒数 [Line] [varchar] (255), --行号 [FileName] [varchar] (255), --所在语句的文件名 [ClassName] [Varchar] (255), --类名 --[Exception] [varchar](4000) NULL [Exception] [text] NULL --异常信息 )
第五 修改 log4net.config
<?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="log4net" type="System.Configuration.IgnoreSectionHandler"/> </configSections> <appSettings> </appSettings> <log4net> <!--定义输出到文件中--> <!-- <appender name="LogFileAppender" type="log4net.Appender.FileAppender"> --> <!--定义文件存放位置--> <!-- <file value="logs\\" /> <appendToFile value="true" /> <rollingStyle value="Date" /> <param name="DatePattern" value="yyyyMMdd".log"" /> <staticLogFileName value="false"/> <layout type="log4net.Layout.PatternLayout"> --> <!--每条日志末尾的文字说明--> <!-- --> <!--每条日志开头的文字说明--> <!-- --> <!--<footer value="by 吴家龙" /> <header value="by wujialong"/>--> <!-- --> <!--输出格式--> <!-- --> <!--样例:2008-03-26 13:42:32,111 [10] INFO Log4NetDemo.MainClass [(null)] - info--> <!-- <conversionPattern value="记录时间:%date 线程ID:[%thread] 日志级别:%-5level 出错类:%logger property:[%property{NDC}] - 错误描述:%message%newline" /> </layout> </appender>--> <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender"> <!--日志文件路径--> <!--相对路径,在项目的根目录下--> <!--以最后一个路径为准--> <param name="File" value="Kodlog\\Logs\\"/> <param name="AppendToFile" value="true" /> <!--可以为:Once|Size|Date|Composite--> <!--Composite为Size和Date的组合--> <param name="RollingStyle" value="Date" /> <!--当备份文件时,为文件名加的后缀--> <!--后缀为*.txt时,例:AX.txt_2008-07-24.PxP 应该是程序上的一个bug--> <!--后缀为*.TXT时,例:AX.txt_2008-07-25.TXT--> <param name="DatePattern" value="yyyyMMdd".log"" /> <!--置为true,当前最新日志文件名永远为file节中的名字--> <param name="StaticLogFileName" value="false" /> <param name="MaxSizeRollBackups" value="100" /> <param name="MaxFileSize" value="10240" /> <!--这两个好像无效--> <layout type="log4net.Layout.PatternLayout"> <!--输出样式--> <param name="ConversionPattern" value="时间:%date 线程ID:[%thread] 日志级别:%-5level 出错类:%logger property:[%property{NDC}][行号:%L] - 错误描述:%message%newline"/> <param name="Header" value=" ----------------------header-------------------------- " /> <param name="Footer" value=" ----------------------footer-------------------------- " /> </layout> <!--<filter type="log4net.Filter.LevelRangeFilter"> <param name="LevelMin" value="WARN" /> <param name="LevelMax" value="FATAL" /> </filter>--> </appender> <!--定义输出到控制台命令行中--> <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender"> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> </layout> </appender> <!--定义输出到windows事件中--> <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender"> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> </layout> </appender> <!--定义输出到数据库中,这里举例输出到Access数据库中,数据库为log4net.mdb--> <appender name="AdoNetAppender_SQL" type="log4net.Appender.AdoNetAppender"> <bufferSize value="5" /> <connectionType value="System.Data.SqlClient.SqlConnection,System.Data, Version=2.0.0.0, Culture=neutral,PublicKeyToken=b77a5c561934e089" /> <connectionString value="Server=.;Initial Catalog=gy01tuan;Integrated Security=True;" /> <commandText value="INSERT INTO log4net_log([ClassName],[FileName],[Line],[Millisecond], [Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES(@ClassName, @FileName, @Line, @Millisecond, @log_date, @thread, @log_level, @logger, @message, @exception)"/> <parameter> <parameterName value="@ClassName" /> <dbType value="String" /> <size value="255" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%c" /> </layout> </parameter> <parameter> <parameterName value="@FileName" /> <dbType value="String" /> <size value="255" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%F" /> </layout> </parameter> <parameter> <parameterName value="@Line" /> <dbType value="String" /> <size value="255" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%L" /> </layout> </parameter> <parameter> <parameterName value="@Millisecond" /> <dbType value="String" /> <size value="255" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%r" /> </layout> </parameter> <parameter> <parameterName value="@log_date" /> <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="4000"/> <layout type="log4net.Layout.ExceptionLayout" /> </parameter> </appender> <!--定义日志的输出媒介,下面定义日志以四种方式输出。也可以下面的按照一种类型或其他类型输出。--> <root> <level value="ALL" /> <!--文件形式记录日志--> <appender-ref ref="LogFileAppender"/> <!--控制台控制显示日志--> <appender-ref ref="ConsoleAppender" /> <!--Windows事件日志 <appender-ref ref="EventLogAppender" />--> <!-- 如果不启用相应的日志记录,可以通过这种方式注释掉--> <appender-ref ref="AdoNetAppender_SQL" /> </root> </log4net> </configuration>
<appender-ref ref="AdoNetAppender_SQL" />意思是启用与 AdoNetAppender_SQL 相关的配置
log4net 可以把日志记录到多个目标上面。
以上五步,排名不分先后,只要做全了就可以。
最后,第六,在需要记录的地方声明:
private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
并
lon.Info("测试");
因为 log4net 内部的错误是输出到控制台的,如果以上都没有结果出来,建议做一个 ConsoleAppliction ,并把log4net配置为可以输出到控制台,这样,就可以根据输出信息知道是哪里配置出了问题。
各位,如果还没什么不清楚的,可以加QQ:77915862