Мне нужен гибкий способ регистрировать пары значений ключей с помощью System.Diagnostics.Trace.
По сути, когда мне нужно что-то записать в код, я хотел бы сделать вызов метода, который передает сообщение исловарь значений.Очевидно, это не сложно, но я хочу, чтобы он был чистым и, если это возможно, приводил в исполнение имена ключей, которые разрешены.Это потому, что я хочу иметь возможность позже проанализировать значения пары ключей и создать средство просмотра журнала, которое позволит вам искать и сортировать по аргументам, которые были записаны в журнал.
Один из способов, с которыми я экспериментировал, заключался в использовании нового.Net 4 необязательные параметры метода.
public static void LogInformation(string message, int? someID = null, string someValue = null, int? anotherID = null, int? andAnotherID = null)
Затем я мог бы назвать это следующим образом:
Logger.LogInformation("themessage", someID:5, andAnotherID:2);
Этот метод затем проверял бы каждый параметр, и ЕСЛИ он имел значение, ТОГДА он добавил быэто во встроенный словарь с использованием согласованных имен ключей.Затем я бы сериализовал словарь в JSON и передал его методу Trace.LogInformation в качестве сообщения.Но это кажется слишком сложным для поддержания.Мне пришлось бы продолжать добавлять новые строки в этот метод, так как наша кодовая база росла, и нужно было записывать новые значения.
Я также пытался отказаться от идеи блокировки имен ключей и просто пытатьсянайти простой способ передачи значений пар ключей в метод журнала без необходимости:
LogInformation("themessage", new Dictionary<string,string>(){{"someID","1"},{"andAnotherID","2"}});
Я попытался перейти по маршруту анонимного и динамического типа, чтобы разработчик мог вызвать метод следующим образом:
LogInformation("themessage", new { someID = 1, andAnotherID = 2 });
Но вы не можете использовать стандартные библиотеки сериализации, чтобы превратить этот анонимный или динамический объект в JSON.
Есть ли другие варианты или идеи, которые мне следует изучить?Очевидно, мне нужно учитывать производительность, так как этот метод будет вызываться повсюду.