2016-09-01 12 views
6

Podczas korzystania z LibLog, czy możliwe jest wywoływanie wywołań do rejestratora? Zważywszy na listach Wiki następujący przykład do wykorzystania:LibLog - Nawiązywanie połączeń z rejestratorem

public class MyClass 
{ 
    private static readonly ILog Logger = LogProvider.For<MyClass>(); 
} 

Tutaj rejestrator szczegółów wdrażania ukryte od konsumenta, który jest najbardziej na rzecz korzystania z tej biblioteki. Taki, że konsument biblioteki nie musi martwić się o to, w jaki sposób tworzone są rejestratory. Patrząc na tym blogu:

http://dhickey.ie/2015/06/capturing-log-output-in-tests-with-xunit2/

Wydaje się, że wiele z blachy kotłowej jest dodawany do przechwytywania danych wyjściowych dziennika, nie jestem do końca pewien, co do podejścia, biorąc pod uwagę, że również używa przekierowany wyjście Serilog w teście jednostkowym coś, co wydaje się dziwne, biorąc pod uwagę bibliotekę, powinno polegać tylko na abstrakcji pozyskiwania danych?

Jedynymi opcjami mogę obecnie myśleć to:

wstrzyknąć logger - To prawdopodobnie byłoby dziwne dla konsumenta biblioteki, a każda biblioteka wtedy nieść swój własny ILogger definicja, która musi być wstrzykiwany, pokonując zalety abstrakcji.

Podłącz się do prawdziwego szkieletu rejestrowania - Ustaw bieżący LogProvider dla LibLog, aby używał Log4Net lub podobnego, a następnie jakoś spróbuj wstrzyknąć makrofotografię/kodowanie do Log4Net i wywoływać wywołania za pośrednictwem serwera proxy.

Dość względnie prosty sposób wywoływania wywołań do rejestratora byłby doceniany, ale podejrzewam, że wykonanie równoległego testu spowodowałoby problemy, nawet gdyby można było wywoływać połączenia w powyższym rejestratorze?

+0

Po co robić trzeba przetestować połączenia do logowania?Zwykle nie jest to konieczne. – Artiom

+0

@Artiom dlaczego nie byłaby wymagana? Jakie testy obejmują rejestrowanie? – Mig

+0

Nie mam takiej potrzeby w żadnym z moich projektów. Właśnie dlatego pytałem. – Artiom

Odpowiedz

0

Co robiłem w moim projekcie:

stworzyłem mój LoggerFactory. Ujawnia te same statyczne metody, co NLogger.

public class LoggerFactory 
{ 
    private static ILoggerFactoryStrategy _loggerFactoryStrategy = new DummyLoggerFactoryStrategy(); 

    public static void Initialize(ILoggerFactoryStrategy loggerFactoryStrategy) 
    { 
     _loggerFactoryStrategy = loggerFactoryStrategy; 
    } 

    public ILogger GetLogger<T>() 
    { 
     return _loggerFactoryStrategy.GetLogger<T>(); 
    } 

    .... 
} 

Strategia manekina może pisać tylko po to, aby debugować dane wyjściowe lub nie robić nic. Inną strategią może wyglądać smth jak:

public class LoggerFactoryStrategy : ILoggerFactoryStrategy 
{ 
    public ILogger GetLogger<T>() 
    { 
     //create LibLog instance instead with LogProvider.For<T>() 
     var nlogger = LogManager.GetLogger(typeof(T).Name); //create instance of NLogger 
     return new NLogLogger(nlogger); 
    } 
} 

I NlogLogger owijki może być smth jak

internal class NLogLogger : ILogger 
{ 
    private readonly Logger _logger; 

    public NLogLogger(Logger logger) 
    { 
     _logger = logger; 
    } 

    public void Debug(string message) 
    { 
     _logger.Debug(message); 
    } 

    public void Warn(string message, params object[] args) 
    { 
     _logger.Warn(message, args); 
    } 

    public void Info(Exception exception) 
    { 
     _logger.Info(exception); 
    } 

    ...... 
} 

Podczas uruchamiania aplikacji zainicjować go z właściwą strategią, co wykorzystuje NLogger pod maską.

Jeśli chcę przetestować połączenia z rejestratorem, mogę użyć wyśmiewanej strategii. To podejście umożliwia usunięcie odwołań do biblioteki rejestratorów w obrębie rozwiązania, z wyjątkiem projektów głównych i umożliwia przełączanie się między nimi, jeśli zajdzie taka potrzeba w przyszłości.

Pozwoliło to również na użycie NLogger w projektach PCL.

+0

Nie jestem pewien, co to ma konkretnie wspólnego z LibLog i wywoływanie wywołań do rejestratora? – Mig

+0

@Mig dodał przykład – Artiom

0

W konfiguracji rejestrowania dla prawie wszystkich rejestratorów można skonfigurować wtedy, aby zgłaszać wyjątki podczas niepowodzenia logowania.

Próbka z NLog

<nlog throwExceptions="true"> 
... your nlog config 
</nlog> 

ale w abstrakcji utworzone przez LibLog stracił ten wyposażony

Powiązane problemy