一    引入背景

在软件开发周期中,无论是开发中,或是测试中,或是上线后,选择合适的工具监控程序的运行状态至关重要,只有如此,才能更好地排查程序问题和检测程序性能问题等。本篇文章主要与大家分享,如何利用Log4net在项目中记录日志文件。在应用程序出现问题时,启用日志记录有助于解决问题。使用log4net,可以在运行时启用日志记录,而无需修改应用程序二进制文件。log4net是帮助程序员输出日志语句到各种输出目标的工具。

log4net支持如下框架:

  • NET Standard 1.3 via .NET Core 1.0

  • Microsoft® .NET Framework 1.0

  • Microsoft .NET Framework 1.1

  • Microsoft .NET Framework 2.0

  • Microsoft .NET Framework 3.5

  • Microsoft .NET Framework 4.0

  • Microsoft .NET Framework 4.5

  • Microsoft .NET Framework 3.5 Client Profile

  • Microsoft .NET Framework 4.0 Client Profile

  • Microsoft .NET Compact Framework 1.0

  • Microsoft .NET Compact Framework 2.0

  • Mono 1.0

  • Mono 2.0

  • Mono 3.5

  • Mono 4.0

  • Microsoft Shared Source CLI 1.0

  • CLI 1.0 Compatible

二    log4net概述

(一)日志级别

1.级别归纳

2.级别比较

(1)级别从低=>高排序:ALL<Debug<Info<Warn<Error<Fatal<OFF

(2)日志不能记录低于最低级别的记录,如设置最低级别为Info,则低于Info的级别,都不能记录

code

测试结果

3.利用Filter过滤级别

除此之外,还能利用filter级别过滤,来设置将不同级别记录到相应文件,如将INFO级别信息记录到INFO文件中,将Error级别信息记录到Error文件中。

配置文件

后台代码

static void Main(string[] args)

{

//Log4net几种提错类型

//创建日志记录组件

ILog  iLog = log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);

try

{

iLog.Debug("Debug", new Exception("Debug"));

iLog.Info("Info", new Exception("Info"));

iLog.Warn("Warn", new Exception("Warn"));

iLog.Error("Error", new Exception("Error"));

iLog.Fatal("Fatal", new Exception("Fatal"));

}

catch (Exception ex)

{

throw new Exception(ex.Message);

}

}

测试结果

(二)级别继承

级别继承很简单,归结为一句话:若本事设置了级别,则用自己的级别,若没设置级别,则继承离自己最近的级别。

例子1

例子2

例子3

例子4

(三)日志输出形式

1.输出文件形式归纳

2.项目中常用的输出形式

3.代码操作

3.1.在Root中定义日志输出媒介

<root>

<level value="ALL" />

<!--定义日志的输出媒介,如下定义四种方式-->

<!--文件形式记录日志-->

<appender-ref ref="LogFileInfoAppender" />

<!--<appender-ref ref="LogFileErrorAppender" />-->

<!--控制台显示日志-->

<appender-ref ref="ConsoleAppender" />

<!--Windows事件日志-->

<appender-ref ref="EventLogAppender" />

<!--数据库日志-->

<appender-ref ref="AdoNetAppender_Oracle" />

</root>

3.2.配置具体的媒介,如下以文件形式为例

<!--定义输出到文件中-->

<appender name="LogFileInfoAppender" type="log4net.Appender.FileAppender">

<!--定义文件存放位置-->

<file value="E:/Log/log4netInfoLog.txt" />

<appendToFile value="true" />

<rollingStyle value="Date" />

<datePattern value="yyyyMMdd-HH:mm:ss" />

<!---定义布局模板-->

<layout type="log4net.Layout.PatternLayout">

<!--每条日志末尾的文字说明-->

<footer value="by Alan_beijing" />

<!--输出格式-->

<!--样例:2008-03-26 13:42:32,111 [10] INFO  Log4NetDemo.MainClass [(null)] - info-->

<conversionPattern value="记录时间:%date;文件名:%file;行号:%line;线程ID:[%thread];优先级:%priority;%newline

