zoukankan      html  css  js  c++  java
  • 在项目中使用log4net记录日志

    一、准备工作

    1. log4net源码一份,或者生成的log4net.dll文件一份
    2. 数据库中新建一张表,就叫LogCenter吧。
    3. 配置文件一份。
    4. 记录日志的方法一份。

    二、开工-- log4net.dll

    log4net官方网站:http://logging.apache.org/log4net/

    编译好的 log4net.dll 文件,猛击这里下载

    将log4net.dll添加引用到项目中。

    三、建表

    --数据库创建表

    CREATETABLE[dbo].[LogCenter](

    [Id][int] primary key IDENTITY (1, 1)NOT NULL,

    [Date][datetime]NOTNULL,

    [Thread][varchar](255)NOT NULL,

    [Level][varchar](50)NOT NULL,

    [Logger][varchar](255)NOT NULL,

    [Message][varchar](4000)NOT NULL,

    [Exception][varchar](2000)NULL

    )

    四、添加配置文件

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <!-- 这项配置必须放在configuration下面 -->
      <configSections>
        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
      </configSections>
    
      <!-- log4net配置节点  -->
      <log4net>
        <logger name="loginfo">
          <level value="INFO" />
          <appender-ref ref="AdoNetAppender_SqlServer" />
          <appender-ref ref="InfoAppender" />
        </logger>
        <!--<root>
          <level value="ALL"/>
          <appender-ref ref="AdoNetAppender_SqlServer" />
          <appender-ref ref="InfoAppender" />
        </root>-->
        <appender name="InfoAppender" type="log4net.Appender.RollingFileAppender">
          <param name="File" value="Log\\INFO\\" />
          <param name="AppendToFile" value="true" />
          <param name="MaxFileSize" value="10240" />
          <param name="MaxSizeRollBackups" value="100" />
          <param name="StaticLogFileName" value="false" />
          <param name="DatePattern" value="yyyyMMdd&quot;.txt&quot;" />
          <param name="RollingStyle" value="Date" />
          <layout type="log4net.Layout.PatternLayout">
            <param name="ConversionPattern" value="日志时间:%d Message: %m Exception: %exception %newline" />
          </layout>
        </appender>
        <appender name="AdoNetAppender_SqlServer" type="log4net.Appender.AdoNetAppender">
          <!-- BufferSize 为缓冲区大小,只有日志记录超5 条才会一块写入到数据库 -->
          <bufferSize value="0" />
          <!--2.0这是对应sql2008 如是2000或2005另外配置-->
          <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=2.0.0.0, Culture=neutral,PublicKeyToken=b77a5c561934e089" />
    
          <!-- 连接数据库字符串 ADO.Net类型的连接 -->
          <connectionString value="Data Source=SHOPEX-SH-A0449\FANYONG;Initial Catalog=OnlineShop;User ID=sa;Password=sa;" />
    
          <!-- 插入到表Log -->
          <commandText value="INSERT INTO LogCenter ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message,@exception)" />
    
          <parameter>
            <parameterName value="@log_date" />
            <dbType value="DateTime" />
    
            <layout type="log4net.Layout.PatternLayout">
              <conversionPattern value="%date{yyyy'-'MM'-'dd HH':'mm':'ss'.'fff}" />
            </layout>
            <!-- <layout type="log4net.Layout.RawTimeStampLayout"/>-->
          </parameter>
          <parameter>
            <parameterName value="@thread" />
            <dbType value="String" />
            <size value="255" />
            <!-- LogComponent 是类所在的命名空间,MyLayout 是自定义属性所在的类,这是我们自己要写的部分,将在下面介绍。 -->
            <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="2000" />
            <layout type="log4net.Layout.ExceptionLayout" />
          </parameter>
        </appender>
    
      </log4net>
    </configuration>

    五、记录日志的实现代码

    Implementation:

    using System;
    namespace Log4netTet
    {
        /// <summary>
        ///
    日志操作类
       
    /// </summary>
       
    public class LogWrite
       
    {
            private LogWrite()
            {
                // 构造函数设置配置文件
               
    SetConfig();
            }

            // 创建一个log4net对象
            //
           
    private static readonly log4net.ILog logInfo = log4net.LogManager.GetLogger("loginfo");

            private static bool IsLoadConfig = false;

            // 设置配置文件
            //
           
    private static void SetConfig()
            {
                log4net.Config.XmlConfigurator.Configure();
            }

            /// <summary>
            ///
    记录异常信息
           
    /// </summary>
            /// <param name="info">
    错误提示信息</param>
           
    public static void WriteLog(string info)
            {
                if (!IsLoadConfig)
                {
                    SetConfig();
                    IsLoadConfig = true;
                }
                if (logInfo.IsInfoEnabled)
                {
                    logInfo.Info(info);
                }
            }

            public static void WriteLog(string info, Exception ex)
            {
                if (!IsLoadConfig)
                {
                    SetConfig();
                    IsLoadConfig = true;
                }
                if (logInfo.IsErrorEnabled)
                {
                    logInfo.Error(info, ex);
                }
            }
        }
    }

    六、测试代码

    因为实现代码LogWrite类中是静态方法,所以调用的时候不用实例化,简单调用即可。

         protected void btnLog4net_Click(object sender, EventArgs e)
            {
                 //普通日志消息 
              Log4netTest.LogWrite.WriteLog(“测试消息");  
              //异常信息             
              Log4netTest.LogWrite.WriteLog(“报异常了", new Exception(“这是异常信息啊"));  
                  
            }
     

    七、最终效果

    image
  • 相关阅读:
    UVA 11374 Airport Express (最短路)
    UVA Live 3713 Astronauts (2-SAT)
    UVALive 3211 Now or Later (2-SAT)
    UVA 11324 The Largest Clique (强连通分量,dp)
    UVALive 4287 Proving Equivalence (强连通分量)
    UVA1665 Islands (并查集)
    UVA 1664 Conquer a New Region (Kruskal,贪心)
    UVA
    Gym 100342F Move to Front (树状数组动态维护和查询)
    Gym 100342E Minima (暴力,单调队列)
  • 原文地址:https://www.cnblogs.com/fanyong/p/2411341.html
Copyright © 2011-2022 走看看