Подтвердить что ты не робот

Ошибка активации произошла при попытке получить экземпляр типа 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}&#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>
4b9b3361

Ответ 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" />