2010-05-24 22 views
16

próbuję za pomocą bloku Logging Application Enterprise Library 5.0 zalogować prostą wiadomość do dziennika zdarzeń systemu Windows na Win XP systemu SP3 przy użyciu:Błąd aktywacji błąd podczas próby uzyskania instancję typu LogWriter

Logger.Write(msg); 

Podczas próby zalogowania pojawia się komunikat o błędzie "Błąd aktywacji podczas próby pobrania wystąpienia typu LogWriter".

Poniżej znajduje się plik konfiguracyjny używany z biblioteki MS Enterprise

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
<configSections> 
    <section name="loggingConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.LoggingSettings, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="true" /> 
</configSections> 
<loggingConfiguration name="" tracingEnabled="true" defaultCategory="General"> 
    <listeners> 
     <add name="Event Log Listener" type="Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.FormattedEventLogTraceListener, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 
      listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.FormattedEventLogTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 
      source="Enterprise Library Logging" formatter="Text Formatter" 
      log="Application" machineName="." traceOutputOptions="None" /> 
    </listeners> 
    <formatters> 
     <add type="Microsoft.Practices.EnterpriseLibrary.Logging.Formatters.TextFormatter, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 
      template="Timestamp: {timestamp}{newline}&#xA;Message: {message}{newline}&#xA;Category: {category}{newline}&#xA;Priority: {priority}{newline}&#xA;EventId: {eventid}{newline}&#xA;Severity: {severity}{newline}&#xA;Title:{title}{newline}&#xA;Machine: {localMachine}{newline}&#xA;App Domain: {localAppDomain}{newline}&#xA;ProcessId: {localProcessId}{newline}&#xA;Process Name: {localProcessName}{newline}&#xA;Thread Name: {threadName}{newline}&#xA;Win32 ThreadId:{win32ThreadId}{newline}&#xA;Extended Properties: {dictionary({key} - {value}{newline})}" 
      name="Text Formatter" /> 
    </formatters> 
    <categorySources> 
     <add switchValue="All" name="General"> 
      <listeners> 
       <add name="Event Log Listener" /> 
      </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="Event Log Listener" /> 
      </listeners> 
     </errors> 
    </specialSources> 
</loggingConfiguration> 
</configuration> 

Odpowiedz

11

zdałem sobie sprawę, że starałem się korzystać z pliku konfiguracyjnego w DLL, który nie działa. Zamiast tego powinienem używać FileConfigurationSource.

Jeśli używam tego samego App.Config z aplikacji, działało dobrze.

+0

tnks, uratowałeś mi godzin. –

0

Widziałem również ten błąd, gdy zapomniałem dodać odniesienie do DLL EntLib.

14

Chciałem tylko dodać, że ten błąd może być spowodowany przez inny problem z konfiguracją. Pamiętaj o wewnętrznych wyjątkach tego błędu. W moim przypadku było to:

"Nie można zbudować bazy danych typu. Musisz skonfigurować kontener, aby podać tę wartość."

Aby rozwiązać ten problem, musiałem dodać providerName do mojego ciągu połączenia z bazą danych w web.config. Tak więc końcowy węzeł łańcucha połączenia wyglądał następująco:

<add name="DBConn" connectionString="Data Source=ServerName;Initial Catalog=Logging;Persist Security Info=True;integrated security=True;" providerName="System.Data.SqlClient" /> 
+1

zawsze najprostsze rzeczy, które trwają najdłużej do rozwiązania !! Dzięki! – SteveCl

+1

Oddałbym 10 głosów, gdybym mógł. Geeze ... DZIĘKI. Miłego Wielkiego Piątku. – granadaCoder

+2

Dziękuję bardzo, próbowałem wielu rozwiązań związanych z GAC dla tego problemu i nic nie działało do tego czasu. – JustAMartin

1

Brakuje DLL; zwróć uwagę, kiedy umieszczasz swoje biblioteki DLL w GAC, możesz potrzebować dodać więcej bibliotek DLL do GAC. Wspólne, Data, Logging, Logging.Database i ServiceLocation DLLs upewnij się, że rezydują razem w jednym katalogu

+0

Próbowałem umieścić te DLLS w GAC, ale wciąż otrzymuję ten sam błąd, ale kiedy umieszczam je w koszu aplikacji; błąd zniknął; – Sameh

0

Miałem ten sam błąd podczas korzystania z oddzielnego pliku konfiguracyjnego entlib.

W pliku Web.config enterpriseLibrary.ConfigurationSource wskazywało EntLib.config. Kiedy użyłem narzędzia EnterpriseLibrary.Config do edycji EntLib.config, aby skonfigurować szczegóły bazy danych rejestrowania, wszystko zostało umieszczone w EntLib.config. Dostałem ten błąd, dopóki nie przeniosłem sekcji connetionStrings do Web.config.

2

Czytanie innych odpowiedzi na to pytanie, a także z moich własnych doświadczeń, wydaje się, że ten błąd występuje, gdy aplikacja nie może odczytać wymaganej konfiguracji bloku aplikacji Logging z pliku konfiguracyjnego.

dodać do scenariuszy wymienionych w poprzednich odpowiedzi, na jaki natknąłem się tego błędu kilka razy:

1) W projekcie testów jednostkowych, gdzie Zapomniałem dodać plik app.config w ogóle ;

2) W pliku konfiguracyjnym, w którym usunąłem określonego detektora z sekcji Konfiguracja logowania, ale zapomniałem usunąć nazwę detektora z kategorii, do której się odwołałem.

0

Dodatkowo do examples z Simon Tewsi chcę dodać mój przykład, gdy zalogowaniu konfiguracja znajdowała się w osobnym pliku, ale opisy sekcji były brakowało w aplikacji.config

<section name ="loggingConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.LoggingSettings, Microsoft.Practices.EnterpriseLibrary.Logging" />   

 <loggingConfiguration configSource="EnterpriseLibraryLogging.config" /> 
Powiązane problemy