В настоящее время я использую модуль Log4Net зарегистрировать свои экземпляры регистратора с помощью AutoFac:Регистрация Log4Net Названный Logger с Autofac рядом с Log4Net модулем
containerBuilder.RegisterModule(new Log4NetModule());
Это работает очень хорошо, однако, теперь мне нужно, чтобы иметь возможность написать некоторые строки ведения журнала в отдельный файл. Очевидно, что я хотел бы, чтобы это было инъекционные, поэтому я думал, что сделать это следующим образом:
Интерфейс:
public interface IStatisticsLogger : ILog
{ }
Autofac Регистрация:
containerBuilder.RegisterInstance(LogManager.GetLogger("Statistics"))
.As<IStatisticsLogger>();
Log4Net конфигурации:
<logger name="Statistics" additivity="false">
<level value="ALL" />
<appender-ref ref="StatisticsFileAppender" />
</logger>
<appender name="StatisticsFileAppender" type="log4net.Appender.RollingFileAppender">
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="DEBUG" />
<levelMax value="FATAL" />
</filter>
<file type="log4net.Util.PatternString" value="Logs\Statistics.txt"/>
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="1000KB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date,%message%newline" />
</layout>
</appender>
Класс:
public Service(ILog logging, IStatisticsLogger statisticsLogger)
{
// logging = General logging
// statisticsLogger = Log to a specific file
...
}
Однако, когда я запускаю это я получаю следующее сообщение об ошибке:
Тип log4net.Core.LogImpl
не может быть назначен для обслуживания IStatisticsLogger
.
Любые идеи о том, как я могу достичь своей цели?
Предполагая, что AutoFac поддерживает интерфейсы экземпляров, вы можете отдать свой экземпляр, то есть '.RegisterInstance ((ILOG) LogManager.GetLogger ("Статистика")) ' – stuartd
GetLogger() уже возвращает ILog, поэтому кастинг ничего не делает – Stitch10925
Причина, по которой я предположил, что я заметил, что сообщение об ошибке ссылается на« log4net.Core.LogImpl », который является реализацией ILog по умолчанию, возвращаемой GetLogger. – stuartd