Какой лучший трассировщик файла журнала переноса для .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>
Ответ 3
Я использую NLog, и я очень доволен. Исходный код хорошо написан, и его легко расширить и модифицировать.
Документация хорошая, и ее очень легко настроить.
Некоторые ссылки:
Ответ 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)
, в противном случае мы продолжаем увеличивать число, пока не найдем имя файла, которое работает. Также существует блокировка для обеспечения того, чтобы данный экземпляр был потокобезопасным.
Ответ 7
Рассмотрим Блок приложений регистрации журналов предприятия
Обязательно установите только блок ведения журнала, поскольку установщик EntLib по умолчанию проверяет все блоки.
Ответ 8
Как указано в одном из комментариев:
Записывает скользящий текстовый файл.
Примечание
Новый файл используется, когда достигается maxFileSize, а также ежедневно или еженедельно, как указано в logFileCreationSchedule.
Каждый файл имеет имя в формате "\ (-) (-). log", с локальная дата, включенная для ежедневного и еженедельного ротации, и последовательность добавлен номер, если файл уже существует.