Как настроить ведение журнала в Spring.NET с помощью log4net? - PullRequest
6 голосов
/ 17 ноября 2011

Я хотел бы использовать библиотеку Spring.NET Aspect с аспектом ведения журнала вместе с log4Net.Я нашел эту статью , как использовать log4Net с Common Logging API.

Мое тестовое приложение является консольным и основано на клиентском профиле .NET 4.0.

1-я попытка

Таким образом, я ссылаюсь в своем проекте на следующие библиотеки:

  • Spring.Core версия 1.3.2.40943, runtime v4.0.30319
  • Spring.AOP версия 1.3.2.40943, runtime v4.0.30319
  • Common.Logging версия: 1.2.0.0, время выполнения v1.0.3705

Сборки выше у меня из Program Files \ Spring.NET 1.3.2 \ bin \ net \ 4.0

  • версия log4net: 1.2.10.0, среда выполнения v2.0.50727

Не удалось найти сборку Common.Logging.Log4Net.dll в Program Files \ Spring.NET 1.3.2 \ bin \ net \ 4.0 , поэтому я загружаю эту сборку из SourceForge :

  • Common.Logging.Log4Net версия 2.0.0.0 runtime v2.0.50727

Я настроил регистратор в app.config:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
      <sectionGroup name="spring">
          <section name="context" type="Spring.Context.Support.ContextHandler, Spring.Core"/>
          <section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core"/>
      </sectionGroup>
      <sectionGroup name="common">
        <section name="logging" type="Common.Logging.ConfigurationSectionHandler, Common.Logging" />
      </sectionGroup>
      <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
  </configSections>

  <common>
    <logging>
      <factoryAdapter type="Common.Logging.Log4Net.Log4NetLoggerFactoryAdapter, Common.Logging.Log4Net">
        <arg key="configType" value="INLINE" />
      </factoryAdapter>
    </logging>
  </common>

  <log4net>
    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger %ndc - %message%newline" />
      </layout>
    </appender>

    <root>
      <level value="DEBUG" />
      <appender-ref ref="ConsoleAppender" />
    </root>

    <logger name="myLogger">
      <level value="DEBUG" />
    </logger>
  </log4net>

  <spring>
    <context>
      <resource uri="config://spring/objects"/>
    </context>
    <objects xmlns="http://www.springframework.net">
    </objects>
  </spring>
</configuration>

и попробовал это:

ILog log = LogManager.GetLogger("myLogger");
log.Error("hello world");

Я получил эту ошибку времени выполнения:

{"Не удалось настроить Common.Logging из раздела конфигурации 'common / logging'."}} 1044 *

Внутреннее исключение:

{"Произошла ошибка при созданииОбработчик раздела конфигурации для общего / ведения журнала: невозможно создать тип 'Common.Logging.Log4Net.Log4NetLoggerFactoryAdapter, Common.Logging.Log4Net' (E: \ C # PROJECTS \ STUDY \ SPRING.NET \ SpringNet.Asprises \ LoggingWithLog4Net \ bin \ Debug \LoggingWithLog4Net.vshost.exe.Config строка 18) "}

StackTrace:

в System.Configuration.BaseConfigurationRecord.EvaluateOne (ключи String [], вход SectionInput, логическое значение)isTrusted, FactoryRecord factoryRecord, SectionRecord sectionRecord, Object parentResult) в System.Configuration.BaseConfigurationRecord.Строка конfigKey, Boolean getLkg, Boolean checkPermission, Boolean getRuntimeObject, Boolean requestIsHere, Object & result, Object & resultRuntimeObject) в System.Configuration.BaseConfigurationRecord.GetSectionRecursive (строковый configKey, Boolean ObjectLeject, resultE, Boolean, resultOutle, GetOneleRuele, Boolean, GetOntRelayEgnameв System.Configuration.BaseConfigurationRecord.GetSectionRecursive (строковый configKey, логический getLkg, логический checkPermission, логический getRuntimeObject, логический requestIsHere, Object & result, Object & resultRuntimeObject) в System.Configuration.GaseConfiguration.ConfigurationSecision.ConfigurationSeciguration.Convice_set_set_setup_setup.Configuration.Internal.IInternalConfigSystem.GetSection (String sectionName) в System.Configuration.ConfigurationManager.GetSection (String sectionName) в System.Configuration.ConfigurationSettings.GetConfig (String sectionName) в общем.ng sectionName)
в Common.Logging.LogManager.BuildLoggerFactoryAdapter ()

