Я сделал удар и нашел решение:
- Мой новый рендерер наследуется от NLog.LayoutRenderers.FileContentsLayoutRenderer
Затем в методе Append () у меня есть этот код (который очень похож на код в методе AppendCon) FileContentsLayoutRenderer:
lock (this)
{
var fileName = FileName.GetFormattedMessage(logEvent);
if (fileName != m_LastFileName)
{
ReadFileContents(fileName);
}
var layoutString = new Layout(_fileContents);
m_RenderedContent = layoutString.GetFormattedMessage(logEvent);
m_LastFileName = fileName;
}
builder.Append(m_RenderedContent);
Самая большая проблема заключается в том, что до тех пор, пока домен приложения не перезапустится, этот файл останется в памяти и никогда не будет перечитан с диска. Поэтому внесение изменений изначально не влияет на вывод.
Я добавил некоторый отладочный код для обработки этого, но мне нужно добавить более надежный код для распознавания изменений в производственной среде.