Ошибка активации произошла при попытке получить экземпляр типа LogWriter
Я пытаюсь использовать блок приложений Logging Enterprise Library 5.0 для регистрации простого сообщения в журнале событий Windows в системе Windows XP SP3, используя:
Logger.Write(msg);
При попытке входа в систему появляется сообщение об ошибке "Активация при попытке получить экземпляр типа LogWriter".
Ниже представлен конфигурационный файл, используемый в библиотеке 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}
Message: {message}{newline}
Category: {category}{newline}
Priority: {priority}{newline}
EventId: {eventid}{newline}
Severity: {severity}{newline}
Title:{title}{newline}
Machine: {localMachine}{newline}
App Domain: {localAppDomain}{newline}
ProcessId: {localProcessId}{newline}
Process Name: {localProcessName}{newline}
Thread Name: {threadName}{newline}
Win32 ThreadId:{win32ThreadId}{newline}
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 & Warnings">
<listeners>
<add name="Event Log Listener" />
</listeners>
</errors>
</specialSources>
</loggingConfiguration>
</configuration>
Ответы
Ответ 1
Я просто хотел добавить эту ошибку, может быть вызвана другой проблемой конфигурации. Обязательно посмотрите на внутренние исключения для этой ошибки. В моем случае это было:
"База данных типов не может быть сконструирована. Вы должны настроить контейнер для предоставления этого значения.
Чтобы решить эту проблему, мне пришлось добавить имя_сервера в строку подключения к базе данных в файле web.config. Итак, окончательная строка соединения node выглядела так:
<add name="DBConn" connectionString="Data Source=ServerName;Initial Catalog=Logging;Persist Security Info=True;integrated security=True;" providerName="System.Data.SqlClient" />
Ответ 2
Я понял, что пытался использовать файл Config из DLL, который не работает. Вместо этого я должен использовать FileConfigurationSource.
Если я использую тот же App.Config из приложения, он отлично работает.
Ответ 3
Чтение других ответов на этот вопрос, и из моих собственных опытов, в общем, кажется, что эта ошибка возникает, когда ваше приложение не может прочитать требуемую конфигурацию для блока приложений ведения журнала из файла конфигурации.
Чтобы добавить к сценариям, упомянутым в предыдущих ответах, я пару раз сталкивался с этой ошибкой:
1) В проекте unit test, где я вообще забыл добавить файл app.config;
2) В файле конфигурации, где я удалил конкретный прослушиватель из раздела loggingConfiguration, но забыл удалить имя прослушивателя из категории Source, который ссылался на него.
Ответ 4
У этой библиотеки отсутствует DLL; если вы разместите свою DLL в GAC, вам может потребоваться добавить больше DLL в GAC. Common, Data, Logging, Logging.Database и ServiceLocation DLLS убедитесь, что они находятся вместе в одном каталоге
Ответ 5
Я также видел эту ошибку, забыв добавить ссылку на DLL EntLib.
Ответ 6
У меня была такая же ошибка при использовании отдельного конфигурационного файла entlib.
В Web.config, enterpriseLibrary.ConfigurationSource указал на EntLib.config. Когда я использовал инструмент EnterpriseLibrary.Config для редактирования EntLib.config для настройки данных базы данных ведения журнала, он поместил все в EntLib.config. Я получил эту ошибку, пока не переместил раздел connetionStrings в Web.config.
Ответ 7
Кроме примеров
Саймон Тьюси
Я хочу добавить свой пример, когда конфигурация регистрации была размещена в отдельном файле, но описания разделов были пропущены в app.config
<section name ="loggingConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.LoggingSettings, Microsoft.Practices.EnterpriseLibrary.Logging" />
<loggingConfiguration configSource="EnterpriseLibraryLogging.config" />