Я хотел бы использовать библиотеку 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 ' "}
Я действительно запутался в том, что я делаю плохо? Какая-то проблема с версией сборок?