2012-11-20 114 views
1

我正在创建一个面向公众的网站,其中一个要求是将所有错误/警告写入日志文件。异步写入错误日志文件

我已经尝试了无处不在的catch块,并且还可以捕获应用程序错误事件中的错误。

作为一个面向公众的网站,我担心日志文件可能呈指数级增长(即使我每天创建新文件),并且可能会降低网站性能。有没有办法异步写入错误文件,所以不会对用户造成任何影响?

任何样本或指导都非常严格。

我的网站是在ASP.NET Web窗体和c#中。

感谢

+2

看到各种方法在这里:http://stackoverflow.com/questions/1181561/how-to-有效的日志 - 异步 – rro

回答

2

建议:蒂珀我强烈建议你使用ELMAH来代替。尽可能简单地设置并使您的生活变得如此简单(您将永远不会再编写自己的日志程序)。它甚至捕获未处理的异常!它是

它是什么看看下面的网站,以及如何方便地设置

ELMAH

安全:你必须知道的唯一的事情是,你必须以其他方式稳固ELMAH您会话可以被劫持。但是,保护它非常容易。看看以下网站上的安全问题以及如何保护它。

ASP.NET Session Hijacking


5-10分钟设置步骤

  1. 进入的NuGet,搜索 “ELMAH SQL” 并安装 “ELMAH MS SQL Server上”。

  2. 在你的“App_Readme”文件夹中将会有一个“Elmah.SQLServer.sql”文件,它安装一个表格和3个存储过程。在你想要连接的数据库中运行它。 (你将不得不为现存服务器中的存储过程设置权限,以便它可以读取和写入)

  3. 转到您的web配置(您会注意到ELMAH已自动为您更新)。发现,如果你不想远程访问保持现状,我相信它会得到保护。

如果您想允许远程访问,以便您可以在任何需要将其设置为true的情况下查看错误日志网站。你然后必须保护它。下面的内容将确保它为管理员并拒绝所有其他用户。看看这个网站了解更多信息Secure ELMAH

<location path="elmah.axd"> 
    <system.web> 
     <httpHandlers> 
      <add verb="POST,GET,HEAD" 
       path="elmah.axd" 
       type="Elmah.ErrorLogPageFactory, Elmah" /> 
     </httpHandlers> 
    <authorization> 
     <allow roles="admin" /> 
     <deny users="*" /> 
    </authorization> 
    </system.web> 
    <system.webServer> 
    <handlers> 
     <add name="ELMAH" 
      verb="POST,GET,HEAD" 
      path="elmah.axd" 
      type="Elmah.ErrorLogPageFactory, Elmah" 
      preCondition="integratedMode" /> 
    </handlers> 
    </system.webServer> 

  1. 转到您的连接字符串和“ELMAH-SQLSERVER”连接字符串指向特定的数据库。

  2. 转到您的try catch,并在catch部分添加“ErrorSignal.FromCurrentContext()。Raise(ex);”

  3. 您的应用程序现在会捕获处理和未处理的异常并将错误写入SQL Server表。要查看错误,请打开浏览器并转至“yourwebsite/elmah.axd”

  4. 您也可以进行设置,以便将错误发送给您。看看如何做到这一点的以下网址:Setup ELMAH Email

忽略上述数量订购