log4net. Пишем логи (запись в локальный каталог пользователя)
in

Для записи логов давно существую удобные инструменты (например библиотеки  log4j и log4net). Опишу вкратце как пользоваться log4net.

Сразу надо заметить, что для серьезных приложений не приемлемо записывать логи в файл находящийся в той же директории, что сама программа, поскольку у простого пользователя может не оказаться прав для записи в "program files".

Поэтому логи надо писать в каталог пользователя (Documents and Settings) подкаталог программы создаваемый .NET приложениями автоматически.

1. В конфиг файл добавляем настройки для Log4Net

app.config
:

<configuration>
<configSections>
<section
name="log4net"
type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"
/>
....
<!-- This section contains the log4net configuration settings -->
<log4net>
<appender name="rollingFile" type="log4net.Appender.RollingFileAppender,log4net" >
<param name="File" type="log4net.Util.PatternString" value="%property{LogFileDir}/current.log" />
<param name="AppendToFile" value="true" />
<param name="RollingStyle" value="Date" />
<param name="DatePattern" value="yyyy.MM.dd.log" />
<param name="StaticLogFileName" value="true" />
<layout type="log4net.Layout.PatternLayout,log4net">
<param name="ConversionPattern" value="%d [%t] %-5p %c [%x] &lt;%X{auth}&gt; - %m%n" />
</layout>
</appender>

<appender name="console"
type="log4net.Appender.ConsoleAppender, log4net">
<layout type="log4net.Layout.PatternLayout,log4net">
<param name="ConversionPattern"
value="%d [%t] %-5p %c - %m%n" />
</layout>
</appender>

<logger name="App1">
<level value="ERROR" />
<!-- Change to ALL for debug version-->
<appender-ref ref="rollingFile" />
<appender-ref ref="console" />
</logger>
</log4net>

2. При запуске программы  задаем путь куда писать логи

program.cs
:
//Получаем путь к каталогу пользователя
//Например "c:\Documents and Settings\lvm\Application Data\LVM\App1\1.1.0.0"
string AppCommonDataDir = Application.UserAppDataPath;
string LogPath = Path.Combine(AppCommonDataDir, "logs\\");

//Передаем значение во внутренние переменные  log4net
log4net.ThreadContext.Properties["LogFileDir"] = LogPath;
log4net.Config.XmlConfigurator.Configure();

3. В любом месте программы вызываем logger
ILog Logger = LogManager.GetLogger(typeof(Program));

4. Пишем сообщение
Logger.Info("Ready");
Logger.Warning("file deleted");
Logger.Error("directory cant be deleted");

0
Your rating: Нет