• 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

  • 相关阅读:
    Oracle创建上下文 SYS_CONTEXT
    闪回版本查询
    物化视图创建案例
    Oracle 多租户环境学习路线图
    【Mysql MHA】CentOS7.6+Mysql8.0.16 入坑
    【翻译】--19C Oracle 安装指导
    Docker(3)---常用命令
    Docker(2)---安装(设置镜像加速器)
    Docker(1)---基础概念
    AMQP高级消息队列协议
  • 原文地址:https://www.cnblogs.com/wujialongcn/p/1890052.html
Copyright © 2020-2023  润新知