Блок регистрации корпоративной библиотеки не регистрируется

Я установил Enterprise Library 6 через NuGet, а затем использовал консоль блока приложения Enterprise Library Configuration, чтобы настроить ведение журнала для скользящего плоского файла и журнала событий.

Затем я создал статический класс для ведения журнала:

public static class LoggerBlock {
    public static void Write(string message, string category, int priority, int eventID, TraceEventType severity)
    {
        LogWriter logWriter = new LogWriterFactory().Create();
        Logger.SetLogWriter(logWriter, false);
        logWriter.Write(message, category, priority, eventID, severity);
        logWriter.Dispose();
    }
}

Я называю это так:

LoggerBlock.Write("Job executed...", "Information", 2, 1, System.Diagnostics.TraceEventType.Information);

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

Что мне не хватает?

РЕДАКТИРОВАТЬ - вот файл App.config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="loggingConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.LoggingSettings, Microsoft.Practices.EnterpriseLibrary.Logging, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="true" />
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </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=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
        listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.FormattedEventLogTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
        source="Enterprise Library Logging" formatter="Text Formatter"
        log="" machineName="." traceOutputOptions="None" />
      <add name="Rolling Flat File Trace Listener" type="Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.RollingFlatFileTraceListener, Microsoft.Practices.EnterpriseLibrary.Logging, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
        listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.RollingFlatFileTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
        fileName="MyLog.log" formatter="Text Formatter"
        rollInterval="None" />
    </listeners>
    <formatters>
      <add type="Microsoft.Practices.EnterpriseLibrary.Logging.Formatters.TextFormatter, Microsoft.Practices.EnterpriseLibrary.Logging, Version=6.0.0.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}"
        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>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6" />
  </startup>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="mssqllocaldb" />
      </parameters>
    </defaultConnectionFactory>
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
  </entityFramework>
</configuration>

person Legion    schedule 12.12.2018    source источник
comment
Все еще пытаетесь решить эту проблему? Я создал простое консольное приложение, и оно, как и ожидалось, написало RollingFlatFile.log. Я взял конфигурацию (только) из logging-block-in-microsoft-enterprise-library-6-0.   -  person Vagner Lucas    schedule 19.12.2018
comment
Просто любопытно, есть ли метод Dispose или Flush на LogWriter? Интересно, должны ли они явно вызываться для записи содержимого в приемники (файл, база данных и т. Д.). Вы также можете поделиться файлом конфигурации, который у вас есть для этого?   -  person ajawad987    schedule 20.12.2018
comment
И еще одна вещь, которую нужно проверить, это то, что конфигурационный файл настроен на копирование в выходной каталог при сборке.   -  person ajawad987    schedule 20.12.2018
comment
@ ajawad987 вы можете взглянуть на источник github   -  person Vagner Lucas    schedule 20.12.2018
comment
@ ajawad987 Был метод Dispose, который я пытался вызвать, но он не дал никакого эффекта. Я добавил app.config по вашему запросу.   -  person Legion    schedule 20.12.2018
comment
Я успешно написал MyLog.log, добавив <listeners> <add name="Rolling Flat File Trace Listener" /> </listeners> в app.config. Все напишу в ответ.   -  person Vagner Lucas    schedule 21.12.2018


Ответы (1)


Мне удалось записать файл журнала, добавив

<listeners>
   <add name="Rolling Flat File Trace Listener" />
</listeners>

В раздел <allEvents switchValue="All" name="All Events">.

Вот мой код (консольное приложение):

using Microsoft.Practices.EnterpriseLibrary.Logging;
using System;
using System.Diagnostics;

namespace ELogging
{
    internal static class LoggerBlock
    {
        private static readonly LogWriter LogWriter;

        static LoggerBlock()
        {
            LogWriter = new LogWriterFactory().Create();
            Logger.SetLogWriter(LogWriter, false);
        }

        public static void Write(string message, string category, int priority, int eventId, TraceEventType severity) => LogWriter.Write(message, category, priority, eventId, severity);
    }

    internal class Program
    {
        private static void Main(string[] args)
        {
            LoggerBlock.Write("Job executed...", "Information", 2, 1, TraceEventType.Information);
            Console.ReadKey();
        }
    }
}

и мой App.config (ваш с добавлением):

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="loggingConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.LoggingSettings, Microsoft.Practices.EnterpriseLibrary.Logging, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="true" />
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </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=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
           listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.FormattedEventLogTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
           source="Enterprise Library Logging" formatter="Text Formatter"
           log="" machineName="." 
           traceOutputOptions="None" />

      <add name="Rolling Flat File Trace Listener" 
           type="Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.RollingFlatFileTraceListener, Microsoft.Practices.EnterpriseLibrary.Logging, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
           listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.RollingFlatFileTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
           fileName="MyLog.log" formatter="Text Formatter"
           rollInterval="None" />
    </listeners>
    <formatters>
      <add type="Microsoft.Practices.EnterpriseLibrary.Logging.Formatters.TextFormatter, Microsoft.Practices.EnterpriseLibrary.Logging, Version=6.0.0.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}"
           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">
        <listeners>
          <add name="Rolling Flat File Trace Listener" />
        </listeners>
      </allEvents>
      <notProcessed switchValue="All" name="Unprocessed Category" />
      <errors switchValue="All" name="Logging Errors &amp; Warnings">
        <listeners>
          <add name="Event Log Listener" />
        </listeners>
      </errors>
    </specialSources>
  </loggingConfiguration>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6" />
  </startup>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="mssqllocaldb" />
      </parameters>
    </defaultConnectionFactory>
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
  </entityFramework>
</configuration>

После этого bin\Debug\MyLog.log был успешно создан:


Отметка времени: 21/12/2018 11:29:32

Сообщение: Задание выполнено ...

Категория: Информация

Приоритет: 2

EventId: 1

Степень серьезности: информация


Проверить это.

person Vagner Lucas    schedule 21.12.2018
comment
Срок действия награды истек до того, как я смог вручить ее вам. Я перезапустил его и награжу вас, когда он разблокируется через 24 часа. - person Legion; 07.01.2019
comment
Спасибо, Легион. Рад, что смог помочь! - person Vagner Lucas; 07.01.2019