C#使用Log4.net记录日志文件

一、简介

1.1 Log4.net优点

几乎所有的大型应用都会有自己的用于跟踪调试的API。因为一旦程序被部署以后,就不太可能再利用专门的调试工具了。然而一个管理员可能需要有一套强大的日志系统来诊断和修复配置上的问题。经验表明,日志记录往往是软件开发周期中的重要组成部分。它具有以下几个优点:
 1.它可以提供应用程序运行时的精确环境,可供开发人员尽快找到应用程序中的Bug;
 2.一旦在程序中加入了Log 输出代码,程序运行过程中就能生成并输出日志信息而无需人工干预。
 3.另外,日志信息可以输出到不同的地方(控制台,文件等)以备以后研究之用。
 4.Log4net就是为这样一个目的设计的,用于.NET开发环境的日志记录包。

1.2 Log4.net结构

log4net有四种主要的组件,分别是Logger(记录器), Repository(库), Appender(附着器)以及 Layout(布局)。

1.3 日志记录方式

1.AdoNetAppender:利用ADO.NET记录到数据库的日志。
 2.AnsiColorTerminalAppender:在ANSI 窗口终端写下高亮度的日志事件。
 3.AspNetTraceAppender:能用asp.net中Trace的方式查看记录的日志。
 4.BufferingForwardingAppender:在输出到子Appenders之前先缓存日志事件。
 5.ConsoleAppender:将日志输出到控制台。
 6.EventLogAppender:将日志写到Windows Event Log.
 7.FileAppender:将日志写到文件中。
 8.LocalSyslogAppender:将日志写到local syslog service (仅用于UNIX环境下).
 9.MemoryAppender:将日志存到内存缓冲区。
 10.NetSendAppender:将日志输出到Windows Messenger service.这些日志信息将在用户终端的对话框中显示。
 11.RemoteSyslogAppender:通过UDP网络协议将日志写到Remote syslog service。
 12.RemotingAppender:通过.NET Remoting将日志写到远程接收端。
 13.RollingFileAppender:将日志以回滚文件的形式写到文件中。
 14.SmtpAppender:将日志写到邮件中。
 15.TraceAppender:将日志写到.NET trace 系统。
 16.UdpAppender:将日志connectionless UDP datagrams的形式送到远程宿主或以UdpClient的形式广播。

1.4 参数

1.%m(message):输出的日志消息,如ILog.Debug(…)输出的一条消息
 2.%n(new line):换行
 3.%d(datetime):输出当前语句运行的时刻
 4.%r(run time):输出程序从运行到执行到当前语句时消耗的毫秒数
 5.%t(thread id):当前语句所在的线程ID
 6.%p(priority): 日志的当前优先级别,即DEBUG、INFO、WARN…等
 7.%c(class):当前日志对象的名称,例如:
 8.%f(file):输出语句所在的文件名。
 9.%l(line):输出语句所在的行号。
 10.%数字:表示该项的最小长度,如果不够,则用空格填充,如“%-5level”表示level的最小宽度是5个字符,如果实际长度不够5个字符则以空格填充。

二、定义配置文件

1.要使用log4.net记录日志功能,就要建立在Web或者Winform程式中的AssemblyInfo.cs文件中添加如下一语句,这句话的意思是log4net会自动寻找配置文件log4net.config,从而获得并加载其中的配置信息。注意此处的ConfigFile要与项目中的.Config文件名称保持一致。这个配置文件名称在建立的项目下面默认为App.config或Web.config。

ConfigFile要与项目中的.Config文件名称一致

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", ConfigFileExtension = "config", Watch = true)]

2.要使用log4net,首先要在config文件的<configSections>节点中增加配置(如果没有这个节点请手动增加),如下:

<configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler"/>
  </configSections>

3.除此之外,还要在顶级节点<configuration>下增加<log4net>子节点。在<log4net>节点下就可以增加<appender>子节点,每个<appender>子节点代表一种记录日志的方式(仅在这里配置了不代表启用了)。

