Как делает Систему. TraceListener предварительно ожидают сообщение с именем процесса?

Я смотрел на использование Системы. Диагностика. Трассировка для того, чтобы сделать вход является очень простым приложением. Обычно это делает все, что мне нужен он, чтобы сделать. Оборотная сторона - это, если я звоню

Trace.TraceInformation("Some info");

Вывод является "информацией о SomeApp.Exe: 0: Некоторая информация". Initally это развлекало меня, но больше. Я хотел бы просто произвести "Некоторую информацию" к консоли. Таким образом, я думал, пишущий, что cusom TraceListener, вместо того, чтобы использовать встроенный ConsoleTraceListener, решит проблему. Я вижу определенный формат, что я хочу весь текст после второго двоеточия. Вот моя попытка видеть, работало ли это.

class LogTraceListener : TraceListener
{
    public override void Write(string message)
    {
        int firstColon = message.IndexOf(":");
        int secondColon = message.IndexOf(":", firstColon + 1);

        Console.Write(message);
    }

    public override void WriteLine(string message)
    {
        int firstColon = message.IndexOf(":");
        int secondColon = message.IndexOf(":", firstColon + 1);

        Console.WriteLine(message);
    }
}

Если я произвел значение firstColon, это всегда-1. Если я поместил точку останова, сообщение является всегда просто "Некоторой информацией". Куда все другие информация прибывает из?

Таким образом, я взглянул на стек вызовов в точке незадолго до Консоли. WriteLine назвали. Метод, который названный моим методом WriteLine: System.dll! Система. Диагностика. TraceListener. TraceEvent (Система. Диагностика. TraceEventCache eventCache, строковый источник, Система. Диагностика. TraceEventType eventType, международный идентификатор, представляет сообщение в виде строки), + 0x33 байта

Когда я использую Отражатель для рассмотрения этого сообщения, все это кажется довольно прямым. Я не вижу кода, который изменяет значение строки после того, как я отправил его в Консоль. WriteLine. Единственный метод, который мог возможно изменить базовое строковое значение, является вызовом к UnsafeNativeMethods. EventWriteString, который имеет параметр, который является указателем на сообщение.

Делает любой понимает то, что продолжается здесь и могу ли я изменить вывод, чтобы быть просто моим сообщением с дополнительным пухом. Это походит на злое волшебство, что я могу передать строку "Некоторая информация" Консоли. WriteLine (или любой другой метод в этом отношении) и строка, которые производят, отличается.

Править: Я нашел волшебство. Очевидно, это не было волшебно. Метод записи получает вызов от вызова до WriteHeader перед вызовом к WriteLine, который является, где я думал, что волшебство происходило.

7
задан btlog 20 May 2010 в 21:02
поделиться

2 ответа

Вы можете получить это, переопределив метод TraceEvent () в вашем слушателе. Примерно так:

    public override void TraceEvent(TraceEventCache eventCache, string source, TraceEventType eventType, int id, string message) {
        Console.WriteLine("{0}: {1}", id, message);
    }
5
ответ дан 7 December 2019 в 09:57
поделиться

Почему бы не использовать Trace.WriteLine ("SomeInfo") вместо Trace.TraceInformation ("SomeInfo") ?

0
ответ дан 7 December 2019 в 09:57
поделиться
Другие вопросы по тегам:

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