Как я могу войти в специальные папки с log4net? - PullRequest
12 голосов
/ 22 декабря 2009

Как войти в специальные папки (например, %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);
}

Ответы [ 2 ]

12 голосов
/ 22 декабря 2009

Уверен, что синтаксис для этого доступен в текущем выпуске.

<file type="log4net.Util.PatternString" value="%env{APPDATA}\\MyApp\\Log.txt" />

Если вам нужно что-то большее, вы можете посмотреть на вариант подкласса класса PatternString, как описано здесь: Log4Net не может найти свойство% username, когда я называю файл в моем приложении

4 голосов
/ 16 июня 2011

Посмотрите пример конфигурации 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" />
...