Log4net — это .net-версия Apache log4j. Это набор механизмов журналирования конфигурации XML. Недавно появилась программа, требующая системы журналов. Для удобства интеграции я решил ее изучить. Спасибо Хао Вэю за рекомендацию.
Система log4net разделена на 7 уровней журналов. Если установлено значение «WARN», DEBUG и INFO не будут записываться. Следующим образом:
1. ВСЕ
2. ОТЛАДКА
3. ИНФОРМАЦИЯ
4. ПРЕДУПРЕЖДЕНИЕ
5.
ОШИБКА6. НЕУСТРАНИТЕЛЬНАЯ
7. ВЫКЛ.
Создание примера приложения
Шаг 1. Загрузите log4net
и перейдите по адресу logging.apache.org/log4net, чтобы получить последнюю версию. В примере, который я использовал incubating-log4net-1.2.9-beta.zip, я с нетерпением жду официальной версии.
Шаг 2. Создайте веб-приложение ASP.NET.
Я не буду вдаваться в подробности его создания, как показано в log4net-1.2.0-beta8binnet. Найдите соответствующую dll и добавьте ее в ссылку. В некоторых версиях нет скомпилированной библиотеки DLL, поэтому скомпилируйте ее самостоятельно и используйте версию .NET V1.0, чтобы преобразовать ее в версию 1.1 или 2.0. Думаю это не ошибка работы, а намеренно. Так поступают многие люди, привыкшие играть на Java.
Настройка примера приложения
Шаг 3. Добавьте информацию о сборке.
Откройте файл AssemblyInfo.cs и добавьте:
[assembly: log4net.Config.DOMConfigurator()].
Это предложение означает, что система log4net автоматически будет искать файл конфигурации Web.config, чтобы получить и загрузить информацию о конфигурации. Если вы хотите, чтобы log4net в любой момент отслеживал файл конфигурации на предмет перезагрузки, это будет немного сложнее. Вам нужно написать так:
[assembly:log4net.Config.DOMConfigurator(ConfigFile="filename",ConfigFileExtension="log4net",Watch=true)]
Шаг 4. Чтобы добавить информацию о конфигурации
, вам нужно отредактировать файл Web.config. Я каждый раз очень удивляюсь. Я вижу это. Найдите тег конфигурации и напишите configSections сразу под ним (вообще не учитывая других, что, если кто-то такой же властный, как он? Затем просто напишите его файл конфигурации журнала! Я думаю, APACHE думает так же). Взгляните на пример:
<?xml version="1.0"coding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net"
type="log4net.Config.Log4NetConfigurationSectionHandler, log4net-net-1.0"
/>
</configSections >
<!-- Этот раздел содержит настройки конфигурации log4net -->
<log4net>
<!-- Определите некоторые выходные приложения -->
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
<layout type=" log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %c [%x] <%X{auth}> - %m%n" />
< /layout>
</appender>
<!- RollingFileAppender следит за сменой файлов по размеру или дате -->
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
<param name="File" value= "C:\log\RollingLogHelloWorld.log" />
<param name="AppendToFile" value="true" />
<param name="MaxSizeRollBackups" value="10" />
<param name="MaximumFileSize" value ="1000" />
<param name="RollingStyle" value="Size" />
<param name="StaticLogFileName" value="true" />
<layout type="log4net.Layout.PatternLayout">
<param name= "ConversionPattern" value="%d [%t] %-5p %-45c [%x] - %m%n" />
</layout>
</appender>
<!-- FileAppender добавляет в журнал и вручную или размер -->
<appender name="FileAppender" type="log4net.Appender.FileAppender">
<param name="File" value="LogHelloWorld.log" />
<!-- Пример использования переменных среды в параметрах -->
<!-- <param name="File" value="${TMP}\ApplicationKit.log" /> -->
<param name="AppendToFile" value="true" />
<тип макета= "log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n" />
</layout>
</appender>
< !-- Настройте корневую категорию, добавьте приложения и установите уровень по умолчанию -->
<root>
<level value="INFO" />
<appender-ref ref="ConsoleAppender" />
</root>
<!-- Категория ApplicationKit — пользовательский интерфейс презентации -->
<logger name="WebForm1">
<level value="INFO" />
<appender-ref ref="FileAppender" />
</logger>
</log4net>
</configuration>
Обратите внимание, что атрибуту NAME узла Logger присвоено значение WebForm1, которое относится к имени класса. Добавьте такой узел в каждый класс, которому необходимо добавить LOG. Я думаю о рабочем процессе OSWORKFLOW. Гибкость, удобство и практичность часто не могут быть достигнуты одновременно. Уровень здесь INFO, то есть все, что ниже INFO, не будет записано.
Запуск примера приложения
Шаг 5. Чтобы добавить класс журнала,
сначала добавьте ссылку
, используя log4net; используя log4net.Config //Затем создайте экземпляр. Если вы внимательно изучите файл конфигурации, этот метод объявления легко понять: частный статический журнал ILog = LogManager; . GetLogger("ВебФорма1");
Шаг 6: Использование объекта журнала
. Теперь вся работа по настройке завершена. Следующий шаг — протестировать его и подключить к уровню приложения. Просто добавьте кнопку в обработчик события ответа Button1_Click.
log.Info("Привет, мир, я лесоруб");
Шаг 7: Запустите приложение
. Теперь его можно запускать. Оно должно выглядеть следующим образом:
Каждый раз, когда вы нажимаете кнопку,2006-02-13 10:12:30,671 [1228] INFO WebForm1 [] —
в файле даты появится
сообщение Hello.Мир
, я лесоруб - это такая запись.
Резюме:
Он прост и удобен в использовании. Давайте через некоторое время изучим журнал SQL. БД — лучший вариант, ха-ха.
Для получения дополнительной информации см. http://logging.apache.org/log4net/.