Как я могу войти в специальные папки с log4net?
Как я могу войти в специальные папки (например, %APPDATA%
) с помощью файла app.config?
Я могу сделать это программно, но мне нужно иметь возможность использовать файл app.config для настройки. Я видел сообщение об использовании %envFolderPath
. Он недоступен в последней выпущенной версии, но только в их последнем коде.
Ниже приведен код, который программным образом настраивает журнал для специальных папок.
public void ExampleLog
{
XmlConfigurator.Configure();
var fileName = GetFileName();
var appender = new log4net.Appender.RollingFileAppender
{
Layout = new log4net.Layout.PatternLayout("%d - %m%n"),
File = fileName,
MaxSizeRollBackups = 10,
MaximumFileSize = "100MB",
AppendToFile = true,
Threshold = Level.Debug
};
appender.ActivateOptions();
BasicConfigurator.Configure(appender);
}
private static string GetFileName()
{
const string subPath = "MySubFolder";
var path = String.Format(@"{0}\{1}", Environment.GetFolderPath (Environment.SpecialFolder.CommonApplicationData), subPath);
const string logName = "Log.txt";
return Path.Combine(path, logName);
}
Ответы
Ответ 1
Довольно уверен, что синтаксис для этого доступен в текущей версии.
<file type="log4net.Util.PatternString" value="%env{APPDATA}\\MyApp\\Log.txt" />
Если вам нужно что-то еще, вы можете изучить возможность подкласса класса PatternString, как описано здесь: Log4Net не может найти% username, когда я назову файл в своем приложении
Ответ 2
Просмотрите образец конфигурации RollingFileAppender
в документах log4net (для всех остальных параметров).
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="log.txt" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="100KB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.SimpleLayout" />
</layout>
</appender>
Я ссылался на переменные среды (включая специальные папки) с базовым форматом переменных log4net ${NAME}
. И тегу file
не нужно указывать PatternLayout
, это подразумевается.
<file value="${APPDATA}\log.txt" />