Блокировка приложения, не входящего в файл

У меня есть следующая конфигурация и код, writer.logentry не выдает исключение, но файл не создан.

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

Я полагаю, что я что-то упустил в конфигурации?

<loggingConfiguration name="" tracingEnabled="true" defaultCategory="General">
    <listeners>
      <add name="Flat File Trace Listener" type="Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.FlatFileTraceListener, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
        listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.FlatFileTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
        fileName="AskAndTrack.log" traceOutputOptions="LogicalOperationStack, DateTime, Timestamp, Callstack" />
    </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="Flat File Trace 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="Flat File Trace Listener" />
        </listeners>
      </errors>
    </specialSources>
  </loggingConfiguration>

    catch(Exception ex)
    {
        var logEntry = new LogEntry();
        logEntry.Message = ex.Message;
        Logger.Write(logEntry);
    }

2 ответа

Решение

Посмотрите на меня, как будто вам не хватает категории и приоритета, вот мой фрагмент. Игнорируйте вспомогательные методы, они просто возвращают категорию, такую ​​как "Общие", и приоритет, такой как "Ошибка".

                if (!Logger.Writer.IsLoggingEnabled()) return;

            var logEntry = new LogEntry { Severity = GetTraceEventTypeFromPriority(severity) };
            logEntry.Categories.Add(GetLogCategory(app_name, severity)); // CHANGED TO NONE BECAUSE SITECORE SUCKS
            logEntry.Priority = (int)severity;

            if (!Logger.ShouldLog(logEntry)) return;

            logEntry.Message = message;
            logEntry.Title = GetLogTitle(RequestDataManager.RequestData.blah, message, severity);

            lock (_locker)
            {
                Logger.Write(logEntry);
            }

Размещенная конфигурация выглядит хорошо. Корпоративная библиотека не сгенерирует исключение, если при ведении журнала произошла ошибка - она ​​попытается зарегистрировать сбой в специальном источнике ошибок (если он настроен). Вы не добавили Trace Listener для ошибок, но я рекомендую это сделать.

Ваша проблема выглядит так, как будто это разрешения. Можете ли вы убедиться, что у процесса есть разрешения на создание файла с именем AskAndTrack.log? Или, возможно, создайте файл заранее или напишите в папку, в которой явно предоставлены разрешения (например, "Полный доступ для всех" (только для тестирования!)).

Другие вопросы по тегам