2016-07-07 171 views
1

我们正在讨论在我们的系统中实施Log4Net。 我曾经和它一起工作,我认为这很有用,我的朋友问,与发生异常时写入我们的数据库相比,使用它的优势是什么?为什么使用Log4Net而不是写入我的数据库?

例如与log4net

catch (Exception ex) 
      { 
       log.Error("UserNamePasswordStatus.NotExist", ex); 
      } 

,并与我们的代码:

catch (Exception ex) 
      { 
       _Params.Add("?Exception_", ex); 
       DataAccessMgr.Instance.ExecProcedure("insert_AppLog", _Params, false);     
      } 

我应该怎么回答他呢? thx

+0

例如,因为你没有数据库?或者是因为一些网络错误导致您无法将错误消息写入数据库?尽管有许多可能的原因。 – HimBromBeere

+3

简单 - 当例外情况是数据库不可用时会发生什么情况。 –

+1

出于同样的原因,您使用任何库,因此您不必编写和测试其他人已有的代码。 (我假设您打算使用Log4Net将您的日志写入您的数据库)。 – juharr

回答

1

你可以说同样的事情用写文件...但我认为主要的原因是:为什么要重复的东西,如果你可以重复上面的库。

你从简单的“登录”到你的数据库...然后你说...嗯...我想添加时间戳,所以你改变你的表...然后你认为...知道它来自哪里是有用的......我应该改变我的日志记录以跟踪这个......然后你说......然后......但是然后你记得......并且它继续前进。

个人而言,我发现NLog更容易,log4net。该项目更多的活动,更多的钟声和口哨声(这里是:how to get started文章)。我真的很喜欢使用记录器,因为我可以将一些消息重定向到一个文件,并有一些消息pop notifications on my desktop by simply configuring the logger。您可以继续使用示例,但是直接写入数据库有什么意义?
难道你没有一个DB包装开始,只是为了避免这一点?

+0

我们确实有一个DB包装器,我认为Log4Net比它有一些优势,所以我们可以停止使用该包装器并使用Log4Net。 –

+1

完全一样的想法。它使你的行为意图更清晰:'Log.Error(something_bad_happened)'。你知道它正在记录它。比'myDbWrapper.Log(something_bad_happened)'清洁得多。如果你想快速地嘲笑某些东西并在你的控制台应用程序中看到结果,那么怎么样?你如何用你的数据包封装来做到这一点? – Noctis

1

这是个人选择,但是Log4Net管理文件系统中的日志(在您的磁盘中),所以如果您没有数据库来记录错误消息,那么您可以尝试。尽管如此,我发现在大多数企业应用程序中,人们选择在数据库中记录错误而不是在文件系统中进行更好的审计

同样,如果您使用的NLog写在Log4Net(在NuGet中可用),那么您可以使用相同类型的语法记录数据库中的错误。

log.Error("UserNamePasswordStatus.NotExist", ex); 
+1

您不需要NLog将日志写入数据库。 Log4Net能够自行登录到数据库。 – juharr

+0

@juharr,这是很好的知道,但我以前使用'log4net'只是登录文件系统。 – Rahul

+0

正如你已经说过的:“这是一个个人选择”,使这个问题成为“基于主观意见的”。 – HimBromBeere

1

使用Log4Net比传统方式将日志转储到DB/Event Viewer中显然有更多的优势。它可以用更少的数量来实现。适用于大型和小型应用程序的配置步骤。

有趣的一点是,它可以在每个级别进行自定义,使其更可靠的日志记录。我喜欢滚动机制的功能(按大小,按日期等)。

相关问题