﻿<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type='text/css' href='https://stocksharp.ru/css/style.css'?>
<?xml-stylesheet type='text/css' href='https://stocksharp.ru/css/bbeditor.css'?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title type="html">Логирование дочерних объектов</title>
  <id>~/topic/9130/logirovanie-dochernih-obektov/</id>
  <rights type="text">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  <updated>2026-06-10T11:51:02Z</updated>
  <logo>https://stocksharp.ru/images/logo.png</logo>
  <link href="https://stocksharp.ru/handlers/atom.ashx?category=topic&amp;id=9130" rel="self" type="application/rss+xml" />
  <entry>
    <id>https://stocksharp.ru/posts/m/42842/</id>
    <title type="text">Для этого нужно указать название у источника. </title>
    <published>2018-02-28T08:12:52Z</published>
    <updated>2018-02-28T08:12:52Z</updated>
    <author>
      <name>Support</name>
      <uri>https://stocksharp.ru/users/97869/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;p&gt;Для этого нужно указать название у источника.&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/42833/</id>
    <title type="text">Здравствуйте. Прошу прощения, я не правильно выразился. Не в правой области, а в левой области нужно...</title>
    <published>2018-02-27T10:58:47Z</published>
    <updated>2018-02-27T10:58:47Z</updated>
    <author>
      <name>Константин</name>
      <uri>https://stocksharp.ru/users/98279/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;p&gt;Здравствуйте. Прошу прощения, я не правильно выразился. Не в правой области, а в левой области нужно вывести ссылки на источники логов. И как их можно сделать вложенными?&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/42831/</id>
    <title type="text">Добрый день Лог выводит только те колонки которые можно выбрать в таблице. </title>
    <published>2018-02-27T09:59:48Z</published>
    <updated>2018-02-27T09:59:48Z</updated>
    <author>
      <name>Support</name>
      <uri>https://stocksharp.ru/users/97869/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;p&gt;Добрый день&lt;/p&gt;
&lt;p&gt;Лог выводит только те колонки которые можно выбрать в таблице.&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/42824/</id>
    <title type="text">Здравствуйте. Лог выводится. Еще нужно что бы в правой области выводились ссылки на источники логов ...</title>
    <published>2018-02-26T20:07:33Z</published>
    <updated>2018-02-26T20:07:33Z</updated>
    <author>
      <name>Константин</name>
      <uri>https://stocksharp.ru/users/98279/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;p&gt;Здравствуйте. Лог выводится. Еще нужно что бы в правой области выводились ссылки на источники логов как на скриншоте выше. И как их можно сделать вложенными?
&lt;a href="https://github.com/Constalgo/LearningSolution/tree/master/WpfApp2" target="_blank"&gt;Код на GitHub&lt;/a&gt;&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/42768/</id>
    <title type="text">Добрый день Вам необходимо добавлять графические слушатели через специальных класс: _logManager.List...</title>
    <published>2018-02-21T16:39:10Z</published>
    <updated>2018-02-21T16:39:10Z</updated>
    <author>
      <name>Support</name>
      <uri>https://stocksharp.ru/users/97869/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;p&gt;Добрый день&lt;/p&gt;
&lt;p&gt;Вам необходимо добавлять графические слушатели через специальных класс:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;_logManager.Listeners.Add(new GuiLogListener(MonitorWindow));
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;И для каждого источника установить имя.&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/42723/</id>
    <title type="text">Код главного окна /// /// Логика взаимодействия для MainWindow.xaml /// public partial class MainWin...</title>
    <published>2018-02-16T21:27:17Z</published>
    <updated>2018-02-16T21:28:44Z</updated>
    <author>
      <name>Константин</name>
      <uri>https://stocksharp.ru/users/98279/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;p&gt;Код главного окна&lt;/p&gt;
&lt;div class="spoiler"&gt;
&lt;pre&gt;&lt;code&gt;    /// &amp;lt;summary&amp;gt;
    /// Логика взаимодействия для MainWindow.xaml
    /// &amp;lt;/summary&amp;gt;
    public partial class MainWindow : Window, ILogSource
    {
        public TestSourceWindow TestSourceWindow;
        private readonly LogManager _logManager = new LogManager();
        public Guid Id { get; }
        public ILogSource Parent { get; set; }
        public LogLevels LogLevel { get; set; }
        public DateTimeOffset CurrentTime =&amp;gt; DateTimeOffset.Now;
        public bool IsRoot { get; }
        public MonitorWindow MonitorWindow { get; private set; }

        public event Action&amp;lt;LogMessage&amp;gt; Log;

        public MainWindow()
        {
            InitializeComponent();
            this.LogLevel = LogLevels.Verbose;
            _logManager = new LogManager();
            _logManager.Sources.Add(this);

            TestSourceWindow = new TestSourceWindow();
            TestSourceWindow.Parent = this;
            TestSourceWindow.LogLevel = LogLevel;
            _logManager.Sources.Add(TestSourceWindow);

            MonitorWindow = new MonitorWindow();
            _logManager.Listeners.Add(MonitorWindow);
            MonitorWindow.Show();

            Loaded += MainWindow_Loaded;
        }

        /// &amp;lt;summary&amp;gt;
        /// Выводим 10 сообщений главного окна
        /// &amp;lt;/summary&amp;gt;
        /// &amp;lt;param name=&amp;quot;sender&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;
        /// &amp;lt;param name=&amp;quot;e&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;
        private void MainWindow_Loaded(object sender, RoutedEventArgs e)
        {
            for (var i = 0; i &amp;lt; 10; i++)
            {
                var level = RandomGen.GetEnum&amp;lt;LogLevels&amp;gt;();

                switch (level)
                {
                    case LogLevels.Verbose:
                    case LogLevels.Inherit:
                    case LogLevels.Debug:
                    case LogLevels.Info:
                    case LogLevels.Off:
                        Log?.Invoke(new LogMessage(this, CurrentTime, LogLevel, $&amp;quot;Сообщение главного окна {level}&amp;quot;));
                        break;
                    case LogLevels.Warning:
                        Log?.Invoke(new LogMessage(this, CurrentTime, LogLevel, $&amp;quot;Сообщение главного окна {level}&amp;quot;));
                        break;
                    case LogLevels.Error:
                        Log?.Invoke(new LogMessage(this, CurrentTime, LogLevel, $&amp;quot;Сообщение главного окна {level}&amp;quot;));
                        break;
                    default:
                        throw new ArgumentOutOfRangeException();
                }

            }
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            TestSourceWindow.Show();
        }

        public void Dispose()
        {
            throw new NotImplementedException();
        }

    }

&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Код дочернего окна:&lt;/p&gt;
&lt;div class="spoiler"&gt;
&lt;pre&gt;&lt;code&gt;    /// &amp;lt;summary&amp;gt;
    /// Логика взаимодействия для TestSourceWindow.xaml
    /// &amp;lt;/summary&amp;gt;
    public partial class TestSourceWindow : Window, ILogSource
    {
        public Guid Id { get; }
        public LogLevels LogLevel { get; set; }
        public DateTimeOffset CurrentTime =&amp;gt; DateTimeOffset.Now;
        public bool IsRoot { get; }
        public ILogSource Parent { get; set; }
        public event Action&amp;lt;LogMessage&amp;gt; Log;

        public TestSourceWindow()
        {
            InitializeComponent();
            Loaded += TestSourceWindow_Loaded;
        }

        /// &amp;lt;summary&amp;gt;
        /// Выводим 10 сообщений дочернего окна
        /// &amp;lt;/summary&amp;gt;
        /// &amp;lt;param name=&amp;quot;sender&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;
        /// &amp;lt;param name=&amp;quot;e&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;
        private void TestSourceWindow_Loaded(object sender, RoutedEventArgs e)
        {
            for (var i = 0; i &amp;lt; 10; i++)
            {
                var level = RandomGen.GetEnum&amp;lt;LogLevels&amp;gt;();

                switch (level)
                {
                    case LogLevels.Verbose:
                    case LogLevels.Inherit:
                    case LogLevels.Debug:
                    case LogLevels.Info:
                    case LogLevels.Off:
                        Log?.Invoke(new LogMessage(this, CurrentTime, LogLevel, $&amp;quot;Сообщение дочернего окна {level}&amp;quot;));
                        break;
                    case LogLevels.Warning:
                        Log?.Invoke(new LogMessage(this, CurrentTime, LogLevel, $&amp;quot;Сообщение дочернего окна {level}&amp;quot;));
                        break;
                    case LogLevels.Error:
                        Log?.Invoke(new LogMessage(this, CurrentTime, LogLevel, $&amp;quot;Сообщение дочернего окна {level}&amp;quot;));
                        break;
                    default:
                        throw new ArgumentOutOfRangeException();
                }

            }
        }

        public void Dispose()
        {
            throw new NotImplementedException();
        }
    }
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Во вложении проект&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/42704/</id>
    <title type="text">Добрый день. Пример легирование https://github.com/StockSharp/StockSharp/tree/master/Samples/Common/...</title>
    <published>2018-02-15T10:18:25Z</published>
    <updated>2018-02-15T10:18:25Z</updated>
    <author>
      <name>Support</name>
      <uri>https://stocksharp.ru/users/97869/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;p&gt;Добрый день.&lt;/p&gt;
&lt;p&gt;Пример легирование &lt;a href="https://github.com/StockSharp/StockSharp/tree/master/Samples/Common/SampleLogging" target="_blank"&gt;https://github.com/StockSharp/StockSharp/tree/master/Samples/Common/SampleLogging&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Пришлите ваш код для анализа.&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/42687/</id>
    <title type="text">Добрый день! Пытаюсь разобраться с логированием. А точнее как сделать что бы в окне MonitorWindow вы...</title>
    <published>2018-02-14T12:28:32Z</published>
    <updated>2018-02-14T12:28:32Z</updated>
    <author>
      <name>Константин</name>
      <uri>https://stocksharp.ru/users/98279/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;p&gt;Добрый день! Пытаюсь разобраться с логированием. А точнее как сделать что бы в окне MonitorWindow выводились дочерние объекты ILogSource? Что бы можно было просматривать их логи отдельно.
&lt;img src="https://pp.userapi.com/c840230/v840230737/74989/JPkKx0plqb0.jpg" alt="" /&gt;
В конструкторе главного окна делаю следующее:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;        public MainWindow()
        {
            InitializeComponent();
            LogLevel = LogLevels.Verbose;
            LogManager = new LogManager();
            LogManager.Sources.Add(this);
            TestLogSourceWindow = new TestLogSourceWindow();
            TestLogSourceWindow.Parent = this;
            TestLogSourceWindow.LogLevel = LogLevel;
            LogManager.Sources.Add(TestLogSourceWindow);
            MonitorWindow = new MonitorWindow();
            LogManager.Listeners.Add(MonitorWindow);
        }

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;В дочернем окне TestLogSourceWindow вызываю событие Log:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Log?.Invoke(new LogMessage(this, CurrentTime, LogLevels.Info, &amp;quot;Сообщение дочернего окна&amp;quot;));
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Но на событие нет подписки. Разве при добавлении ILogSource в LogManager он не подписывается на событие Log? Свойство ILogSource.Parent устанавливает родителя дочернему объекту?
Помогите реализовать такую задачу. Примеров по логированию нет.&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
</feed>