2013-08-02 37 views
1

操作方法事件查看器日志中创建错误4

public ActionResult Index() 
{ 
    ViewBag.Message = "Modify this template to jump-start your ASP.NET MVC application."; 
    LogError("lok", "lok2", "lok3"); 
    return View(); 
} 

LOGERROR方法

private void LogError(string transactionId, string sAmountPaid, string deviceId) 
     { 
      // Creating the source, which will generate error 
      if (!EventLog.SourceExists("MyApplication")) 
      { 
       //Creating log, where error will be logged 
       EventLog.CreateEventSource("MyApplication", "MyLog"); 
      } 

      // Creating object of EventLog to log error 
      var myAppLog = new EventLog { Source = "MyApplication" }; 

      //Writing error to log 
      myAppLog.WriteEntry(transactionId + sAmountPaid + deviceId); 
     } 

当我运行主页总是显示“错误。而处理发生错误你的申请。”。我怀疑这是由于无法在“事件查看器”上创建日志。当我在本地主机上运行上面的代码时,它工作正常。但是当我将它发布到Windows Server 2012上的IIS服务器时,它出现上述错误。

我的问题:我应该启用任何类型的权限来创建登录事件查看器。如果是这样怎么做?我的IIS正在使用Windows Server 2012.

回答

3

这已经被问过。以下链接是针对该讨论。

Writing to an event log in ASP.NET on Windows Server 2008 IIS7

你需要给应用程序的权限来写入Windows事件日志。

但是,由于以下几个原因,不推荐这样做。

  1. 不缩放。
  2. 向服务器本身引入攻击媒介,如果您的应用程序未正确保护,可能会被利用。
  3. 应用程序无法在“共享主机”主机解决方案托管,你就必须有访问操作系统本身对这些(或一个系统,使这个喜欢的cPanel)

替代授予登录到Windows事件日志:

  1. 登录到数据库或文件
  2. 在分布式架构中,或企业级系统,发送事件日志条目到的数据传送到一个聚合系统队列系统。
+0

是的。我同意你的意见。我将测试数据记录到文本文件中。这仅用于测试场景。稍后我会将其移至DB。感谢您的反馈。 – Sampath

1

您需要管理员权限才能创建事件源,因为名称必须是唯一的,并检查是否需要检查包括安全性在内的所有注册表项。我怀疑你想给你的IIS帐户本地管理员,但。 我们这样做的方式是(对于桌面应用程序),我们的安装程序是否创建事件源(作为管理员),然后我们的应用程序只是读取它的写入。

+0

你知道如何做到这一点的asp.net mvc网络应用程序? – Sampath

+0

不,我不知道。取决于你如何部署。我们有一个庞大的自定义安装程序(做各种其他的事情,其中​​一些需要管理员权限)。你可以这样做(为操作系统男孩写一个小应用程序)作为手动部署步骤。 –

+0

+1为您提供支持。 – Sampath