Как каждый диагностирует log4net, когда он прекращает регистрироваться

Один из вариантов - вы можете создать метод фабрики для foo, а затем зарегистрировать эту фабрику в поставщиках для модуля. Затем в своем модульном тесте вы можете ввести все, что захотите, и подделать участников.

import {foo} from 'fooProject';

export function fooFactory(): any {
    return foo;
}

@NgModule({
    providers: [{ provide: 'Foo', useFactory: fooFactory }]
})
export class YourModule { }
import { Inject, Component } from '@angular/core';

export class YourComponent {
 constructor(@Inject('Foo') private foo:any){}

 trigger() {
  this.foo.bar();
 }
}
16
задан Eric Pohl 13 March 2012 в 22:56
поделиться

2 ответа

Я думаю, что существует значение конфигурации, можно вставить appSettings раздел app.config/web.config для включения внутренних операторов отладки в log4net:

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

Это даст Вам некоторое понимание любых ошибок, которые мог бы глотать log4net.

15
ответ дан 30 November 2019 в 16:30
поделиться

Расширение предыдущего ответа.

Чтобы добавить прослушиватель трассировки для трассировки log4net.Internal.Debug, добавьте это в конфигурацию своего приложения:

  <system.diagnostics>
    <trace autoflush="true">
      <listeners>
        <add
            name="textWriterTraceListener"
            type="System.Diagnostics.TextWriterTraceListener"
            initializeData="c:\temp\log4net.txt" />
      </listeners>
    </trace>
  </system.diagnostics>

Замените значение атрибута initializeData выше на желаемый путь к файлу журнала. Убедитесь, что у приложения или серверного процесса ASP.NET есть разрешение на запись в этот файл.

Еще одна вещь, которую вы можете сделать, это проверить сообщения, которые возвращаются из конфигурации log4net при запуске. Начиная с log4net версии 1.2.11, методы XmlConfigurator.Configure() возвращают коллекцию ICollection, содержащую строки со списком проблем, возникших в процессе настройки.

Итак, если у вас есть что-то вроде этого:

XmlConfigurator.Configure();

измените его на

ICollection configMessages = XmlConfigurator.Configure();

и проверьте configMessages в отладчике или распечатайте их где-нибудь, например

foreach (string msg in configMessages)
{
   Console.WriteLine(msg);
}

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

24
ответ дан 30 November 2019 в 16:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: