Для изменения размера нажмите или перетащите

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

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

Пример SampleLogging

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

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

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

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

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

    C#
    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. Добавляем сообщения трассировки.

    C#
    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