Как реализовать следующий метод?Как визуализировать шаблон и его аргументы вручную в Serilog?
string BuildSerilogMessage(string messageTemplate, params object[] propertyValues);
Аргументов такие же, как те, приняты ILogger.Debug
т.д.
Причина, почему я хочу, это потому, что я хочу сохранить шаблон/значение в промежуточном исключении, которое необходимо иметь один строковое сообщение также. Это в основном что-то вроде этого:
// this exception is designed to be easily loggable by serilog
[Serializable]
public class StructuredException : Exception {
public string MessageTemplate { get; private set; }
public object[] PropertyValues { get; private set; }
public StructuredException(string messageTemplate, params object[] propertyValues)
: base(BuildMessage(messageTemplate, propertyValues))
{
MessageTemplate = messageTemplate;
PropertyValues = propertyValues;
}
public StructuredException(Exception inner, string messageTemplate, params object[] propertyValues)
: base(BuildMessage(messageTemplate, propertyValues), inner)
{
MessageTemplate = messageTemplate;
PropertyValues = propertyValues;
}
private static string BuildMessage(string messageTemplate, object[] propertyValues) {
// ???
}
}
Я использовал фрагмент выше, но мне пришлось добавить вызов '.Distinct()' после '.OfType()', чтобы дедуксировать маркеры, которые могут появляться более одного раза в шаблоне. –
jpierson