Заменить символы cyrili c в выводе Nlog - PullRequest
1 голос
/ 06 мая 2020

Запуск asp. net основного приложения с использованием пустельги на машине Linux. S SH Вывод в консоль выглядит странно, если строка содержит символы Cyrilli c. Есть ли способ настроить nlog для замены символов Cyrilli c на транслит ? Пример неправильного вывода

 06.05.2020 09:57:11.650||TRACE||<<Session:831259AB-493A-4215-89BB-81FF8802C714||Node:[[7_11 ▒вод индек▒а ▒ег▒л▒▒ной до▒▒авки]]||Phone:  >>

Цель Nlog:

<target name="Console" xsi:type="ColoredConsole" useDefaultRowHighlightingRules="false" layout="============================================================================================${newline} ${date:format=dd.MM.yyyy HH\:mm\:ss.fff}||${pad:padding=5:inner=${level:uppercase=true}}||&lt;&lt;Session:${pad:padding=36:inner=${event-properties:item=sessionId:uppercase=true}}||Node:[[${event-properties:item=nodename}]]||Phone:${pad:padding=13:inner=${event-properties:item=number:uppercase=true}}>>${newline} ${message}" > 

Если есть способ правильно отображать символ Cyrilli c без внесения изменений в конфигурацию Linux, это приведет к быть приемлемым.

enter image description here

1 Ответ

1 голос
/ 06 мая 2020

Это не поддерживается "из коробки", так как транслитерация также не поддерживается "из коробки". NET.

Но, к счастью, вы можете добавить это без особых хлопот.

Я использую пакет NuGet NickBuhro.Translit

Install-Package NickBuhro.Translit

И добавьте этот макет оболочка рендерера

using System;
using NLog.Config;
using NLog.LayoutRenderers;
using NLog.LayoutRenderers.Wrappers;
using NickBuhro.Translit;

namespace MyExample
{
    /// <summary>
    /// Translit to latin. Usage: ${translit:${message}} or ${message:translit=true}
    /// </summary>
    [LayoutRenderer("translit")]
    [AmbientProperty("translit")]
    [ThreadAgnostic]
    [ThreadSafe]
    public class TranslitLayoutRendererWrapper : WrapperLayoutRendererBase
    {
        protected override string Transform(string text)
        {
            var latin = Transliteration.CyrillicToLatin(text, Language.Russian);
            return latin;
        }
    }
}

и зарегистрируйтесь как можно скорее, например, в main () перед запуском NLog (помните о полях stati c)

NLog.LogManager.Setup().SetupExtensions(s =>
    s.RegisterLayoutRenderer<TranslitLayoutRendererWrapper>("translit")
);  

И теперь вы можете используйте ${translit:${message}} или ${message:translit=true}

...