Log4Net и GAC - Как ссылаться на файлы конфигурации? - PullRequest
0 голосов
/ 22 апреля 2010

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

Определения журналов находятся в файле Log4Net.xml. На этот файл в моей ассемблерной ссылке есть ссылка: [assembly: log4net.Config.XmlConfigurator (ConfigFile = "Log4Net.xml", Watch = true)]. Пока XML-файл находился в том же каталоге, что и log4net.dll, все работало нормально.

Однако теперь, когда я добавил log4net в GAC, он больше не получает файл xml.

Кто-нибудь знает, что мне нужно изменить, чтобы он снова взял файл XML? Является ли жесткое кодирование патча в ссылке на сборку единственным способом?

Большое спасибо

Ответы [ 2 ]

3 голосов
/ 22 апреля 2010

log4net ожидает, что файл конфигурации находится в пути, возвращаемом:

 System.AppDomain.CurrentDomain.BaseDirectory

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

Конечно, есть другие решения, но тогда вы больше не сможете использовать атрибут. Вызов метода ConfigureAndWatch () напрямую позволяет вам выяснить, где находится файл конфигурации; Вы даже можете выбрать местоположение (не обязательно указывать жестко заданный путь).

0 голосов
/ 22 апреля 2010

Вы можете убедиться, что для вашего файла log4net.xml установлено значение «Копировать всегда» (щелкните правой кнопкой мыши файл log4net.xml -> Свойства -> Копировать в каталог вывода = Копировать всегда). Чтобы убедиться, что ваш файл конфигурации копируется, вы должны проверить каталог bin \ debug или bin \ release и убедиться, что файл log4net.xml существует в том же каталоге, в котором выполняется ваше приложение.

Если это не помогло, попробуйте включить внутреннюю отладку в log4net. Чтобы включить внутреннюю отладку, добавьте следующий ключ в файл app.config. Это отправит внутренние отладочные сообщения log4net в окно вывода Visual Studio («Просмотр» -> «Вывод»).

<configuration>
  <appSettings>
    <add key="log4net.Internal.Debug" value="true"/>
  </appSettings>
</configuration>

Дополнительную информацию о внутренней отладке в log4net вы можете найти в блоге Фила Хаака здесь .

Если ничего не помогает, вы можете включить внутреннюю отладку и явно загрузить конфигурацию, вызвав метод logml для XmlConfigurator.ConfigureAndWatch.

var fi = new FileInfo(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "\\log4net.xml");
XmlConfigurator.ConfigureAndWatch(fi);
...