Table of Contents

Другие источники логов

В предыдущих топиках источниками логов выступали объекты встроенных в S# классов. В S# предусмотрены возможности для случаев, когда источником логов должен служить Ваш собственный класс или же источник не должен быть связан с определенным классом, а обслуживать всё приложение. Для первого случая необходимо реализовать в Вашем классе интерфейс ILogSource или наследовать его от BaseLogReceiver. Во второй ситуации можно использовать источник TraceSource, использующий систему трассировки .NET. Как это сделать показано в примере Samples/Misc/SampleLogging.

Пример SampleLogging

  1. Создаем пользовательский класс, наследующий от BaseLogReceiver.

    private class TestSource : BaseLogReceiver
    {
    }
    
  2. Создаем LogManager и декларируем переменную пользовательского класса.

    private readonly LogManager _logManager = new LogManager();
    private readonly TestSource _testSource;
    
    
  3. Добавляем источники логов.

    // пользовательский класс в качестве источника
    _logManager.Sources.Add(_testSource = new TestSource());
    // система трассировки .NET в качестве источника
    _logManager.Sources.Add(new StockSharp.Logging.TraceSource());
    
    
  4. Добавляем "слушателей" логов.

    // выводим логи в окно Monitor
    _logManager.Listeners.Add(new GuiLogListener(Monitor));
    // выводим логи в файл
    _logManager.Listeners.Add(new FileLogListener
    {
     FileName = "logs",
    });
    
    
  5. Добавляем сообщения логирования пользовательского класса. Уровень логирования выбирается случайным образом.

    var level = RandomGen.GetEnum<LogLevels>();
    switch (level)
    {
     case LogLevels.Inherit:
     case LogLevels.Debug:
     case LogLevels.Info:
     case LogLevels.Off:
     	_testSource.AddInfoLog("{0} (source)!!!".Put(level));
     	break;
     case LogLevels.Warning:
     	_testSource.AddWarningLog("Warning (source)!!!");
     	break;
     case LogLevels.Error:
     	_testSource.AddErrorLog("Error (source)!!!");
     	break;
     default:
     	throw new ArgumentOutOfRangeException();
    }
    
  6. Добавляем сообщения трассировки.

    var level = RandomGen.GetEnum<LogLevels>();
    switch (level)
    {
     case LogLevels.Inherit:
     case LogLevels.Debug:
     case LogLevels.Info:
     case LogLevels.Off:
     	Trace.TraceInformation("{0} (trace)!!!".Put(level));
     	break;
     case LogLevels.Warning:
     	Trace.TraceWarning("Warning (trace)!!!");
     	break;
     case LogLevels.Error:
     	Trace.TraceError("Error (trace)!!!");
     	break;
     default:
     	throw new ArgumentOutOfRangeException();
    }
    
  7. Результат работы примера.sample logging