2-я попытка

Я думаю, проблема должна быть в версии сборки Common.Logging.Log4Net версия 2.0.0.0 runtime v2.0.50727 .Поскольку я использовал Common.Logging версия: 1.2.0.0, среда выполнения v1.0.3705 .

, поэтому я изменил версию Common.Logging с 1.2.0.0 на 2.0.0.0.Я использовал Common.Logging от SourceForge .

И снова протестировал.Я получил эту ошибку:

Невозможно создать тип 'Common.Logging.Log4Net.Log4NetLoggerFactoryAdapter, Common.Logging.Log4Net'

Внутреннее исключение:

{"Не удалось загрузить файл или сборку 'Common.Logging.Log4Net' или одну изего зависимости. Система не может найти файл указано. ":" Common.Logging.Log4Net "}

StackTrace:

at System.RuntimeTypeHandle.GetTypeByName (имя строки, логическое значение throwOnError, логическое ignoreCase, логическое отражениеOnly, StackCrawlMarkHandle stackMark, Boolean loadTypeFromPartialName, Тип ObjectHandleOnStack) в System.RuntimeTypeHandle.GetTypeByName (имя строки, логическое значение throwOnError, логическое ignoreCase, логическое отражениеOnly, StackCrawlMark & ​​stackMark, Boolean loadTypeFromPartialName) в System.RuntimeType.GetType (String typeName, Boolean throwOnError, Логическое игнорированиеCase, логическое отражениеOnly, StackCrawlMark & ​​stackMark) at System.Type.GetType (String typeName, Boolean throwOnError, Boolean ignoreCase) в Common.Logging.ConfigurationSectionHandler.ReadConfiguration (XmlNode раздел) в C: \ CCNet \ netcommon \ ствол \ Modules \ Common.Logging \ SRC \ Common \ Common.Logging \ Logging \ ConfigurationSectionHandler.cs: линия 130

3-я и последняя попытка

Наконец-то я нашел сборку Common.Logging.Log4Net версии 1.2.0.2 в весенних примерах, поэтому я ее использовал.

  • Common.Logging.Log4Net версия 1.2.0.2
  • Common.Logging версия 1.2.0.0
  • log4Net 1.2.10.0

Протестировано и снова получено сообщение об ошибке:

{"Не удалось настроить Common.Logging из раздела конфигурации 'Общее / каротаж'. "}

Внутреннее исключение:

{"Произошла ошибка при создании обработчика раздела конфигурации для common / logging: невозможно создать тип «Common.Logging.Log4Net.Log4NetLoggerFactoryAdapter, Common.Logging.Log4Net '(E: \ C # ПРОЕКТЫ \ ИССЛЕДОВАНИЯ \ SPRING.NET \ SpringNet.Aspects \ LoggingWithLog4Net \ Bin \ Debug \ LoggingWithLog4Net.vshost.exe.Config строка 18) "}

StackTrace:

{"Невозможно создать тип «Common.Logging.Log4Net.Log4NetLoggerFactoryAdapter, Common.Logging.Log4Net ' "}

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

Ответы [ 3 ]

5 голосов
/ 18 ноября 2011

Для Spring.NET 1.3.2 вы должны использовать:

  • Common.Logging 2.0.0
  • Common.Logging.Log4Net 2.0.0
  • log4net1.2.10

Убедитесь, что последние два log4net dll скопированы в выходной каталог.Поскольку ваш код не ссылается на него напрямую, он может не копироваться Visual Studio.

1 голос
/ 11 сентября 2012

Другая возможность:

  • Common.Logging 2.1.1
  • Common.Logging.Log4Net 2.1.1
  • log4net 1.2.10

Я рекомендую пропустить Common.Logging 2.1.0, поскольку он выдает это исключение при чтении совершенно корректного раздела app.config:

"Невозможно привести объект типа 'System.Configuration.DefaultSection' квведите 'System.Configuration.AppSettingsSection'. "

Установка 2.1.1 устранила проблему.

1 голос
/ 28 марта 2012

Также вместо

<resource uri="config://springs/objects"/>

Попробуйте

<resource uri="config://spring/objects"/>

В вашем конфигурационном файле имя группы называется "spring", а не "springs". Я скопировал у вас, чтобы заставить мою работу, и попал в ту же проблему. Наконец-то разобрался почему.

Надеюсь, это поможет!

...