Произошла ошибка активации при попытке получить экземпляр типа LogWriter - PullRequest
16 голосов
/ 25 мая 2010

Я пытаюсь использовать блок «Приложение для ведения журналов» Enterprise Library 5.0 для записи простого сообщения в журнал событий Windows в системе Win 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>

Ответы [ 7 ]

14 голосов
/ 26 мая 2011

Я просто хотел добавить, что эта ошибка может быть вызвана другой проблемой конфигурации. Обязательно посмотрите на внутренние исключения для этой ошибки. В моем случае это было:

"База данных типа не может быть построена. Вы должны сконфигурировать контейнер для предоставления этого значения."

Для решения этой проблемы мне пришлось добавить providerName в строку подключения к моей базе данных в файле web.config. Итак, последний узел строки подключения выглядел так:

 <add name="DBConn" connectionString="Data Source=ServerName;Initial Catalog=Logging;Persist Security Info=True;integrated security=True;" providerName="System.Data.SqlClient" />
11 голосов
/ 26 мая 2010

Я понял, что пытался использовать файл конфигурации из библиотеки DLL, которая не работает. Я должен использовать FileConfigurationSource вместо этого.

Если я использую тот же App.Config из приложения, он работал нормально.

2 голосов
/ 21 января 2013

При прочтении других ответов на этот вопрос и из моего собственного опыта, в общем, кажется, что эта ошибка возникает, когда вашему приложению не удается прочитать некоторую требуемую конфигурацию для блока приложения ведения журнала из файла конфигурации.

Чтобы добавить к сценариям, упомянутым в предыдущих ответах, я несколько раз сталкивался с этой ошибкой:

1) В проекте модульного тестирования, где я вообще забыл добавить файл app.config;

2) В файле конфигурации, где я удалил определенного слушателя из раздела loggingConfiguration, но забыл удалить имя слушателя из источника CategorySource, который ссылался на него.

1 голос
/ 05 июля 2011

отсутствует DLL; Обратите внимание, когда вы размещаете свои библиотеки DLL в GAC, вам может понадобиться добавить дополнительные библиотеки DLL в GAC. Библиотеки DLL Common, Data, Logging, Logging.Database и ServiceLocation должны быть расположены в одном каталоге

0 голосов
/ 20 апреля 2013

Дополнительно к примерам из Саймон Тьюси Я хочу добавить свой пример, когда конфигурация журнала была расположена в отдельном файле, но описания разделов пропущены в app.config

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

 <loggingConfiguration configSource="EnterpriseLibraryLogging.config" />
0 голосов
/ 19 апреля 2012

У меня была такая же ошибка при использовании отдельного файла конфигурации entlib.

В Web.config enterpriseLibrary.ConfigurationSource указывает на EntLib.config. Когда я использовал инструмент EnterpriseLibrary.Config, чтобы отредактировать EntLib.config, чтобы настроить детали базы данных журналов, он поместил все в EntLib.config. Я получал эту ошибку, пока не переместил раздел ConnetionStrings в Web.config.

0 голосов
/ 27 июля 2010

Я также видел эту ошибку, когда забывал добавить ссылку на библиотеки EntLib.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...