在Linux机器上使用kestrel运行asp.net核心应用程序。如果一行包含西里尔符号,则SSH控制台输出看起来很奇怪。有没有办法将nlog配置为用translit替换西里尔符号?错误输出的示例
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}}||<<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配置的情况下正确显示西里尔符号,那将是可以接受的。

发布于 2020-05-07 01:53:20
这不是开箱即用的支持,因为.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}
https://stackoverflow.com/questions/61629716
复制相似问题