zoukankan      html  css  js  c++  java
  • Log4net入门(SQL篇)

      我们在Log4net入门(回滚日志篇)中详细讲述了如何将日志信息输出到日志文件中,在这一篇中,我们将讲述如何将日志文件写入SQL Server数据库,以方便我们分析统计日志信息。

      首先,我们在SQL Server中创建一个名为“Management”的数据库,然后在该数据库中创建一个名为“Log”的表,该表结构如下所示:

     1 CREATE TABLE [dbo].[Log](
     2     [Id] [int] IDENTITY(1,1) NOT NULL,
     3     [Date] [datetime] NOT NULL,
     4     [Thread] [varchar](255) NOT NULL,
     5     [Level] [varchar](50) NOT NULL,
     6     [Logger] [varchar](255) NOT NULL,
     7     [Message] [varchar](4000) NOT NULL,
     8     [Exception] [varchar](2000) NULL,
     9  CONSTRAINT [PK_Log] PRIMARY KEY CLUSTERED 
    10 (
    11     [Id] ASC
    12 )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    13 ) ON [PRIMARY]

      其次,我们在Log4net.config配置文件中添加一个appender节点,然后在root节点中添加一个对新添加的appender节点的引用即可。Log4net.config的配置信息如下所示:

      1 <?xml version="1.0" encoding="utf-8" ?>
      2 <configuration>
      3   <configSections>
      4     <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
      5   </configSections>
      6 
      7   <log4net>
      8     <!-- 将日志输出到控制台 -->
      9     <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
     10       <layout type="log4net.Layout.PatternLayout">
     11         <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
     12       </layout>
     13     </appender>
     14     
     15     <!-- 将日志写到文件中 -->
     16     <appender name="FileAppender" type="log4net.Appender.FileAppender">
     17       <!-- 日志文件存放位置,可以为绝对路径也可以为相对路径 -->
     18       <file value="Logs/FileAppender.log" />
     19       <!-- 将日志信息追加到已有的日志文件中-->
     20       <appendToFile value="true" />
     21       <!-- 最小锁定模式,以允许多个进程可以写入同一个文件 -->
     22       <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
     23 
     24       <layout type="log4net.Layout.PatternLayout">
     25         <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
     26       </layout>
     27     </appender>
     28     
     29     <!-- 将日志以回滚文件的形式写到文件中 -->
     30     <!-- 按文件大小切分日志文件 -->
     31     <appender name="RollingFileAppenderBySize" type="log4net.Appender.RollingFileAppender">
     32       <!-- 日志文件存放位置,可以为绝对路径也可以为相对路径 -->
     33       <file value="Logs/RollingFileAppenderBySize.log" />
     34       <!-- 将日志信息追加到已有的日志文件中-->
     35       <appendToFile value="true" />
     36       <!-- 最小锁定模式,以允许多个进程可以写入同一个文件 -->
     37       <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
     38       <!-- 指定按文件大小切分日志文件 -->
     39       <rollingStyle value="Size" />
     40       <!-- 指定备份日志文件的最大切分数量,如果超过指定切分文件个数,日志将进行覆写 -->
     41       <maxSizeRollBackups value="5" />
     42       <!-- 指定每个切分日志文件的大小 -->
     43       <maximumFileSize value="1KB" />
     44       <!-- 指定每个切分文件具有相同的名字 -->
     45       <!-- 日志文件进行切分后,每个日志文件的名字分别为:RollingFileAppenderBySize.log, RollingFileAppenderBySize.log.1, ..., RollingFileAppenderBySize.log.5 -->
     46       <staticLogFileName value="true" />
     47 
     48       <layout type="log4net.Layout.PatternLayout">
     49         <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
     50       </layout>
     51     </appender>
     52     
     53     <!-- 按日期切分日志文件 -->
     54     <appender name="RollingFileAppenderByDate" type="log4net.Appender.RollingFileAppender">
     55       <!-- 日志文件存放位置,可以为绝对路径也可以为相对路径 -->
     56       <file value="Logs/RollingFileAppenderByDate.log" />
     57       <!-- 将日志信息追加到已有的日志文件中-->
     58       <appendToFile value="true" />
     59       <!-- 最小锁定模式,以允许多个进程可以写入同一个文件 -->
     60       <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
     61       <!-- 指定按日期切分日志文件 -->
     62       <rollingStyle value="Date" />
     63       <!-- 每分钟切分一个日志文件 -->
     64       <!-- 每天切分一个日志文件的写法为:"yyyyMMdd" -->
     65       <datePattern value="yyyyMMdd-HHmm" />
     66       <!-- 指定每个切分文件具有相同的名字 -->
     67       <staticLogFileName value="true" />
     68 
     69       <layout type="log4net.Layout.PatternLayout">
     70         <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
     71       </layout>
     72     </appender>
     73     
     74     <!-- 按日期切分日志文件,并将日期作为日志文件的名字 -->
     75     <appender name="RollingFileAppenderNameByDate" type="log4net.Appender.RollingFileAppender">
     76       <!-- 日志文件存放位置,可以为绝对路径也可以为相对路径 -->
     77       <file value="Logs/" />
     78       <!-- 将日志信息追加到已有的日志文件中-->
     79       <appendToFile value="true" />
     80       <!-- 最小锁定模式,以允许多个进程可以写入同一个文件 -->
     81       <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
     82       <!-- 指定按日期切分日志文件 -->
     83       <rollingStyle value="Date" />
     84       <!-- 日志文件的命名规则 -->
     85       <datePattern value="&quot;Logs_&quot;yyyyMMdd-HHmm&quot;.log&quot;" />
     86       <!-- 当将日期作为日志文件的名字时,必须将staticLogFileName的值设置为false -->
     87       <staticLogFileName value="false" />
     88 
     89       <layout type="log4net.Layout.PatternLayout">
     90         <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
     91       </layout>
     92     </appender>
     93     
     94     <!-- 既按大小又按日期切分日志文件 -->
     95     <appender name="RollingFileAppenderBySizeAndDate" type="log4net.Appender.RollingFileAppender">
     96       <!-- 日志文件存放位置,可以为绝对路径也可以为相对路径 -->
     97       <file value="Logs/RollingFileAppenderBySizeAndDate.log" />
     98       <!-- 将日志信息追加到已有的日志文件中-->
     99       <appendToFile value="true" />
    100       <!-- 最小锁定模式,以允许多个进程可以写入同一个文件 -->
    101       <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
    102       <!-- 指定既按大小又按日期切分日志文件 -->
    103       <rollingStyle value="Composite" />
    104       <!-- 指定备份日志文件的最大切分数量,如果超过指定切分文件个数,日志将进行覆写 -->
    105       <maxSizeRollBackups value="5" />
    106       <!-- 指定每个切分日志文件的大小 -->
    107       <maximumFileSize value="1KB" />
    108       <!-- 每分钟切分一个日志文件 -->
    109       <!-- 每天切分一个日志文件的写法为:"yyyyMMdd" -->
    110       <datePattern value="yyyyMMdd-HHmm" />
    111       <!-- 指定每个切分文件具有相同的名字 -->
    112       <staticLogFileName value="true" />
    113 
    114       <layout type="log4net.Layout.PatternLayout">
    115         <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
    116       </layout>
    117     </appender>
    118     
    119     <!-- 将日志利用ADO.NET记录到数据库中 -->
    120     <appender name="AdoNetAppender_SQLServer" type="log4net.Appender.AdoNetAppender">
    121       <!-- 缓冲区大小 -->
    122       <bufferSize value="1" />
    123       <!-- 引用信息 -->
    124       <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
    125       <!-- 连接到SQL Server的数据库连接字符串 -->
    126       <connectionString value="Data Source=(local); Initial Catalog=Management; User ID=sa; Password=123456;" />
    127       <!-- 插入Log表的SQL语句 -->
    128       <commandText value="INSERT INTO dbo.Log ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" />
    129       
    130       <parameter>
    131         <parameterName value="@log_date" />
    132         <dbType value="DateTime" />
    133         <layout type="log4net.Layout.RawTimeStampLayout" />
    134       </parameter>
    135       
    136       <parameter>
    137         <parameterName value="@thread" />
    138         <dbType value="String" />
    139         <size value="255" />
    140         <layout type="log4net.Layout.PatternLayout">
    141           <conversionPattern value="%thread" />
    142         </layout>
    143       </parameter>
    144       
    145       <parameter>
    146         <parameterName value="@log_level" />
    147         <dbType value="String" />
    148         <size value="50" />
    149         <layout type="log4net.Layout.PatternLayout">
    150           <conversionPattern value="%level" />
    151         </layout>
    152       </parameter>
    153       
    154       <parameter>
    155         <parameterName value="@logger" />
    156         <dbType value="String" />
    157         <size value="255" />
    158         <layout type="log4net.Layout.PatternLayout">
    159           <conversionPattern value="%logger" />
    160         </layout>
    161       </parameter>
    162       
    163       <parameter>
    164         <parameterName value="@message" />
    165         <dbType value="String" />
    166         <size value="4000" />
    167         <layout type="log4net.Layout.PatternLayout">
    168           <conversionPattern value="%message" />
    169         </layout>
    170       </parameter>
    171       
    172       <parameter>
    173         <parameterName value="@exception" />
    174         <dbType value="String" />
    175         <size value="2000" />
    176         <layout type="log4net.Layout.ExceptionLayout" />
    177       </parameter>
    178     </appender>
    179 
    180     <root>
    181       <!-- 控制级别,由低到高:ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF -->
    182       <!-- 比如定义级别为INFO,则INFO级别向下的级别,比如DEBUG日志将不会被记录 -->
    183       <!-- 如果没有定义LEVEL的值,则缺省为DEBUG -->
    184       <level value="ALL" />
    185       <!-- 将日志输出到控制台 -->
    186       <appender-ref ref="ConsoleAppender" />
    187       <!-- 将日志写到文件中 -->
    188       <appender-ref ref="FileAppender" />
    189       <!-- 按文件大小切分日志文件 -->
    190       <appender-ref ref="RollingFileAppenderBySize" />
    191       <!-- 按日期切分日志文件 -->
    192       <appender-ref ref="RollingFileAppenderByDate" />
    193       <!-- 按日期切分日志文件,并将日期作为日志文件的名字 -->
    194       <appender-ref ref="RollingFileAppenderNameByDate" />
    195       <!-- 既按大小又按日期切分日志文件 -->
    196       <appender-ref ref="RollingFileAppenderBySizeAndDate" />
    197       <!-- 将日志利用ADO.NET记录到数据库中 -->
    198       <appender-ref ref="AdoNetAppender_SQLServer" />
    199     </root>
    200   </log4net>
    201 </configuration>

       至此,关于Log4net的基本用法就讲述完毕,上述内容的代码可以到以下地址下载:Download

     参考文章:

    1、Apache log4net Config Examples

    2、Apache log4netTM SDK

    3、Log4net Tutorial

  • 相关阅读:
    uniApp 实现微信小程序和app视频播放flv格式视频监控
    uniapp 给子组件传值不及时显示
    uni-app 中$refs 在app中无法使用
    使用甘特图
    背景图片加蒙版,里面内容不受影响
    MyBatis 多对一操作
    在Maven项目中使用lombok
    MyBatis使用分页
    Log4j打印日志
    paramiko 下载文件
  • 原文地址:https://www.cnblogs.com/yonghuacui/p/6179196.html
Copyright © 2011-2022 走看看