2017-05-28 9 views
8

मैं .NET कोर कंसोल एप्लिकेशन में कंसोल (Microsoft.Extensions.Logging.Console) में लॉग इन करने के लिए अंतर्निहित लॉगिंग प्रदाता का उपयोग कर रहा हूं।क्या .NET कोर लॉगिंग में आउटपुट प्रारूप को प्रारूपित करने का कोई तरीका है?

प्रत्येक लॉगिंग प्रविष्टि आउटपुट में दो पंक्तियां उत्पन्न करती है। मैं प्रत्येक प्रविष्टि को एक पंक्ति में रखना चाहता हूं। क्या आउटपुट प्रारूप को अनुकूलित करने का कोई तरीका है?

यहाँ एक उदाहरण है कि कैसे मैं इसे का उपयोग करें:

static void Main(string[] args) 
{ 
    var serviceProvider = new ServiceCollection() 
     .AddLogging() // This adds the Microsoft logging. 
     .AddSingleton<IProjectGeneratorService, CSharpProjectGeneratorService>() 
     .BuildServiceProvider(); 

    // Configure the console logging. 
    serviceProvider 
     .GetService<ILoggerFactory>() 
     .AddConsole(LogLevel.Debug); 

    // Write a logging entry 
    var logger = serviceProvider.GetService<ILoggerFactory>().CreateLogger<Program>(); 
    logger.LogDebug("Application started..."); 
} 

क्या मैं मिलता है:

dbug: Generator.Program[0]: Application started... 

:

dbug: Generator.Program[0] 
     Application started... 

मैं करना चाहते हैं क्या कुछ इस तरह है कोई उपाय? मुझे पता है, मैं एक कस्टम लॉगर लिख सकता हूं, लेकिन मैं जानना चाहता हूं कि कोई दूसरा तरीका है या नहीं।

धन्यवाद।

+0

अंत में मैं माइक्रोसॉफ्ट लकड़हारा सुधार हुआ है और प्रकाशित यह https://github.com/ilya-chumakov/LoggingAdvanced। उस पैकेज का उपयोग करके, संदेश भागों के बीच एक लाइन ब्रेक को निकालना संभव है। इसके अलावा, मैंने एक और हत्यारा-सुविधा जोड़ा - एक टाइमस्टैम्प! –

उत्तर

4

फिलहाल, यह कॉन्फ़िगर करने योग्य नहीं है। स्रोत कोड is here on GitHub:

logBuilder.Append(logName); 
logBuilder.Append("["); 
logBuilder.Append(eventId); 
logBuilder.AppendLine("]"); 

आप चाहते हैं कि, आप अपने खुद लकड़हारा लिखने के लिए की जरूरत है। हालांकि आप केवल कंसोल लॉगर के स्रोत कोड की प्रतिलिपि बना सकते हैं, आवश्यकतानुसार संशोधित कर सकते हैं और नामस्थान बदल सकते हैं, इसलिए यह माइक्रोसॉफ्ट जहाजों के संस्करण में हस्तक्षेप नहीं करता है।

आप इस विकल्प के लिए पूछने के लिए issue on the logging repo भी खोल सकते हैं।

+0

ठीक है, मैंने सोचा कि यह एकमात्र तरीका होगा। लिंक और कोड स्निपेट के लिए धन्यवाद। यह मुझे अपने आप से खोजने में समय बचाता है :-) – BooFar

2

@MartinUllrich पहले से ही इस लाइन ब्रेक को अक्षम नहीं किया जा सकता है और इसे टालने के लिए आपको एक कस्टम लॉगर लागू करना होगा।

पंजीकरण:

loggerFactory.AddProvider(new CustomLoggerProvider()); 

कार्यान्वयन (मूल ConsoleLogger स्रोत कोड के उपयोग करने के साथ बढ़ाया जा सकता है -, आप GetLogLevelConsoleColors विधि जोड़ सकता है उदाहरण के लिए):

public class CustomLoggerProvider : ILoggerProvider 
{ 
    public void Dispose() { } 

    public ILogger CreateLogger(string categoryName) 
    { 
     return new CustomConsoleLogger(categoryName); 
    } 

    public class CustomConsoleLogger : ILogger 
    { 
     private readonly string _categoryName; 

     public CustomConsoleLogger(string categoryName) 
     { 
      _categoryName = categoryName; 
     } 

     public void Log<TState>(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func<TState, Exception, string> formatter) 
     { 
      if (!IsEnabled(logLevel)) 
      { 
       return; 
      } 

      Console.WriteLine($"{logLevel}: {_categoryName}[{eventId.Id}]: {formatter(state, exception)}"); 
     } 

     public bool IsEnabled(LogLevel logLevel) 
     { 
      return true; 
     } 

     public IDisposable BeginScope<TState>(TState state) 
     { 
      return null; 
     } 
    } 
} 
+0

हे इलिया, उदाहरण के लिए बहुत बहुत धन्यवाद। – BooFar

संबंधित मुद्दे

 संबंधित मुद्दे