Ответ 1
Установите свойство TraceOutputOptions на прослушиватель трассировки. Формат предопределен, но вы можете выбрать дополнительные части данных, определенные в перечислении TraceOptions.
Следующий код:
static void Main(string[] args)
{
TraceSource ts = new TraceSource("MyApplication");
ts.Switch = new SourceSwitch("MySwitch");
ts.Switch.Level = SourceLevels.All;
ts.Listeners.Add(new TextWriterTraceListener(Console.Out));
ts.TraceInformation("Hello World");
Console.ReadKey();
}
генерирует следующий вывод:
Информация о MyApplication: 0: Hello World
Часть "Информация о MyApplication: 0:" в начале вывода трассировки поступает из самого класса TraceSource.
Однако мне нужно иметь временную метку в начале строки, и я также хотел бы изменить "Информация" на "Информация".
Есть ли способ получить больше свободы в выходе трассировки, чтобы я мог настроить его как:
13:03:00 - MyApplication Информация: Hello World
Я пробовал пару часов, но безуспешно. Независимо от того, что я делаю, в начале выходной строки всегда есть постоянная предопределенная информация "Информация о MyApplication: 0: Hello World".
Документация MSDN также не раскрывает никакой полезной информации.
Установите свойство TraceOutputOptions на прослушиватель трассировки. Формат предопределен, но вы можете выбрать дополнительные части данных, определенные в перечислении TraceOptions.
TraceSource.TraceInformation завершает вызов TraceListener.TraceEvent на каждом слушателе, который добавляется в заголовок. К счастью, TraceListener
имеет метод WriteLine, который можно использовать для создания пользовательского вывода.
static void Main(string[] args)
{
TraceSource ts = new TraceSource("MyApplication");
ts.Switch = new SourceSwitch("MySwitch");
ts.Switch.Level = SourceLevels.All;
ts.Listeners.Add(new TextWriterTraceListener(Console.Out));
for (int i = 0; i < ts.Listeners.Count; i++)
{
var listener = ts.Listeners[i];
listener.WriteLine(
string.Format("{0} - {1} Info: {2}",
DateTime.Now.ToString("HH:mm:ss"), ts.Name, "Hello World"));
listener.Flush();
}
Console.ReadKey();
}
Вывод:
13:52:05 - MyApplication Информация: Hello World
Прибытие в конце также, но в случае, если здесь кто-то приземлится...
Мне нравится держать его простым. Я использую один статический метод Trace в моем приложении App.cs, который связан с одним TraceSource, который я создаю при запуске. Это позволяет мне получить доступ к нему во всем приложении и сохранить простой app.config:
public static void Trace(TraceEventType eventType, string message)
{
if (_TraceSource.Switch.ShouldTrace(eventType))
{
string tracemessage = string.Format("{0}\t[{1}]\t{2}", DateTime.Now.ToString("MM/dd/yy HH:mm:ss"), eventType, message);
foreach (TraceListener listener in _TraceSource.Listeners)
{
listener.WriteLine(tracemessage);
listener.Flush();
}
}
}
Мои записи app.config:
<system.diagnostics>
<sources>
<source name="mytracesource" switchValue="All">
<listeners>
<add name="mytracelistener"
type="System.Diagnostics.TextWriterTraceListener"
initializeData="trace.log">
</add>
</listeners>
</source>
</sources>
</system.diagnostics>
Возможно, немного поздно, но если вам нужно простое и универсальное решение, вы должны взглянуть на проект Essentials Diagnostics на CodePlex (также доступен через NuGet).
Он определяет широкий диапазон слушателей (с разрешенным пользовательским форматированием), которые выводятся на консоль, скользящий текст и файлы XML, журналы событий, электронная почта и т.д. и также содержат образцы конфигурации.