Проблема с Системой. Диагноз. TextWriterTraceListener, не пишущий журнала в файловую систему

Для решения проблемы с передающей электронной почтой через smtp-сервер, где электронные письма не становятся отправленными мне рекомендовали позволить регистрировать Систему использования. Диагноз. TextWriterTraceListener для трассировки связи с smtp-сервером для отслеживания любых ошибок. Я добавил следующее к своему web.config под узлом:

<system.diagnostics>
      <trace autoflush="true" />
      <sources>
        <source name="System.Net" >
          <listeners>
            <add name="MyTraceFile"/>
          </listeners>
        </source>

        <source name="System.Net.Sockets">
          <listeners>
            <add name="MyTraceFile"/>
          </listeners>
        </source>
      </sources>

      <sharedListeners>
        <add
          name="MyTraceFile"
          type="System.Diagnostics.TextWriterTraceListener"
          initializeData="System.Net.trace.log"                />
      </sharedListeners>

      <switches>
        <add name="System.Net" value="Verbose" />
        <add name="System.Net.Sockets" value="Verbose" />
      </switches>
    </system.diagnostics>

Я испытал его на своей машине разработки, и это работало просто великолепно! Я мог легко считать полную связь с smtp-сервером. Однако в продуктивной среде (работающий на IIS 6 в Windows 2003 Server), это не работает вообще. Никакой журнал не становится записанным в файловую систему. Моя первая мысль была то, что, возможно, учетная запись рабочего процесса ASP.NET (СЕТЕВАЯ СЛУЖБА) не имела достаточных прав записать в файловую систему в указанном местоположении. Я зафиксировал это, но все еще не получите журнал. Во-вторых, я думал, что, возможно, папка была установлена на "только для чтения" и зафиксировала это также. Но тем не менее я не получаю записанного журнала.

У кого-либо есть идея, какова проблема могла бы быть? Или возможно некоторый совет относительно того, как я мог зафиксировать это? Заранее спасибо!

8
задан Tomas Vinter 28 January 2010 в 13:32
поделиться

4 ответа

Прежде всего, я бы проверил, действительно ли трассировка работает, ничего не записывая в файловую систему. То есть я бы просто использовал обычную трассировку Windows. Для просмотра вывода трассировки я бы использовал DebugView Windows Sysinternals . Конечно, возможно, вам следует изменить свой файл конфигурации, я не очень знаком с синтаксисом.

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

Как вы думаете, куда сохраняется ваш файл журнала? Возможно, это другое место, когда дело касается производственной среды. Я думаю, что в Windows Server 2003 вы должны искать свой файл где-то в WinDir, а не в папке (ах) веб-приложения.

Когда дело доходит до отладки таких проблем, я бы передал учетную запись IIS локальному администратору / администратору домена, чтобы посмотреть, решена проблема или нет. Если это решено, то здесь есть проблема с разрешениями.

Удачи!

3
ответ дан 5 December 2019 в 19:00
поделиться

Да, вы можете создать случайные числа в любом заданном диапазоне:

var min = 10000;
var max = 99999;
var num = Math.floor(Math.random() * (max - min + 1)) + min;

Или упрощенно:

var num = Math.floor(Math.random() * 90000) + 10000;
-121--983234-

Как насчет:

Math.floor(Math.random()*90000) + 10000;
-121--983233-

Та же сборка при разработке и производстве? Часто константа условной компиляции TRACE не определена в режиме выпуска. Тогда никакой трассировки не появится.

2
ответ дан 5 December 2019 в 19:00
поделиться

Пробовали ли вы использовать Process Monitor , чтобы узнать, записывается ли файл System.Net.trace.log или возникает ли ошибка при его создании? Возможно ли, что он просто записывается в странное место, которое вы не ищете (я считаю, что по умолчанию должен быть текущий рабочий каталог рабочего процесса ASP.NET).

1
ответ дан 5 December 2019 в 19:00
поделиться

Я бы начал с указания полного пути в атрибуте initializeData:

<add 
      name="MyTraceFile" 
      type="System.Diagnostics.TextWriterTraceListener" 
      initializeData="c:\SomePath\System.Net.trace.log"                
 /> 

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

Когда вы используете относительный путь, как в вашей текущей конфигурации, я считаю, что он будет относиться к корневому каталогу приложения при работе под IIS. Но при работе под Cassini на машине разработки этого не будет - IIRC будет относиться к% WINDIR% \ System32, но я бы не стал на это полагаться.

2
ответ дан 5 December 2019 в 19:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: