Как я могу войти в специальные папки с 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" />