log4net. Пишем логи (запись в локальный каталог пользователя)
Для записи логов давно существую удобные инструменты (например библиотеки 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] <%X{auth}> - %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");