2016-04-22 6 views
2

デフォルトのNLog設定には、FileConsoleの2つのターゲットがあります。コンソールを読みやすくするために、次の行に折り返す前にコンソールに表示される行の最大長を定義します。NLogで行の長さを制限するにはどうすればよいですか?

今、別のlayouts for NLogでかなり見たことがありますが、fixed-lengthオプションを使用してpad wrapperしか見つかりませんでした。しかし、これはラップするのではなく、行を切り捨てます。

私が考えることができる唯一の方法は、正規表現と${newline}レイアウトの導入です。

他のアイデアはありますか?

答えて

3

あなたはの線に沿って、独自のラッパーを書くことができます:

[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この1に基づいて

https://github.com/NLog/NLog/blob/master/src/NLog/LayoutRenderers/Wrappers/ReplaceNewLinesLayoutRendererWrapper.cs

そして、この回答:https://stackoverflow.com/a/8944374/971

+0

私はあなたが繰り返し線の長さをチェックしたと思いますか? (例:行は170文字です) – Julian

+0

@ジュリアン確かに更新された回答 – mathieu

+0

ニース!私はこれがNLogのlib自体にいいと思う。 (しかし、いくつかのテスト/ドキュメントが必要です。) – Julian

関連する問題