<log4net>
    <!-- name属性指定其名称,type则是log4net.Appender命名空间的一个类的名称,意思是指定使用哪种介质-->
    <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender">
      <file value="E:\Log\\"/>
      <!-- 输出到什么目录,此处日志记录没有存放项目文件-->
      <appendToFile value="true"/>
      <!-- 是否到追加到文件中-->
      <rollingStyle value="Date"/>
      <!-- 文件创建方式,以日期的方式记录-->
      <datePattern value="yyyy-MM-dd&quot;.txt&quot;"/>
      <!-- 文件格式,每天生成一个文件-->
      <staticLogFileName value="false"/>
      <!--否采用静态文件名,文件名是否唯一-->
      <layout type="log4net.Layout.PatternLayout">
        <!---日志内容布局-->
        <param name="ConversionPattern" value="%date [%thread] (%file:%line) %-5level %logger [%property{NDC}] - %message%newline"/>
        <!--下面的输出首尾样式-->
        <param name="Header" value="
----------------------header--------------------------
"/>
        <param name="Footer" value="
----------------------footer--------------------------
"/>
      </layout>
    </appender>

    <!--另一种Appender-->
    <!--每个<appender>子节点代表一种记录日志的方式(仅在这里配置了不代表启用了)-->
    <appender name="DateFileInfoAppender" type="log4net.Appender.RollingFileAppender">
      <file value="E:\Log\\log.txt"/>
       <!--输出到什么文件-->
      <appendToFile value="true"/>
       <!--是否到附加到文件中-->
      <rollingStyle value="Size" />
      <maxSizeRollBackups value="10"/>
      <!--日志文件的最大个数-->
      <maximumFileSize value="10MB"/>
       <!--单个日志文件最大的大小-->
      <staticLogFileName value="true"/>
      <!--否采用静态文件名,文件名是否唯一-->
      <layout type="log4net.Layout.PatternLayout">
        <!--日志内容布局-->
        <param name="ConversionPattern" value="%date [%thread] (%file:%line) %-5level %logger [%property{NDC}] - %message%newline"/>
      </layout>
    </appender>

    <!--定义日志的输出媒介,下面定义日志以几种种方式输出。也可以下面的按照一种类型或其他类型输出。-->
    <root>
      <!--文件形式记录日志-->
      <appender-ref ref="LogFileAppender" />

      <!--控制台控制显示日志-->
      <!--<appender-ref ref="ConsoleAppender" />-->
      <!--Windows事件日志-->
      <!--<appender-ref ref="EventLogAppender" />-->
      <!--SQLite事件日志-->
      <!--<appender-ref ref="AdoNetAppender_SQLite" />-->
      <!--RollingFileAppender事件日志-->
      <!--<appender-ref ref="RollingFileAppender" />-->
      <!--RollingFileAppender事件日志,每天一个日志-->
      <!--<appender-ref ref="RollingLogFileAppender_DateFormat" />-->
      <!-- 如果不启用相应的日志记录,可以通过这种方式注释掉
        <appender-ref ref="AdoNetAppender_Access" />
  -->
    </root>
  </log4net>

4.两点注意事项

4.1 第一个:在点击配置文件中,把log4.config 文件属性中的下图ITEM改为:赋值到输出目录->如果较新则复制。

4.2 第二个:在上面的配置文件中, <appender-ref ref="LogFileAppender" />和<appender name="DateFileInfoAppender" 的值需要保持一致

三、在代码中使用log4.net记录日志

代码:

namespace log4netDemo1
{
    class Program
    {
        public static class TestClass1
        {
            private static readonly ILog log = LogManager.GetLogger(typeof(TestClass1));

            public static void TestLog()
            {
                for (int i = 0; i < 3; ++i)
                {
                    log.Info(string.Format("Log info {0}", i));
                    log.Debug(string.Format("Log debug {0}", i));
                }
            }
        }

