如何使用log4net登录c#(do logging in c# with log4net)

当您用C#编写计算机代码时,最好包含日志代码。这样,当出现问题时,你知道从哪里开始寻找。Java世界多年来一直在这样做。为此,您可以使用log4net。它是ApacheLog4j2的一部分,ApacheLog4j2是一个流行的开源日志框架。...

当您用C#编写计算机代码时,最好包含日志代码。这样,当出现问题时,你知道从哪里开始寻找。Java世界多年来一直在这样做。为此,您可以使用log4net。它是ApacheLog4j2的一部分,ApacheLog4j2是一个流行的开源日志框架。

Woman Working on Laptop Opposite her Friend

这不是唯一的.NET日志框架;有很多。然而,Apache名称是可信的,最初的Java日志框架已经存在了15年多。

为什么要使用log4net日志框架?

当应用程序或服务器崩溃时,您会感到奇怪。是硬件故障、恶意软件、可能是拒绝服务攻击,还是一些奇怪的密钥组合设法绕过了所有代码检查?你就是不知道。

您需要找出发生崩溃的原因,以便进行更正。启用日志记录后,您可能会看到它发生的原因。

开始

从apachelog4net网站下载log4net文件。使用PGP签名或MD5校验和验证下载文件的完整性。校验和没有PGP签名那么强。

使用log4net

Log4net支持七个级别的日志记录,从无到全部,优先级不断提高。这些是:

  1. 致命的
  2. 错误
  3. 警告
  4. 信息
  5. 调试
  6. 全部的

较高级别包括所有较低级别。调试时,使用DEBUG显示所有,但在生产环境中,您可能只对FATAL感兴趣。可以在组件级别以编程方式或在XML配置文件中进行选择。

伐木工人

为了灵活性,log4net使用记录器、附加器和布局。logger是一个控制日志记录的对象,是ILog接口的一个实现,它指定了五种布尔方法:isDebugEnabled、IsInfo Enabled、IsWarnEnabled、IsErrorEnabled和IsFatalEnabled。它还指定了Debug、Info、Warn、Error和fatal五种方法,以及重载和五种格式化字符串版本。您可以在log4net在线手册中看到完整的ILog接口。

伐木工人被分配一个级别,但不是全部或关闭,只有其他五个级别。

附加器控制日志记录的位置。它可以放入数据库、内存缓冲区、控制台、远程主机、包含滚动日志的文本文件、Windows事件日志,甚至可以通过SMTP发送电子邮件。总共有22个附加器,它们可以组合在一起,因此您有很多选择。追加器被追加(因此而得名)到记录器。

Appenders通过匹配子字符串、事件级别、级别范围和记录器名称的开始来过滤事件。

布局

最后,有七个布局可以与Appender关联。这些控件控制事件消息的记录方式,可以包括异常文本、时间戳布局和XML元素。

使用xml进行配置

尽管可以通过编程方式进行配置,但也可以使用XML配置文件进行配置。为什么您更喜欢配置文件而不是代码更改?简单地说,让技术支持人员更改配置文件要比让程序员更改代码、测试和重新部署新版本容易得多。因此,配置文件是一种方法。最简单的可能路径是将App.config添加到项目中,如下例所示:

<?xml version=“1.0”encoding=“utf-8”?&gt&书信电报;配置&gt&书信电报;配置部分&gt&书信电报;section name=“log4net”type=“log4net.Config.Log4NetConfigurationSectionHandler,log4net”/&gt&lt/配置部分&gt&书信电报;log4net&gt&书信电报;根&gt&书信电报;level value=“调试”/&gt&书信电报;appender ref=“LogFileAppender”/&gt&lt/根&gt&书信电报;appender name=“LogFileAppender”type=“log4net.appender.RollingFileAppender”&gt&书信电报;file value=“log.txt”/&gt&书信电报;appendToFile value=“true”/&gt&书信电报;rollingStyle value=“Size”/&gt&书信电报;MaxSizerollBackup值=“5”/&gt&书信电报;最大文件大小值=“10MB”/&gt&书信电报;staticLogFileName value=“true”/&gt&书信电报;布局类型=“log4net.layout.PatternLayout”&gt&书信电报;转换模式值=“%d[%t]-5p%c%m%n”/&gt&lt/布局&gt&lt/appender&gt&lt/log4net&gt&lt/配置>

log4net联机文档解释了所有配置文件字段。设置App.config后,使用log4net和此行添加:

[程序集:log4net.Config.XmlConfigurator(Watch=true)]

另外,必须通过调用LogManager.GetLogger(…)获取实际的记录器。GetLogger通常使用其所用的typeof(类)调用,但此函数调用还获取:

System.Reflection.MethodBase.GetCurrentMethod().DeclaringType

此示例显示了中的两个,其中一个已注释,因此您可以选择。

