#.net #serilog #graylog2 #graylog #graylog3
#.net #serilog #graylog2 #graylog #graylog3
Вопрос:
Я пытаюсь добавить ведение журнала в .net core web api с помощью приемника graylog. Желаемый результат должен быть таким же, как на консоли, использующей formmater, подобный этому:
«[{Временная метка: ЧЧ: мм: сс} {Уровень: u3}] {Идентификатор события} {Сообщение: lj} {Свойства}{Новая строка}{Исключение}{Новая строка}»)
который выдает этот вывод:
[18:10:03 INF] { Id: 2 } Request finished in 876.4304ms 200
text/plain; charset=utf-8 {ElapsedMilliseconds=876.4304,
StatusCode=200, ContentType="text/plain; charset=utf-8",
SourceContext="Microsoft.AspNetCore.Hosting.Internal.WebHost",
RequestId="0HLL72NNJ19OK:00000001", RequestPath="/geo/allmenu",
CorrelationId=null, ConnectionId="0HLL72NNJ19OK"}
Моя конфигурация приемника для graylog :
var graylogConfig = new GraylogSinkConfiguration
{
Host = "10.1.1.100",
Port = 12201,
UseSecureConnection = false,
UseAsyncLogging = true,
GraylogTransportType = GraylogTransportType.Tcp,
RetryCount = 20,
PropertyPrefix = "webapi",
};
К сожалению, я не вижу никаких расширенных данных в приемнике graylog и задаюсь вопросом, как я мог бы предоставить средство форматирования для этого приемника?
Ответ №1:
чтобы преодолеть эту проблему, я решил использовать syslog
приемник в моем asp.net основное приложение, которое позволяет мне прикреплять все расширенные данные журнала.
// Use custom message template formatters, just so we can distinguish which sink wrote each message
var tcpTemplateFormatter = new MessageTemplateTextFormatter("[{Timestamp:HH:mm:ss} {Level:u3}] {EventId} {Message:lj} {Properties}{NewLine}{Exception}{NewLine}{Message}", null);
// Log RFC5424 formatted events to a syslog server
var tcpConfig = new SyslogTcpConfig
{
Host = "10.1.1.100",
Port = 12201,
Formatter = new Rfc5424Formatter(templateFormatter: tcpTemplateFormatter),
Framer = new MessageFramer(FramingType.OCTET_COUNTING),
KeepAlive = true
};