首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >替换Nlog输出中的cyrilic符号

替换Nlog输出中的cyrilic符号
EN

Stack Overflow用户
提问于 2020-05-06 15:34:13
回答 1查看 61关注 0票数 1

在Linux机器上使用kestrel运行asp.net核心应用程序。如果一行包含西里尔符号,则SSH控制台输出看起来很奇怪。有没有办法将nlog配置为用translit替换西里尔符号?错误输出的示例

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

Nlog目标:

代码语言:javascript
复制
<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配置的情况下正确显示西里尔符号,那将是可以接受的。

EN

回答 1

Stack Overflow用户

发布于 2020-05-07 01:53:20

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

但幸运的是,您可以很轻松地添加此代码。

我使用的是NuGet包NickBuhro.Translit

安装-软件包NickBuhro.Translit

并添加此布局渲染器包装器

代码语言:javascript
复制
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()中注册(注意静态字段)

代码语言:javascript
复制
NLog.LogManager.Setup().SetupExtensions(s =>
    s.RegisterLayoutRenderer<TranslitLayoutRendererWrapper>("translit")
);  

现在,您可以使用${translit:${message}}${message:translit=true}

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61629716

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档