2010-06-03 180 views
12

我花了一天的時間嘗試進行Ent Lib日誌記錄工作並將任何內容記錄到數據庫或事件日誌中。我有一個具有相同的Ent Lib配置的Web應用程序和控制檯應用程序,但只有控制檯應用程序能夠登錄到事件日誌。我嘗試了一切權限,但我不知道我在做什麼—哪些服務應該有什麼。這是行不通的!企業庫日誌記錄沒有從ASP.NET登錄到事件日誌

我看過這樣的文章 http://imar.spaanjaars.com/275/logging-errors-to-the-event-log-in-aspnet-applications 我想嘗試給ASPNET帳戶這些權限。我正在使用Windows 7,並且找不到ASPNET用戶帳戶。那麼它在哪裏?

這是自動從耳鼻喉科庫實用程序生成的配置文件和

<loggingConfiguration name="Logging Application Block" tracingEnabled="true" 
    defaultCategory="General" logWarningsWhenNoCategoriesMatch="true" 
    revertImpersonation="false"> 
    <listeners> 
     <add source="Logger" formatter="Text Formatter" log="Application" 
     machineName="" listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.FormattedEventLogTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 
     traceOutputOptions="None" filter="All" type="Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.FormattedEventLogTraceListener, Microsoft.Practices.EnterpriseLibrary.Logging, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 
     name="Formatted EventLog TraceListener" /> 
    </listeners> 
    <formatters> 
     <add template="Timestamp: {timestamp}&#xD;&#xA;Message: {message}&#xD;&#xA;Category: {category}&#xD;&#xA;Priority: {priority}&#xD;&#xA;EventId: {eventid}&#xD;&#xA;Severity: {severity}&#xD;&#xA;Title:{title}&#xD;&#xA;Machine: {machine}&#xD;&#xA;Application Domain: {appDomain}&#xD;&#xA;Process Id: {processId}&#xD;&#xA;Process Name: {processName}&#xD;&#xA;Win32 Thread Id: {win32ThreadId}&#xD;&#xA;Thread Name: {threadName}&#xD;&#xA;Extended Properties: {dictionary({key} - {value}&#xD;&#xA;)}" 
     type="Microsoft.Practices.EnterpriseLibrary.Logging.Formatters.TextFormatter, Microsoft.Practices.EnterpriseLibrary.Logging, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 
     name="Text Formatter" /> 
    </formatters> 
    <categorySources> 
     <add switchValue="All" name="General"> 
     <listeners> 
      <add name="Formatted EventLog TraceListener" /> 
     </listeners> 
     </add> 
    </categorySources> 
    <specialSources> 
     <allEvents switchValue="All" name="All Events" /> 
     <notProcessed switchValue="All" name="Unprocessed Category" /> 
     <errors switchValue="All" name="Logging Errors &amp; Warnings"> 
     <listeners> 
      <add name="Formatted EventLog TraceListener" /> 
     </listeners> 
     </errors> 
    </specialSources> 
    </loggingConfiguration> 
+0

你能發佈你配置的相關部分嗎? WebApp和ConsoleApp是否在同一臺機器上運行? – RoelF 2010-06-03 12:30:25

+0

是的,WebApp和ConsolApp在同一臺機器上運行 – Costa 2010-06-03 12:45:16

+0

「我嘗試了所有權限」 - 您嘗試了什麼? – 2010-06-03 15:51:52

回答

4

我相信IIS7(這我假設下,你就只能在App.config中,而不是在web.config中使用)application pool will be running under NETWORK SERVICE

您可以嘗試將NETWORK SERVICE完全控制權授予註冊表項HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application
(不推薦!)

或者,您可以授予每個人完全控制HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application,記錄消息,然後恢復這種變化。一旦密鑰設置完成,您就不需要寫入註冊表的權限。

或者你也可以手動配置,你需要事先避免權限問題的註冊表項:

Windows Registry Editor Version 5.00 

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application\Logger] 
"EventMessageFile"="c:\\WINNT\\Microsoft.NET\\Framework\\v2.0.50727\\EventLogMessages.dll" 


只是一個更新這個答案,根據MSDN:「要創建Windows Vista及更高版本或Windows Server 2003中的事件源,您必須具有管理權限「。

+2

我認爲給網絡服務完全訪問註冊表是個好主意。 – Costa 2010-06-17 08:08:31

+0

是的。我同意你 - 不推薦。 – 2010-06-17 18:40:21

+1

您可以將NETWORK SERVICE帳戶寫入權限僅授予您需要的事件源。Tuzo在上面提到了它的大部分內容,但是這裏有一個可能有幫助的文檔:現在我知道這是一個較老的問題,但爲了使用事件日誌,必須首先創建事件源(由具有管理權限的用戶創建)。此外,如果您嘗試在網站中使用此功能,則必須授予NETWORK SERVICE帳戶訪問權才能寫入事件日誌。本網站將提供幫助:http://msdn.microsoft.com/en-us/library/ms998320.aspx – Mark 2012-08-01 14:59:15

4

我使用PowerShell腳本來創建相應的源...

$source = "FoToIaW" 
if ([System.Diagnostics.EventLog]::SourceExists($source) -eq $false) 
{ 
    [System.Diagnostics.EventLog]::CreateEventSource($source, "Application") 
} 
1

或使用該代碼....

public static void RunSnippet(string logName, string eventSource) 
{ 
    // this will throw an exception if you don't have admin rights 
    if (!EventLog.SourceExists(eventSource)) 
    { 
     System.Diagnostics.EventLog.CreateEventSource(eventSource, logName); 
     Console.WriteLine("Event Log and Source: {0},{1} were created successfully.",logName, eventSource); 
    } 
    else 
    { 
     Console.WriteLine("Event log/source: {0}/{1} already exists",logName, eventSource); 
    } 
    Console.WriteLine("Done"); 

} 
2

運行Visual Studio以管理員身份

  1. 右鍵點擊視覺工作室圖標
  2. 點擊「以管理員身份運行」
相關問題