替换Nlog输出中的西里尔符号。

问题描述 投票:1回答:1

在Linux机器上使用kestrel运行asp.net core应用程序。如果一行包含西里尔语符号,SSH控制台的输出看起来很奇怪。有什么方法可以配置nlog,将西里尔语符号替换为西里尔语符号?译文糟糕的输出示例

 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}" > 

如果有办法在不改变Linux配置的情况下正确显示西里尔符号,那将是可以接受的。

enter image description here

asp.net-core logging nlog transliteration kestrel
1个回答
1
投票

这不是开箱即用的,因为.NET中也不支持翻译。

但幸运的是,你可以不费吹灰之力地添加这个功能。

我使用的是NuGet包 NickBuhro.Translit

安装包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;
        }
    }
}

并尽快注册,例如在NLog启动前在main()中注册(注意静态字段)。

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

现在你可以用 ${translit:${message}}${message:translit=true}

© www.soinside.com 2019 - 2024. All rights reserved.