30 янв. 2010 г.

Ведение логов в .Net

Крик души

Перебрав кучу различных вариантов, испробовав свои силы в самостоятельном написании системы ведения логов и почти уже отчаявшись получить систему, удовлетворяющую моим требованиям, наткнулся на систему log4net. И, казалось бы, вот оно счастье – бери и используй! Однако, как и в любой, более-менее сложной системе, все поначалу не так уж и просто (хотя потом понимаешь – куда уже проще?!). Используя проверенный метод научного тыка (благо исходники дают нахаляву) и все, что нашлось на просторах паутины, мне удалось-таки заставить этого монстра подчиниться. Итак, все по порядку.

Настройка

Как ни странно, для того чтобы заставить работать log4net его надо настроить. Существует 2 способа настроить log4net:
1.       С помощью отдельного файла настройки;
2.       Настройка программным образом.
И в первом и во втором случае необходимо настроить одни и те же вещи.
Более подробно о настройке первым способом можно почитать тут. Поэтому остановимся на втором способе.



static ILog log = log4net.LogManager.GetLogger(typeof(LogService));
// Создаем шаблон вывода
PatternLayout logLayout = new PatternLayout("[%-5level] [%date{HH:mm:ss}] [%10r] [%-20ndc] - %message%newline");


// Создаем RollingFileAppender - шлюз, создающий новый файл с логом, при переполнении текущего


RollingFileAppender logFileAppender = new RollingFileAppender();


// Указываем где будет лежать файл с логами


logFileAppender.File = Core.Converters.MainConverter.ParseString(@"C:\Temp\SuperMega.log");


// Устанавливаем шаблон вывода


logFileAppender.Layout = logLayout;


// Указываем, что в файл надо добавлять новые записи, а не создавать файл с логами заново


logFileAppender.AppendToFile = true;


// Указываем тип ротации. В данном случае файлы будут создаваться при переполнении и при изменении текущей даты


logFileAppender.RollingStyle = RollingFileAppender.RollingMode.Composite;


// Устанавливаем максимальный размер лог-файла, при превышении которого будет создаваться новый файл


logFileAppender.MaximumFileSize = "1MB";


// Устанавливаем количество файлов в ротации


logFileAppender.MaxSizeRollBackups = 10;


// Указываем уровень фильтрации


logFileAppender.Threshold = log4net.Core.Level.Info;


// Указываем, что имя текущего лог-файла будет всегда один и тот же


logFileAppender.StaticLogFileName = true;

// Активируем настроенные опции

// при этом не настроенные опции

// настраиваются значениями по-умолчанию

logFileAppender.ActivateOptions();


// Настраиваем log4net


log4net.Config.BasicConfigurator.Configure(logFileAppender);

Вот теперь можно вести логи приложения.

Использование

Для того, чтобы отслеживать в логах сообщения от разных источников можно использовать следующую конструкцию:
using (log4net.NDC.Push("Источник №1"))
{
log.Info("Очень важное информационное сообщение ");
}
В результате в лог-файле мы получим следующее:

[INFO ] [14:26:50] [  343] [Источник №1        ] – Очень важное информационное сообщение

Комментариев нет :