        public static class TestClass2
        {
            private static readonly ILog log = LogManager.GetLogger(typeof(TestClass2));

            public static void TestLog()
            {
                Random random = new Random();
                for (int i = 0; i < 3; i++)
                {
                    //创建日志记录组件实例
                    //ILog log = log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);

                    ILog log = log4net.LogManager.GetLogger(typeof(TestClass2));
                    //记录错误日志
                    log.Error("error", new Exception("在這裡發生了一個異常,Error Number:" + random.Next()));
                    //记录严重错误
                    log.Fatal("fatal", new Exception("在這裡發生了一個致命的錯誤,Exception Id:" + random.Next()));
                    //记录一般信息
                    log.Info("提示:系統正在運行");
                    //记录调试信息
                    log.Debug("調試信息:debug");
                    //记录警告信息
                    log.Warn("警告信息:warn");
                }
            }
        }
        static void Main(string[] args)
        {

            try
            {
                TestClass1.TestLog();
                TestClass2.TestLog();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
    }
}

输出日志文件记录样式:

----------------------header--------------------------
//TestClass1
2021-05-27 14:54:31,006 [9] (D:\Winform\控制台\log4netDemo1\Program.cs:21) INFO  log4netDemo1.Program+TestClass1 [(null)] - Log info 0
2021-05-27 14:54:31,026 [9] (D:\Winform\控制台\log4netDemo1\Program.cs:22) DEBUG log4netDemo1.Program+TestClass1 [(null)] - Log debug 0
2021-05-27 14:54:31,027 [9] (D:\Winform\控制台\log4netDemo1\Program.cs:21) INFO  log4netDemo1.Program+TestClass1 [(null)] - Log info 1
2021-05-27 14:54:31,027 [9] (D:\Winform\控制台\log4netDemo1\Program.cs:22) DEBUG log4netDemo1.Program+TestClass1 [(null)] - Log debug 1
2021-05-27 14:54:31,242 [9] (D:\Winform\控制台\log4netDemo1\Program.cs:21) INFO  log4netDemo1.Program+TestClass1 [(null)] - Log info 2
2021-05-27 14:54:31,243 [9] (D:\Winform\控制台\log4netDemo1\Program.cs:22) DEBUG log4netDemo1.Program+TestClass1 [(null)] - Log debug 2
2021-05-27 14:54:31,243 [9] (D:\Winform\控制台\log4netDemo1\Program.cs:41) ERROR log4netDemo1.Program+TestClass2 [(null)] - error

//TestClass2
System.Exception: 在這裡發生了一個異常,Error Number:1406401970
2021-05-27 14:54:31,245 [9] (D:\Winform\控制台\log4netDemo1\Program.cs:43) FATAL log4netDemo1.Program+TestClass2 [(null)] - fatal
System.Exception: 在這裡發生了一個致命的錯誤,Exception Id:1970620894
2021-05-27 14:54:31,245 [9] (D:\Winform\控制台\log4netDemo1\Program.cs:45) INFO  log4netDemo1.Program+TestClass2 [(null)] - 提示:系統正在運行
2021-05-27 14:54:31,245 [9] (D:\Winform\控制台\log4netDemo1\Program.cs:47) DEBUG log4netDemo1.Program+TestClass2 [(null)] - 調試信息:debug
2021-05-27 14:54:31,246 [9] (D:\Winform\控制台\log4netDemo1\Program.cs:49) WARN  log4netDemo1.Program+TestClass2 [(null)] - 警告信息:warn
2021-05-27 14:54:31,246 [9] (D:\Winform\控制台\log4netDemo1\Program.cs:41) ERROR log4netDemo1.Program+TestClass2 [(null)] - error
System.Exception: 在這裡發生了一個異常,Error Number:875602933
2021-05-27 14:54:31,246 [9] (D:\Winform\控制台\log4netDemo1\Program.cs:43) FATAL log4netDemo1.Program+TestClass2 [(null)] - fatal
System.Exception: 在這裡發生了一個致命的錯誤,Exception Id:2141773062
2021-05-27 14:54:31,246 [9] (D:\Winform\控制台\log4netDemo1\Program.cs:45) INFO  log4netDemo1.Program+TestClass2 [(null)] - 提示:系統正在運行
2021-05-27 14:54:31,247 [9] (D:\Winform\控制台\log4netDemo1\Program.cs:47) DEBUG log4netDemo1.Program+TestClass2 [(null)] - 調試信息:debug
2021-05-27 14:54:31,247 [9] (D:\Winform\控制台\log4netDemo1\Program.cs:49) WARN  log4netDemo1.Program+TestClass2 [(null)] - 警告信息:warn
2021-05-27 14:54:31,247 [9] (D:\Winform\控制台\log4netDemo1\Program.cs:41) ERROR log4netDemo1.Program+TestClass2 [(null)] - error
System.Exception: 在這裡發生了一個異常,Error Number:128221959
2021-05-27 14:54:31,247 [9] (D:\Winform\控制台\log4netDemo1\Program.cs:43) FATAL log4netDemo1.Program+TestClass2 [(null)] - fatal
System.Exception: 在這裡發生了一個致命的錯誤,Exception Id:1256294856
2021-05-27 14:54:31,247 [9] (D:\Winform\控制台\log4netDemo1\Program.cs:45) INFO  log4netDemo1.Program+TestClass2 [(null)] - 提示:系統正在運行
2021-05-27 14:54:31,248 [9] (D:\Winform\控制台\log4netDemo1\Program.cs:47) DEBUG log4netDemo1.Program+TestClass2 [(null)] - 調試信息:debug
2021-05-27 14:54:31,248 [9] (D:\Winform\控制台\log4netDemo1\Program.cs:49) WARN  log4netDemo1.Program+TestClass2 [(null)] - 警告信息:warn

----------------------footer--------------------------

到此这篇关于C#使用Log4.net记录日志文件的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • C#使用log4net打日志

