簡體   English   中英

如何限制 NLog 中一行的長度?

[英]How can I limit the length of a line in NLog?

我們的默認 NLog 配置中有 2 個目標: FileConsole 為了使控制台保持可讀性,我們希望在換行到下一行之前定義控制台中顯示的行的最大長度。

現在我已經看了很多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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM