Какой лучший трассировщик файла журнала переноса для .NET.

Я ищу хороший TraceListener для .Net, который поддерживает перекатывание файла журнала на основе ограничений по размеру.

Ограничения

  • Использует .Net, встроенный в журнал трассировки
  • Независимый класс или двоичный файл, который не является частью какой-либо гигантской библиотеки
  • Позволяет перекатывать файл журнала на основе размера

Ответ 1

Вы можете использовать Microsoft.VisualBasic.Logging.FileLogTraceListener, который встроен в .NET Framework. Не позволяйте VisualBasic в пространстве имен пугать вас, вам просто нужно будет ссылаться на сборку microsoft.visualbasic.dll, и она должна работать нормально с С#.

Ответ 2

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

<system.diagnostics>
  <sources>
    <source name="System.Net">
      <listeners>
        <add name="System.Net"/>
      </listeners>
    </source>
    <source name="System.Net.Http">
      <listeners>
        <add name="System.Net"/>
      </listeners>
    </source>
    <source name="System.Net.Sockets">
      <listeners>
        <add name="System.Net"/>
      </listeners>
    </source>
  </sources>
  <switches>
    <add name="System.Net" value="Verbose"/>
    <add name="System.Net.Http" value="Verbose"/>
    <add name="System.Net.Sockets" value="Verbose"/>
  </switches>
  <sharedListeners>
    <add name="System.Net"
          type="Microsoft.VisualBasic.Logging.FileLogTraceListener, Microsoft.VisualBasic, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
          traceOutputOptions="DateTime,ProcessId,ThreadId"
          customLocation="c:\temp"
          location="Custom"
          logFileCreationSchedule="Daily"
          baseFileName="NetworkTrace"/>
  </sharedListeners>
  <trace autoflush="true"/>
</system.diagnostics>

И добавьте ссылку во время выполнения

  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.VisualBasic"  culture="neutral" publicKeyToken="b03f5f7f11d50a3a"/>
        <codeBase version="10.0.0.0" href="file://C:/Program Files (x86)/Reference Assemblies/Microsoft/Framework/.NETFramework/v4.5/Microsoft.VisualBasic.dll"/>
      </dependentAssembly>
    </assemblyBinding>
  </runtime>

Ответ 4

Я большой поклонник log4net (http://logging.apache.org/log4net/index.html), он очень прост в настройке и поддерживает практически любой тип журнала, который вы но они также могут быть написаны на заказ.

Он также может выполнять разные действия в зависимости от уровня журнала. Мы регистрируем все сообщения в текстовом файле и Error → Fatal send emails

Ответ 5

Я использовал как Log4Net, так и Nlog. Я предпочитаю NLog, но на самом деле, как только они настроены, вы забыли, что они там все равно (пока что-то не сломается, тогда вам это понравится!). должно быть много документации на обоих в interweb

Ответ 6

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

Мы создали класс, который расширяет его, и переопределяет методы Write/WriteLine.

Там a try/catch (InvalidOperationException), и если это произойдет, мы вызываем base.Close и переименуем файл (FullLogFileName) следующим образом (нам нужен base.Close, иначе мы получим ошибку "file in use" ):

В цикле мы добавляем число до конца и видим, существует ли этот файл; если нет, используйте File.Move(FullLogFileName, newFileWithNumber), в противном случае мы продолжаем увеличивать число, пока не найдем имя файла, которое работает. Также существует блокировка для обеспечения того, чтобы данный экземпляр был потокобезопасным.

Ответ 8

Как указано в одном из комментариев:

Класс FileLogTraceListener

Записывает скользящий текстовый файл.

Примечание

Новый файл используется, когда достигается maxFileSize, а также ежедневно или еженедельно, как указано в logFileCreationSchedule.

Каждый файл имеет имя в формате "\ (-) (-). log", с локальная дата, включенная для ежедневного и еженедельного ротации, и последовательность добавлен номер, если файл уже существует.