日志级别:%-5level;运行时间:%r;出错类:%logger property:[%property{NDC}];错误描述:%message" />

</layout>

</appender>

3.3.后台代码

class Program

{

static void Main(string[] args)

{

//Log4net几种提错类型

//创建日志记录组件

ILog  iLog = log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);

try

{

iLog.Debug("Debug", new Exception("Debug"));

iLog.Info("Info", new Exception("Info"));

iLog.Warn("Warn", new Exception("Warn"));

iLog.Error("Error", new Exception("Error"));

iLog.Fatal("Fatal", new Exception("Fatal"));

}

catch (Exception ex)

{

throw new Exception(ex.Message);

}

}

}

3.4.测试结果

(四)定义日志输出格式

1.常用输出格式归纳

2.code及测试结果

三   代码实例

本示例是基于VS2017控制条程序写的。

1.后台

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using log4net;

using System.Reflection;

[assembly: log4net.Config.XmlConfigurator(Watch = true)]

namespace Log4netDemo

{

class Program

{

static void Main(string[] args)

{

//Log4net几种提错类型

//创建日志记录组件

ILog  iLog = log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);

try

{

iLog.Debug("Debug", new Exception("Debug"));

iLog.Info("Info", new Exception("Info"));

iLog.Warn("Warn", new Exception("Warn"));

iLog.Error("Error", new Exception("Error"));

iLog.Fatal("Fatal", new Exception("Fatal"));

}

catch (Exception ex)

{

throw new Exception(ex.Message);

}

}

}

}

2.配置文件

<?xml version="1.0" encoding="utf-8" ?>

<configuration>

<!--声明自定义节点-->

<configSections>

<section name="log4net" type="System.Configuration.IgnoreSectionHandler"/>

</configSections>

<appSettings>

</appSettings>

<log4net>

<root>

<!--<level value="Info" />-->

<level value="ALL" />

<!--定义日志的输出媒介,如下定义四种方式-->

<!--文件形式记录日志-->

<!--<appender-ref ref="LogFile_MinLevel_Info" />-->

<appender-ref ref="LogFileInfoAppender" />

<appender-ref ref="LogFileErrorAppender" />

<!--控制台显示日志-->

<!--<appender-ref ref="ConsoleAppender" />-->

<!--Windows事件日志-->

<!--<appender-ref ref="EventLogAppender" />-->

<!--数据库日志-->

<!--<appender-ref ref="AdoNetAppender_Oracle" />-->

</root>

<!--(高) OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL (低)-->

<logger name="log4netLevel">

<!--<level value="ALL" />

<level value="DEBUG" />-->

<!--<level value="INFO" />-->

<!--<level value="WARN" />

<level value="ERROR" />-->

<!--<level value="FATAL" />

<level value="OFF" />-->

</logger>

<!--定义输出到文件中-->

<!--<appender name="LogFile_MinLevel_Info" type="log4net.Appender.FileAppender">-->

<appender name="LogFileInfoAppender" type="log4net.Appender.FileAppender">

<!--定义文件存放位置-->

<file value="E:/Log/log4netLogFile_Info.txt" />

<appendToFile value="true" />

<rollingStyle value="Date" />

<datePattern value="yyyyMMdd-HH:mm:ss" />

<!---定义布局模板-->

<layout type="log4net.Layout.PatternLayout">

<!--每条日志末尾的文字说明-->

<footer value="by Alan_beijing" />

<!--输出格式-->

<!--样例:2008-03-26 13:42:32,111 [10] INFO  Log4NetDemo.MainClass [(null)] - info-->

<conversionPattern value="记录时间:%date;文件名:%file;行号:%line;线程ID:[%thread];优先级:%priority;%newline

日志级别:%-5level;运行时间:%r;出错类:%logger property:[%property{NDC}];错误描述:%message" />

</layout>

<filter type="log4net.Filter.LevelRangeFilter">

<param name="LevelMin" value="Info" />

<param name="LevelMax" value="Info" />

</filter>

