[英]How can I limit the length of a line in NLog?
我们的默认 NLog 配置中有 2 个目标: File
和Console
。 为了使控制台保持可读性,我们希望在换行到下一行之前定义控制台中显示的行的最大长度。
现在我已经看了很多NLog的不同布局,但只能找到带有fixed-length
选项的垫包装器。 但这会截断该行而不是包装它。
我能想到的唯一方法是通过正则表达式和${newline}
布局的引入。
还有其他想法吗?
您可以按照以下方式编写自己的包装器:
[LayoutRenderer("wrap-line")]
[AmbientProperty("WrapLine")]
[ThreadAgnostic]
public sealed class WrapLineRendererWrapper : WrapperLayoutRendererBase
{
public WrapLineRendererWrapper ()
{
Position = 80;
}
[DefaultValue(80)]
public int Position { get; set; }
protected override string Transform(string text)
{
return string.Join(Environment.NewLine, MakeChunks(text, Position));
}
private static IEnumerable<string> MakeChunks(string str, int chunkLength)
{
if (String.IsNullOrEmpty(str)) throw new ArgumentException();
if (chunkLength < 1) throw new ArgumentException();
for (int i = 0; i < str.Length; i += chunkLength)
{
if (chunkLength + i > str.Length)
chunkLength = str.Length - i;
yield return str.Substring(i, chunkLength);
}
}
}
如何使用它: https : //github.com/NLog/NLog/wiki/Extending%20NLog#how-to-write-a-custom-layout-renderer
基于这个: https : //github.com/NLog/NLog/blob/master/src/NLog/LayoutRenderers/Wrappers/ReplaceNewLinesLayoutRendererWrapper.cs
而这个答案: https : //stackoverflow.com/a/8944374/971
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.