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
浙公网安备 33010602011771号