</appender>

<appender name="LogFileErrorAppender" type="log4net.Appender.FileAppender">

<!--定义文件存放位置-->

<file value="E:/Log/llog4netLogFile_Error.txt" />

<appendToFile value="true" />

<rollingStyle value="Date" />

<datePattern value="yyyyMMdd-HH:mm:ss" />

<!--最大文件大小-->

<maximumFileSize value="10MB" />

<staticLogFileName value="false"/>

<!---定义布局模板-->

<layout type="log4net.Layout.PatternLayout">

<!--每条日志末尾的文字说明-->

<footer value="by Alan_beijing" />

<!--输出格式-->

<!--样例:2008-03-26 13:42:32,111 [10] INFO  Log4NetDemo.MainClass [(null)] - info-->

<conversionPattern value="记录时间:%date;文件名:%file;行号:%line;线程ID:[%thread];优先级:%priority;%newline

日志级别:%-5level;运行时间:%r;出错类:%logger property:[%property{NDC}];错误描述:%message" />

</layout>

<filter type="log4net.Filter.LevelRangeFilter">

<param name="LevelMin" value="Error" />

<param name="LevelMax" value="Error" />

</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数据库中,数据库为C盘的log4net.mdb-->

<appender name="AdoNetAppender_Access" type="log4net.Appender.AdoNetAppender">

<connectionString value="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:log4net.mdb" />

<commandText value="INSERT INTO LogDetails ([LogDate],[Thread],[Level],[Logger],[Message]) VALUES (@logDate, @thread, @logLevel, @logger,@message)" />

<!--定义各个参数-->

<parameter>

<parameterName value="@logDate" />

<dbType value="String" />

<size value="240" />

<layout type="log4net.Layout.PatternLayout">

<conversionPattern value="%date" />

</layout>

</parameter>

<parameter>

<parameterName value="@thread" />

<dbType value="String" />

<size value="240" />

<layout type="log4net.Layout.PatternLayout">

<conversionPattern value="%thread" />

</layout>

</parameter>

<parameter>

<parameterName value="@logLevel" />

<dbType value="String" />

<size value="240" />

<layout type="log4net.Layout.PatternLayout">

<conversionPattern value="%level" />

</layout>

</parameter>

<parameter>

<parameterName value="@logger" />

<dbType value="String" />

<size value="240" />

<layout type="log4net.Layout.PatternLayout">

<conversionPattern value="%logger" />

</layout>

</parameter>

<parameter>

<parameterName value="@message" />

<dbType value="String" />

<size value="240" />

<layout type="log4net.Layout.PatternLayout">

<conversionPattern value="%message" />

</layout>

</parameter>

</appender>

</log4net>

<startup>

<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />

</startup>

</configuration>

四  推荐链接

【01】http://logging.apache.org/log4net/

相关文章:

  • .NET Core log4net 使用

  • 把旧系统迁移到.Net Core 2.0 日记(2) - 依赖注入/日志NLog

  • 部署用于生产的Exceptionlees(一个强大易用的日志收集服务)

原文地址:https://www.cnblogs.com/wangjiming/p/8600935.html


.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

