如果记录器无法记录怎么办?

时间:2014-04-04 09:10:45

标签: c# logging error-handling error-logging

我最近遇到理论上操作完成的情况,但是记录器未能向文件写入一些信息(没有对日志文件夹的写访问权限)并且操作被报告为失败(甚至应用程序因异常而崩溃) )。在我的项目中,我们经常使用像

这样的代码
try { /*Business logic*/}
catch (BusinessLogicEx1) {...}
catch (BusinessLogicEx2) {...}
catch (SomeKindOfException ex)
{
    LogThisException(ex);
}

如果日志由于某种原因不可用怎么办?你通常如何对待这种情况?你以某种方式通知用户吗?

2 个答案:

答案 0 :(得分:1)

我在开始时检查日志路径,文件可用性和文件访问权限,以确保这些事情不会发生很多..如果您仍然遇到锁定/不可用的文件

  • 我通常会通过Gui通知用户并写入临时目的地,以便日志记录丢失
  • 如果没有Gui可用,我会写一个Windows事件条目

    System.Diagnostics.EventLog appLog =  new System.Diagnostics.EventLog();  
    appLog.Source = "This Application's Name";  
    appLog.WriteEntry("An entry to the Application event log.");
    
  • 在大型项目中,配置管理在开始时进行检查并记住错误,因此当应用程序以管理员模式执行时,它可以显示发生的任何内部错误

最佳解决方案取决于您的方案

答案 1 :(得分:1)

你尽力降温。尝试简化日志,尝试使用不同的API等登录备用目标。如果可能,请对消息进行排队,以便以后记录。这真的归结为你愿意付出多少努力,多么重要。并且尽量不要让糟糕的情况变得更糟(通过尝试 hard 来记录更多问题/崩溃应用程序)。

有趣的问题是是否通知用户。考虑:

  • 是否有用户入手?如果您是某项服务,则无人可以看到您的消息。
  • 当前用户正确通知的用户?如果这是使用您的信息亭的职员,那么您应该通知管理员。
  • 用户可以做些什么吗? "任何"可能包括"通知适当的管理员"。如果是这种情况,请确保错误消息具有描述性和可操作性。
  • 用户(或用户网站上的管理员)应该是通知的人,还是,开发人员(或您的公司)?通常你想要听到问题的时间,所以你知道什么是代码中断,通常由于错误的配置而破坏,什么依赖是脆弱的(想想你依赖的REST api)。我不会在这里进行隐私讨论,但你应该清楚地考虑这个角度,来自legal / PR pov。
  • 经常记录某些内容并向用户显示其他内容。不同的受众(最终用户与调试/管理员)。

我希望这证明只有你能回答这个问题,知道你的应用程序做了什么以及如何使用。就我个人而言,我必须清楚地通知用户,就像我必须默默登录的情况一样,以及某些情况下代码必须通过电话回家#'并将问题报告给 me