Как получить красиво отформатированные журналы файлов с помощью Serilog outputTemplate (фиксированная ширина и усечение SourceContext) - PullRequest
2 голосов
/ 31 марта 2020

Я переключаюсь с журнала 4net на Serilog, но мне не хватает некоторых возможностей форматирования, которые у меня были в журнале 4net. Я не нахожу никакой документации о том, какие форматеры я могу использовать в outputTemplate. Есть ли способ выполнить sh то, что я опишу ниже?

Используя outputTemplate

"outputTemplate": "[{Timestamp:yyyy-MM-dd HH:mm:ss.fff} {Level:u3}] ({SourceContext}) {Message:lj}{NewLine}{Exception}"

Это выглядит так

[2020-03-30 11:31:06.464 DBG] (DomainLogic.TCMessageHandler) >>>Poll
[2020-03-30 11:31:06.481 DBG] (AmqpReader.Reader)    >>>Read
[2020-03-30 11:31:06.485 INF] (AmqpReader.Reader)       Fetched a message from the queue.
[2020-03-30 11:31:06.487 DBG] (AmqpReader.Reader)    <<<Read - 00:00:00.0066941
[2020-03-30 11:31:06.504 DBG] (DomainLogic.TCMessageHandler) <<<Poll - 00:00:00.0399191

Это то, что я хочу

[2020-03-30 11:31:06.464 DBG] (DomainLogic.TCMessageHandler) >>>Poll
[2020-03-30 11:31:06.481 DBG] (AmqpReader.Reader           )    >>>Read
[2020-03-30 11:31:06.485 INF] (AmqpReader.Reader           )       Fetched a message from the queue.
[2020-03-30 11:31:06.487 DBG] (AmqpReader.Reader           )    <<<Read - 00:00:00.0066941
[2020-03-30 11:31:06.504 DBG] (DomainLogic.TCMessageHandler) <<<Poll - 00:00:00.0399191

И если я установлю фиксированную ширину, а SourceContext будет длиннее, я бы хотел, чтобы он обрезался слева. Как это

[2020-03-30 11:31:06.464 DBG] (ogic.TCMessageHandler) >>>Poll
[2020-03-30 11:31:06.481 DBG] (AmqpReader.Reader    )    >>>Read
[2020-03-30 11:31:06.485 INF] (AmqpReader.Reader    )       Fetched a message from the queue.
[2020-03-30 11:31:06.487 DBG] (AmqpReader.Reader    )    <<<Read - 00:00:00.0066941
[2020-03-30 11:31:06.504 DBG] (ogic.TCMessageHandler) <<<Poll - 00:00:00.0399191

1 Ответ

2 голосов
/ 01 апреля 2020

Шаблоны вывода Serilog (и шаблоны сообщений) основаны на строках формата. NET, и они не поддерживают усечение замещенных значений. Нет никакого способа сделать это непосредственно в шаблоне вывода, хотя вы могли бы написать ILogEventEnricher, который заменяет свойство на его усеченную версию, в зависимости от того, как еще вы планируете использовать события.

...