热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

在VS2013中使用Log4net

大致分为3个步骤引用Log4net配置Log4net配置目标:1.启用内部调试2.按照日期分割日志文件1小时1个3.按照日志容量分割文件10KB1个4.按照日志大小,时间分割文件5

大致分为3个步骤

  1. 引用Log4net

    技术分享

    技术分享

    技术分享

  2. 配置Log4net
    配置目标:
    1. 启用内部调试
    2. 按照日期分割日志文件 1小时1个
    3. 按照日志容量分割文件 10KB 1个
    4. 按照日志大小, 时间分割文件
    5. 输出到SQL SERVER(需要先建立表)

    建立表代码如下:
    CREATE TABLE [dbo].[Log](
        [Id] [int] IDENTITY(1,1) NOT NULL,
        [AppDomain] [nvarchar](255) NULL,
        [Logger] [nvarchar](255) NOT NULL,
        [Level] [nvarchar](50) NOT NULL,
        [Thread] [nvarchar](255) NOT NULL,
        [File] [nvarchar](500) NULL,
        [Line] [nvarchar](50) NULL,
        [Identity] [nvarchar](50) NULL,
        [UserName] [nvarchar](50) NULL,
        [Date] [datetime] NOT NULL,
        [RunTime] [int] NULL,
        [Message] [nvarchar](4000) NULL,
        [Exception] [text] NULL,
     CONSTRAINT [PK_Log] PRIMARY KEY CLUSTERED 
    (
        [Id] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
    
    GO
    
    ALTER TABLE [dbo].[Log] ADD  CONSTRAINT [DF_Log_Date]  DEFAULT (getdate()) FOR [Date]
    GO
    配置如下:
    xml version="1.0" encoding="utf-8" ?>
    <configuration>
    
      <configSections>
        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
      configSections>
    
      <appSettings>
        
        <add key="log4net.Internal.Debug" value="true"/>
      appSettings>
    
      <system.diagnostics>
        <trace autoflush="true">
          <listeners>
            <add name="textWriterTraceListener" type="System.Diagnostics.TextWriterTraceListener" initializeData="Log/log4net.Internal.Debug.log" />
          listeners>
        trace>
      system.diagnostics>
    
      <log4net>
    
    
        
        <appender name="LogFileAppenderByDate" type="log4net.Appender.RollingFileAppender">
    
          
          <param name="AppendToFile" value="true" />
          
          
          
    
          
          <param name="File" value="Log/" />
          <param name="DatePattern" value="yyyy-MM-dd HH.LOG" />
          
    
          <param name="StaticLogFileName" value="false" />
          <param name="RollingStyle" value="Date" />
    
          <layout type="log4net.Layout.PatternLayout">
            <param name="Header" value="&#xD;&#xA;---- Start --------------------------------------------&#xD;&#xA;" />
            <param name="Footer" value="&#xD;&#xA;---- End --------------------------------------------&#xD;&#xA;" />
            <param name="ConversionPattern" value="%newline
    AppDomain: %appdomain %newline
    Logger: %logger %newline
    Level: %level %newline
    ThreadId: %thread %newline
    File: %file %newline
    Line: %line %newline
    Identity: %identity %newline
    UserName: %username %newline
    DateTime: %date{yyyy-MM-dd HH:mm:ss.fff} %newline
    RunTime: %timestamp(ms) %newline
    Message: %message %newline
    Exception: %exception %newline
    %newline" />
          layout>
    
        appender>
    
    
        
        <appender name="LogFileAppenderBySize" type="log4net.Appender.RollingFileAppender">
    
          
          <param name="AppendToFile" value="true" />
          
          
    
    
          
          <param name="RollingStyle" value="Size" />
          
          <param name="File" value="Log/log.txt" />
    
          
          <param name="MaximumFileSize" value="15KB"/>
          
          <param name="MaxSizeRollBackups" value="3" />
    
          <param name="StaticLogFileName" value="false" />
          <layout type="log4net.Layout.PatternLayout">
            <param name="Header" value="&#xD;&#xA;---- Start --------------------------------------------&#xD;&#xA;" />
            <param name="Footer" value="&#xD;&#xA;---- End --------------------------------------------&#xD;&#xA;" />
            <param name="ConversionPattern" value="%newline
    AppDomain: %appdomain %newline
    Logger: %logger %newline
    Level: %level %newline
    ThreadId: %thread %newline
    File: %file %newline
    Line: %line %newline
    Identity: %identity %newline
    UserName: %username %newline
    DateTime: %date{yyyy-MM-dd HH:mm:ss.fff} %newline
    RunTime: %timestamp(ms) %newline
    Message: %message %newline
    Exception: %exception %newline
    %newline" />
          layout>
    
        appender>
    
        
        <appender name="LogFileAppenderBySizeAndDate" type="log4net.Appender.RollingFileAppender">
          <param name="File" value="Log/" />
          <param name="AppendToFile" value="true" />
          
          <param name="MaxSizeRollBackups" value="-1"/>
          
          <param name="MaximumFileSize" value="10KB"/>
          
          <param name="RollingStyle" value="Composite" />
          
          
          <param name="DatePattern" value="yyyyMMdd-HH.mm".log"" />
          <param name="StaticLogFileName" value="false" />
    
          <layout type="log4net.Layout.PatternLayout">
            <param name="Header" value="&#xD;&#xA;---- Start --------------------------------------------&#xD;&#xA;" />
            <param name="Footer" value="&#xD;&#xA;---- End --------------------------------------------&#xD;&#xA;" />
            <param name="ConversionPattern" value="%newline
    AppDomain: %appdomain %newline
    Logger: %logger %newline
    Level: %level %newline
    ThreadId: %thread %newline
    File: %file %newline
    Line: %line %newline
    Identity: %identity %newline
    UserName: %username %newline
    DateTime: %date{yyyy-MM-dd HH:mm:ss.fff} %newline
    RunTime: %timestamp(ms) %newline
    Message: %message %newline
    Exception: %exception %newline
    %newline" />
          layout>
    
          <filter type="log4net.Filter.LevelRangeFilter">
            <param name="LevelMin" value="ALL" />
            <param name="LevelMax" value="OFF" />
          filter>
    
        appender>
    
        
        <appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
          <bufferSize value="100" />
          <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
          <connectionString value="Data Source=.;Initial Catalog=log4netTest;User ID=sa;Password=sa" />
          <commandText value="INSERT INTO [dbo].[Log]
                                         ([AppDomain]
                                         ,[Logger]
                                         ,[Level]
                                         ,[Thread]
                                         ,[File]
                                         ,[Line]
                                         ,[Identity]
                                         ,[UserName]
                                         ,[Date]
                                         ,[RunTime]
                                         ,[Message]
                                         ,[Exception])
                                   VALUES
                                         (@appDomain
                                         ,@logger
                                         ,@log_level
                                         ,@thread
                                         ,@file
                                         ,@line
                                         ,@identity
                                         ,@userName
                                         ,@log_date
                                         ,@runtime
                                         ,@message
                                         ,@exception)" />
    
          <parameter>
            <parameterName value="@appDomain" />
            <dbType value="String" />
            <size value="255" />
            <layout type="log4net.Layout.PatternLayout">
              <conversionPattern value="%appdomain" />
            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="@log_level" />
            <dbType value="String" />
            <size value="50" />
            <layout type="log4net.Layout.PatternLayout">
              <conversionPattern value="%level" />
            layout>
          parameter>
    
          <parameter>
            <parameterName value="@thread" />
            <dbType value="String" />
            <size value="255" />
            <layout type="log4net.Layout.PatternLayout">
              <conversionPattern value="%thread" />
            layout>
          parameter>
    
          <parameter>
            <parameterName value="@file" />
            <dbType value="String" />
            <size value="500" />
            <layout type="log4net.Layout.PatternLayout">
              <conversionPattern value="%file" />
            layout>
          parameter>
    
          <parameter>
            <parameterName value="@line" />
            <dbType value="String" />
            <size value="50" />
            <layout type="log4net.Layout.PatternLayout">
              <conversionPattern value="%line" />
            layout>
          parameter>
    
          <parameter>
            <parameterName value="@identity" />
            <dbType value="String" />
            <size value="50" />
            <layout type="log4net.Layout.PatternLayout">
              <conversionPattern value="%identity" />
            layout>
          parameter>
    
          <parameter>
            <parameterName value="@userName" />
            <dbType value="String" />
            <size value="50" />
            <layout type="log4net.Layout.PatternLayout">
              <conversionPattern value="%username" />
            layout>
          parameter>
    
          <parameter>
            <parameterName value="@log_date" />
            <dbType value="DateTime" />
            <layout type="log4net.Layout.RawTimeStampLayout" />
          parameter>
    
          <parameter>
            <parameterName value="@runtime" />
            <dbType value="Int32" />
            <layout type="log4net.Layout.PatternLayout">
              <conversionPattern value="%timestamp" />
            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="8000" />
            <layout type="log4net.Layout.ExceptionLayout" />
          parameter>
    
        appender>
    
        <root>
          
          <level value="DEBUG" />
          <appender-ref ref="LogFileAppenderByDate" />
          <appender-ref ref="LogFileAppenderBySize" />
          <appender-ref ref="LogFileAppenderBySizeAndDate" />
          <appender-ref ref="AdoNetAppender" />
        root>
    
      log4net>
      
      
        <startup> 
            <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
        startup>
    configuration>
  3. 调用Log4Net

    首先在AssemblyInfo.cs类添加一行代码
    [assembly: log4net.Config.XmlConfigurator(Watch = true)]
    编写调用方法
    class Program
    {
            private static readonly ILog log = LogManager.GetLogger(typeof(Program).Name);
    
            static void Main(string[] args)
            {
                for (int i = 0; i <50; i++)
                {
                    try
                    {
                        int a = 8, b = 0, c = 0;
    
                        c = a / b;
                    }
                    catch (Exception ex)
                    {
                        if (log.IsErrorEnabled)
                        {
                            log.Error(null, ex);
                        }
    
                        if (log.IsDebugEnabled)
                        {
                            log.Debug("Debug", ex);
                        }
                    }
                }
    
                Console.ReadKey();
            }
    }

查看运行结果:

  • 路径下生成的文件
    技术分享

  • SQL SERVER 结果

    技术分享

在VS2013中使用Log4net


推荐阅读
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 本文讲述了作者通过点火测试男友的性格和承受能力,以考验婚姻问题。作者故意不安慰男友并再次点火,观察他的反应。这个行为是善意的玩人,旨在了解男友的性格和避免婚姻问题。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
author-avatar
桔梗的坚守
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有