    首先打开vs,右击解决方案,点击管理解决方案的Nuget包管理 然后我们点击浏览,搜索log4net,进行安装 然后我们需要新建一个名为log4net.config的配置文件,在配置文件中,加入以下代码 <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> </config

  • C#使用log4net记录日志

    一.Nuget安装log4net --> Install-Package log4net 二.在AssemblyInfo.cs文件中添加log4net.dll的参数. [assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", ConfigFileExtension = "config", Watch = true)] 三.右击项目→添加→新建项→xxx配置文件(web或者w

  • C#使用log4net记录日志的方法步骤

    一.Nuget安装log4net --> Install-Package log4net 二.在AssemblyInfo.cs文件中添加log4net.dll的参数. [assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", ConfigFileExtension = "config", Watch = true 三.右击项目→添加→新建项→xxx配置文件(web或者win

  • C# log4net 日志输出的实现示例

    目录 第一步:安装log4net 第二步:添加log4net.config配置文件 第三步:添加日志配置 第四步:AssemblyInfo.cs中配置 Watch = true 思路: 1.安装插件:安装log4net 2.使用配置:添加log4net.config配置文件 3.输出日志文件格式:添加日志配置 4.AssemblyInfo.cs中配置 第一步:安装log4net 第二步:添加log4net.config配置文件 新增log4net.config配置文件,内容如下,与Program

  • C#控制台程序使用Log4net日志组件详解

    C#控制台程序使用Log4net日志组件,供大家参考,具体内容如下 1.Log4net一般都不陌生,但是在配置上不同类型的项目又不相同的地方比如C#控制台程序和C# MVCWeb项目,拿控制台项目为例 项目源码在文章底部 2.首先创建一个控制台程序,引入Log4net.dll --使用NuGet 3.进行一些简单的配置,在App.config文件中配置,如果大家没有App.config文件,可以通过在解决方案中,添加新建项→应用程序配置文件,进行添加. <?xml version="1.0

  • C#中四步轻松使用log4net记录本地日志的方法

    在这里,记录我在项目中使用log4net记录本地日志的步骤.在不会之前感觉很难,很神秘,一旦会了之后其实没那么难.其实所有的事情都是一样的,下面我就分享一下我使用log4Net的经验. 第一步:首先从Visual Studio中的Nuget包管理中搜索下载 Log4Net dll文件 如下图: 选择安装的项目(哪个类库中需要记录日志就勾选上) 第二步:打开配置文件 WinFrom就是 App.config Web就是 web.config 将以下配置信息加入 <configSections>

  • C# 使用 log4net 日志组件的方法

    一. 什么是 log4net Apache log4net 库是帮助程序员将日志语句输出到各种输出目标的工具,它是从Java中的Log4j迁移过来的一个.Net版的开源日志框架.log4net 的一个显著特征是分层记录器的概念,使用这些记录器可以有选择地控制任意粒度输出日志语句.主要特征如下: 支持多个框架 输出到多个日志记录目标 分层日志记录体系结构 XML 配置 动态配置 日志记录上下文 久经考验的架构 模块化和可扩展设计 高性能和灵活性 二.C# 使用 log4net 添加Nuget 包,

  • C# log4net日志库的用法小结

    目录 一.简述 二.下载log4net 三.添加log4net.dll引用 四.添加日志配置log.config 五.在AssemblyInfo.cs文件中添加log4net.dll相关参数 六.测试例子 6.1 测试代码 6.2 效果 七.附 7.1 更多日志配置 7.2 日志格式 7.3 日志配置 一.简述 记--log4net日志开源库的简单使用:控制日志文件大小,日志文件个数,滚动式覆盖,自由控制日志打印等级 例子打包: http://xiazai.jb51.net/202110/yua

  • C#实现Log4Net日志分类和自动维护实例

    本文实例讲述了C#实现Log4Net日志分类和自动维护的实现方法.分享给大家供大家参考.具体实现方法如下: 一.背景 在程序中,我们调试运行时信息,Log4Net是一个不错的解决方案.不知道是我用的不好,用到最后反而都不想看日志了.原因是因为我n个功能使用的默认的Logger来记录日志,这样以来,所有功能记录的信息都依赖同一个配置,于是所有的信息都在一个文件中,有时候查找起来,极其不方便. 我想,能不能按照功能分类呢?如果通过配置不同的logger,然后功能根据不同的LoggerName加载Il

  • C#使用Log4.net记录日志文件

    一.简介 1.1 Log4.net优点 几乎所有的大型应用都会有自己的用于跟踪调试的API.因为一旦程序被部署以后,就不太可能再利用专门的调试工具了.然而一个管理员可能需要有一套强大的日志系统来诊断和修复配置上的问题.经验表明,日志记录往往是软件开发周期中的重要组成部分.它具有以下几个优点: 1.它可以提供应用程序运行时的精确环境,可供开发人员尽快找到应用程序中的Bug: 2.一旦在程序中加入了Log 输出代码,程序运行过程中就能生成并输出日志信息而无需人工干预. 3.另外,日志信息可以输出到不

  • Spring Boot 使用 logback、logstash、ELK 记录日志文件的方法

    Spring Boot 下,尝试使用 log4j 记录日志到 logstash,在src/main/resources 目录下添加 log4j.properties 文件进行自定义输出日志文件,未能成功.在 application.yml 中 配置 logging path 打印日志成功了,但是未能调试成功日志分文件记录.网上查阅资料,说是 Spring Boot 默认使用 logback 记录日志.log4j 多次尝试后无果,遂改为使用 logback 记录,最终测试成功. 1. 关于 Spr

  • PHP中设置时区,记录日志文件的实现代码

    复制代码 代码如下: <html><body><?phpdate_default_timezone_set('Asia/Hong_Kong');  //set time zoneset_error_handler("myHandler");               //set error handler$chinatime = date('Y-m-d H:i:s');             //get current time$max_size =

  • Python 文件处理注意事项总结

    Python 文件处理注意事项总结 文件处理在编程中是常见的操作,文件的打开,关闭,重命名,删除,追加,复制,随机读写非常容易理解和使用.需要注意的是文件的安全关闭,采用with语句轻松便捷: with open(pathname,"r") as myfile: do_some_with(myfile) 1.CSV 的文件处理 csv 模块可以很好地处理csv文件,而Pandas 模块则可以较好的处理大型的csv文件,还可以处理HTML等,并提供分块处理. 2.XML 的文件处理 对于

  • SQLite3 命令行操作指南

    .help查看帮助信息 .backup ?DB? FILE备份数据库, 方法:.backup [main|...] filename, 数据库名可以通过.databases 命令得到,一般为main, 可以省略, filename为磁盘文件名. .bail ON|OFF遇到错误时不再继续, 默认为OFF .databases列出附加到数据库的数据库和文件 .dump ?TABLE? ...保存表到SQL格式的文件中, 没有指定表名, 则保存所有. 如果要保存到磁盘上需要结合 .output 命令

  • 浅析MySQL内存的使用说明(全局缓存+线程缓存)

    首先我们来看一个公式,MySQL中内存分为全局内存和线程内存两大部分(其实并不全部,只是影响比较大的 部分): 复制代码 代码如下: per_thread_buffers=(read_buffer_size+read_rnd_buffer_size+sort_buffer_size+thread_stack+join_buffer_size+binlog_cache_size+tmp_table_size)*max_connectionsglobal_buffers=innodb_buffer_

  • SQLSERVER记录登录用户的登录时间(自写脚本)

    前一阵子经理问我能不能把用户最后一次登录我们的业务数据库的时间记录下来,因为之前有人修改过数据库sa用户的登录密码,所以我们要记录一下. 我查了一下资料,好像不能记录谁登录过业务库,只能记录谁登录过SQLSERVER 数据库版本是SQL2005 ,操作系统:Windows7 下面是本人写的一个脚本,我的实现原理是使用触发器,触发器是登录触发器,范围是整个服务器范围,如果有人登录过,就使用 bcp命令把登录信息记录日志文件 1.如果原来数据库已经存在触发器把他删掉 复制代码 代码如下: USE M

  • 可替代log4j日志的c#简单日志类队列实现类代码分享

    复制代码 代码如下: using System;using System.Collections.Generic;using System.Globalization;using System.IO;using System.Linq;using System.Text;using System.Threading; namespace LogisTrac{    /// <summary>    /// 日志类     /// 队列 可年/月/周/日/大小分割    /// 调用方法:   

  • PHP滚动日志的代码实现

    PHP滚动日志类库 PHP记录日志,我之前接触过的有按照年月分文件夹,然后按照日分文件的日志记录方式,这种方式有利有弊,有他的使用场景,我今天要说的是另一种日志记录方式--文件滚动方式记录日志,当然了,这种滚动机制也可以加在前面那种日志记录方式中. 如何让日志滚动起来 滚动日志,顾名思义,记录一个模块的日志用一系列的日志文件,同一模块文件个数有限制,最多maxNum个,大小也有限制,最大maxSize字节,文件名有一定的命名方式,比如:testlog.log.testlog_1.log,test

  • python实现搜索文本文件内容脚本

    本文介绍用python实现的搜索本地文本文件内容的小程序.从而学习Python I/O方面的知识.代码如下: import os #根据文件扩展名判断文件类型 def endWith(s,*endstring): array = map(s.endswith,endstring) if True in array: return True else: return False #将全部已搜索到的关键字列表中的内容保存到result.log文件中 def writeResultLog(allExi

随机推荐