浅谈Log4net在项目中如何记录日志相关推荐

  1. 【搜索引擎】浅谈ElasticSearch在项目中的应用

      ElasticSearch(简称ES)是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口.它也是目前最受欢迎的企业搜索引擎,其次是Apa ...

  2. 浅谈数字媒体艺术中的技术应用-3-工具介绍(二)

    上一篇文章介绍了数据可视化工具Processing和OpenFrameWorks,以及开源电子硬件Arduino和RaspberryPI.这一篇继续把剩下的几个工具进行逐一的介绍. 商用游戏引擎:Un ...

  3. 浅谈数字媒体艺术中的技术应用-1-技术概述

    这个是我近期在某个大学做的讲座,主要针对的是数字媒体艺术专业的大一-大三的学生,大概听讲座的有100个学生,老师有6-8个.主要讲述了数字媒体艺术专业的同学不熟悉的计算机技术,但是他们到做毕设的时候确 ...

  4. ai在计算机教学中的应用,浅谈人工智能在教育中的应用

    浅谈人工智能在教育中的应用 孙立友 摘要:随着人工智能技术的进步,以及研究的深入和在教育领域的逐步推广,对教育领域产生了深远的影响.人工智能对于弥补当前教育存在的种种缺陷和不足,推动教育发展改革和教学 ...

  5. 浅谈数字媒体艺术中的技术应用-4-技术路线和学习地图

    我们先来看下制作一个互动展示装置的设计思路和技术实现. 当我们大脑里面有一个点子之后,怎么最终输出成一个互动展示装置呢?首先我们需要设计一个外观造型,其次我们需要评估一下这个装置的互动方式,是用VR眼 ...

  6. 浅谈我在职场中与人相处的技巧

    [首页推荐]浅谈我在职场中与人相处的技巧 作者:瘦狐狸 日期:2007-1-3 2:54:00     很多人一谈到人际关系,都说不会处理.我其实也很不会处理复杂的人际关系,年轻的时候,心高气盛的和领 ...

  7. 计算机应用基础任务化教程笔记,计算机应用基础任务化教程 浅谈计算机应用基础教学中的综合任务...

    [摘要]计算机应用基础是中等职业学校的一门重要基础课.此书坚持以"应会"为本质,每章节结束后都会布置综合任务.通过综合任务来培养学生分析问题.解决问题.独立探索.勇于创新的能力.同 ...

  8. 浅谈一下对cocos2d-x中九宫格精灵的简单理解和使用

    浅谈一下对cocos2d-x中九宫格精灵的简单理解和使用 首先,使用cocos new命令创建了一个cocos2d-x的C++项目和Lua项目,在生成的HelloWorld中写测试代码. 1.C++代 ...

  9. 广积粮,缓称王——浅谈区块链项目的护城河

    广积粮,缓称王--浅谈区块链项目的护城河这里写自定义目录标题 最近,一个二次元视频网站项目火遍圈内,上线即暴跌.把各类投资者割的找不着北了.又一个拥有"强大"社区的项目上演见光死, ...

最新文章

  1. Linux 命令行的聊天工具 CenterIM
  2. 使用mvn生成webapp失败,尚未找到原因
  3. 屏幕录像专家6.0_迅捷屏幕录像工具和屏幕录像专家哪个更好用?
  4. Qt creator5.7 OpenCV249之resize函数(含源码下载)
  5. 安卓学习笔记38:利用OpenGL ES绘制旋转立方体
  6. VS2017编写C++多文件时,出现LNK2005、LNK1169报错的解决方法
  7. Word删除空白页的方法
  8. Gluster安装+kubesphere3.0
  9. 2021-09-26 计科 许佳怡
  10. 美食分享平台有哪些?网友最喜欢的三大美食分享平台盘点
  11. 说说你平时怎么优化mysql的_面试:给我说说你平时是如何优化MySQL的?
  12. python 小说下载工具_python 制作网站小说下载器
  13. 简单小白vr效果制作(unity)
  14. 一个模拟斗地主的小程序
  15. 电子元器件:三极管参数笔记(持续记录)
  16. 笑面的学校日常(14)最近一次更新2017 04 06
  17. 【Verifying transaction: failed】
  18. python 挂起_Python Killing挂起函数
  19. 【已解决】Chrome上js不生效
  20. 宜信 | 供应链金融+区块链双链合璧

热门文章

  1. grub4dos中的不容易理解的问题
  2. 简洁强大的JavaWeb框架Blade
  3. Linux脚本利器sed
  4. JQuery上传插件Uploadify使用详解
  5. C# 视频监控系列(6):服务器端——封装API(上)(1)
  6. 为record类型自定义Equals方法
  7. 如何在单个测试中同时执行多个断言
  8. Abp Vnext Vue3 的版本实现
  9. 王炸!Azure云助力.NET6现高光时刻(VS2022实战尝鲜)
  10. 为什么Kubernetes从节点会join失败