Как настроить log4net таким образом, чтобы свойства объекта можно было сопоставить с выходом журнала? - PullRequest
4 голосов
/ 25 июня 2009

Я пытаюсь предоставить средство для регистрации ошибок, возникающих в нашем клиенте Flex, предоставляя веб-службу SOAP, которая в качестве одного параметра принимает объект LogMessage.

public class LogMessage
{
    public string Message { get; set; }
    public string Exception { get; set; }
    public string Version { get; set; }
    public string User { get; set; }
}

Этот объект заполняется клиентом Flex в случае возникновения ошибки на стороне клиента, и вызывается метод LogClientError, который регистрирует ошибку через log4net.

[WebMethod()]
public void LogClientError(LogMessage message) 
{
    rollingLogger.Error(message);
}

В настоящее время это печатает полное имя класса LogMessage, поэтому мое текущее предположение заключается в том, что log4net просто вызывает .ToString () для объекта, который передается.

Однако, что я действительно хочу сделать, это сопоставить каждое свойство в классе LogMessage с шаблоном, чтобы log4net правильно выписывал нужную информацию. Я хотел бы сделать это таким образом, чтобы все типичные приложения (DB, File, SMTP) все еще поддерживались.

Как настроить log4net таким образом, чтобы свойства объекта можно было сопоставить с выходом журнала?

Ответы [ 2 ]

3 голосов
/ 26 июня 2009

log4net имеет два пути, которые вы можете выбрать. Первым было бы создать настраиваемое средство визуализации объектов для экземпляров LogMessage. Вам необходимо реализовать интерфейс IObjectRenderer и зарегистрировать реализацию .

Другой путь, который можно было бы использовать повторно, заключается в создании подкласса класса patternlayout. Ваш пользовательский макет шаблона может затем поддерживать специальный синтаксис для именования свойств, который макет может использовать для отражения в объекте входящего сообщения.

0 голосов
/ 26 июня 2009

Если LogMessage является частичным, вы можете создать метод ToString () в LogMessage.

...