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

原文地址:https://www.cnblogs.com/wujialongcn/p/1890052.html