2016-04-22 3 views
2

У нас есть 2 цели в нашей конфигурации по умолчанию NLog: File и Console. Чтобы консоль оставалась читаемой, мы хотели бы определить максимальную длину строки, показанной в Консоли, перед ее переносом на следующую строку.Как ограничить длину строки в NLog?

Теперь я немного поразмыслил в разных layouts for NLog, но мог найти только pad wrapper с опцией fixed-length. Но это обрезает линию, а не обертывает ее.

Единственный способ, о котором я могу думать, - через регулярное выражение и введение макета ${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

Основываясь на этом одном: 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

Смежные вопросы