C # как указать путь к файлу appData в файле app.config - PullRequest
17 голосов
/ 08 июня 2009

Я использую log4net и мне нужно было сохранить файл журнала в файле AppData для win XP / Vista и т. Д.

Это мой файл app.config, и я указал имя softphone.log. Однако я не уверен, как указать полный путь к файлу, поскольку у каждого пользователя будет свой путь в зависимости от имени пользователя.

<log4net>
    <logger name="default">
      <level value="DEBUG"/>
    </logger>
    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
      <file value="softphone.log"/>
      <appendToFile value="true"/>
      <rollingStyle value="Size"/>
      <maxSizeRollBackup value="10"/>
      <maximumFileSize value="1MB"/>
      <staticLogFileName value="true"/>
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%d [%t] %-5p %c %m%n"/>
      </layout>
    </appender>
  </log4net>

В моем исходном коде я могу получить путь, выполнив следующее:

System.Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)

Однако я не могу использовать вышеупомянутое в моем app.config, и если я жестко закодировал путь в моей системе, путь будет:

C:\Documents and Settings\John\Application Data

Однако это будет отличаться для каждого клиента. Так есть ли способ сделать это для файла app.config?

Большое спасибо за любые предложения,

1 Ответ

18 голосов
/ 08 июня 2009

Я не верю, что вы можете делать то, что вы хотите, есть метод для пользовательских областей анализа файла app.config, чтобы вы могли добавить свой собственный токен, который вы могли бы заменить на правильное значение, но я не вижу, как это будет работать внутри секции log4net.

Однако все, что настроено для log4net внутри конфигурации, также может быть задано в коде. Я думаю, что лучшим вариантом было бы установить свойство для приложения в коде сразу после запуска приложения.


Ах, не говоря уже о быстром поиске, который показал мое невежество. Из здесь и здесь получается, что что-то похожее на это:

<file value="${APPDATA}\log-file.txt" />

Будет делать то, что вы хотите. Я не проверял это сам, поэтому оставлю свой первый ответ тоже - но мне было бы интересно узнать, повезет ли вам с этим.

...