使用log4net;[assembly:log4net.Config.XmlConfigurator(Watch=true)]命名空间gvmake{class程序{private static readonly ILog=LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);//private static readonly ILog=LogManager.GetLogger(typeof(Program));静态void Main(string[]args){log.Debug(“应用程序启动”);}}

  • 发表于 2021-09-15 04:56
  • 阅读 ( 115 )
  • 分类:编程

你可能感兴趣的文章

外面的(out)和参考c#(ref in c#)的区别

...方法称为被调用方法。为了管理传递的值和返回结果,C使用参数。它们是有值参数、输出参数和参考参数。值参数用于按值将参数传递到方法中。引用参数用于通过引用将参数传递给方法。输出参数用于将结果从方法返回。在C#...

  • 发布于 2020-10-18 20:42
  • 阅读 ( 236 )

压倒一切(overriding)和c中的过载#(overloading in c#)的区别

...#(overriding in c#)? 在OOP中还有一个重要的概念是继承。它使用已经存在的类的属性和方法。它提高了代码的可重用性。已经存在的类是基类,新类称为派生类。在重写多态性时,应该有一个基类和一个派生类。重写的方法调用与...

  • 发布于 2020-10-18 23:50
  • 阅读 ( 218 )

领域(field)和c属性#(property in c#)的区别

...的一个主要优点是它支持面向对象编程(OOP)。它有助于使用对象构造程序或软件。在一个系统中,有很多对象,它们的对象使用方法传递消息。字段和属性是与OOP相关联的两个术语。本文讨论了C#中字段与属性的区别。 目录 1....

  • 发布于 2020-10-19 02:36
  • 阅读 ( 306 )

班(class)和结构(c)#(structure in c#)的区别

...询。C的主要优点是它支持面向对象编程(OOP)。OOP对于使用对象建模程序或复杂软件非常有用。对象是使用类创建的。结构也是C#中的一个概念。在编程中,变量是可以存储数据的存储区域。每个变量都有一个特定的数据类型要...

  • 发布于 2020-10-19 17:15
  • 阅读 ( 228 )

通用(generic)和c中的非泛型集合#(non-generic collection in c#)的区别

...Queue和HashTable。每个集合类实现IEnumerable接口。它有助于使用foreach循环遍历集合中项的元素。 ArrayList是数组的一种替代方法。如果有一个数组可以存储10个元素,它就不能存储20个元素。如果数组初始化为10个元素,但只存储5个...

  • 发布于 2020-10-24 01:08
  • 阅读 ( 341 )

代表(delegates)和c中的事件#(events in c#)的区别

...和事件的关键区别在于,委托是对方法的引用,而事件与使用委托的事件处理程序相关联。当事件发生时,它向代理发送一个信号。然后委托执行相应的函数。因此,所有事件都依赖于委托。 目录 1.概述和主要区别 2. C中的委托...

  • 发布于 2020-10-24 02:21
  • 阅读 ( 211 )

无人登录时,系统使用哪个windows帐户?

如果您对Windows如何在引擎盖下运行感到好奇和了解更多,那么您可能会发现自己在想,当没有人登录Windows时,哪个“帐户”活动进程正在运行。有鉴于此,今天的超级用户问答帖子为好奇的读者提供了答案。 今天的问答环节...

  • 发布于 2021-04-10 04:25
  • 阅读 ( 175 )

抽象类(abstract class)和c中的接口#(interface in c#)的区别

...抽象类的实现逻辑由其派生类提供。为了使一个类抽象,使用了“abstract”修饰符,这意味着一些缺少的实现需要在从它派生的类中实现。它同时包含抽象成员和非抽象成员。抽象类旨在提供可由多个派生类进一步共享和重写的...

  • 发布于 2021-06-25 03:34
  • 阅读 ( 360 )

哈希表(hashtable)和词典(dictionary)的区别

...键值对保存。哈希表或字典只能包含唯一键。程序员可以使用键查找或删除特定值。哈希表不是强类型的。因此,程序员可以将键值对的任何元素添加到哈希表中。另一方面,字典是强类型的。程序员应该指定键和值的数据类型...

  • 发布于 2021-06-30 21:47
  • 阅读 ( 1649 )

int解析(int parse)和在c中转换为32#(convert toint32 in c#)的区别

...传递给Convert to int32将得到零。 引用 1.  比尔瓦格纳。”如何:将字符串转换为数字(C#编程指南)。“Microsoft文档,此处提供。2。”Convert.ToInt32方法(系统)。“Convert.ToInt32方法(系统)| Microsoft文档,此处提供。2.“Convert.ToIn...

  • 发布于 2021-07-01 04:44
  • 阅读 ( 201 )
幺宝小塞
幺宝小塞

0 篇文章

相关推荐