2010-06-03 16 views
12

Spędziłem dzień próbując zrobić Ent Lib Logging i logować wszystko do bazy danych lub dziennika zdarzeń. Mam aplikację internetową i aplikację konsolową z tą samą konfiguracją Ent Lib, ale tylko aplikacja konsoli może zalogować się do dziennika zdarzeń. Próbowałem wszystkiego z uprawnieniami, ale nie wiem, co dokładnie robię, które usługi powinny mieć co. To nie działa!Enterprise Library Logging nie loguje się do dziennika zdarzeń z ASP.NET

Czytam artykuły takie jak ten http://imar.spaanjaars.com/275/logging-errors-to-the-event-log-in-aspnet-applications i chcę spróbować dać konto ASPNET te uprawnienia. Używam Windows 7 i nie mogę znaleźć konta użytkownika ASPNET. Więc gdzie to jest?

Jest to plik konfiguracyjny, który generowany jest automatycznie użyteczności Ent Lib i działa tylko na app.config, a nie na web.config

<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

Czy możesz opublikować odpowiednie części swojej konfiguracji? Czy WebApp i ConsoleApp działają na tym samym komputerze? – RoelF

+0

Tak, WebApp i ConsolApp działają na tej samej maszynie – Costa

+0

"Próbowałem wszystkiego z uprawnieniami" - czego próbowałeś? –

Odpowiedz

4

wierzę, że pod IIS7 (której jestem zakładając, że jesteś przy użyciu) application pool will be running under NETWORK SERVICE.

Możesz spróbować podać NETWORK SERVICE Full Control kluczowi rejestru HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application.
(nie zalecane!)

Alternatywnie, można udzielić każdy pełną kontrolę HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application zalogować wiadomość, a następnie przywrócić tę zmianę. Po ustawieniu klucza nie będziesz potrzebować uprawnień do zapisu w rejestrze.

Albo można ręcznie skonfigurować klucze rejestru, które wymagają wcześniej, aby uniknąć problemów z uprawnieniami:

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" 


właśnie aktualizacja tej odpowiedzi, że zgodnie z MSDN: „Aby utworzyć źródło zdarzeń w systemie Windows Vista i nowszym lub Windows Server 2003, musisz mieć uprawnienia administracyjne ".

+2

Myślę, że to zły pomysł, aby usługa sieciowa miała pełny dostęp do rejestru. – Costa

+0

Tak. Zgadzam się z tobą - niezalecane. –

+1

Możesz nadać uprawnienia do zapisu konta NETWORK SERVICE tylko dla potrzebnego źródła zdarzeń.Tuzo wspomina o większości powyżej, ale oto dokument, który może pomóc: Wiem, że jest to starsze pytanie, ale aby użyć dziennika zdarzeń, źródło zdarzenia musi być najpierw utworzone (przez użytkownika mającego uprawnienia administracyjne). Ponadto, jeśli próbujesz użyć tego w witrynie internetowej, konto NETWORK SERVICE musi mieć dostęp do zapisu w dzienniku zdarzeń. Ta strona pomoże: http://msdn.microsoft.com/en-us/library/ms998320.aspx – Mark

4

używam skryptu PowerShell, aby stworzyć odpowiednie źródło ...

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

lub użyć tego kodu ....

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

run visual studio jako administrator

  1. Kliknij prawym przyciskiem myszy ikonę wizualnego studio
  2. Kliknij "Uruchom jako administrator"
Powiązane problemy