2009-11-10 8 views
12

Oto konfiguracja mojego appendera z mojego app.config. To po prostu wypisuje ciąg literowy zamiast przekształcić go na datę (tzn. Dosłownie wypisuje "[START:% date {MM/dd/yy HH: mm}]").Jak użyć wzorca daty w nagłówku/stopce?

<appender name="RollingLogFileAppender" 
      type="log4net.Appender.RollingFileAppender"> 
    <file value="C:\somelog" /> 
    <appendToFile value="true" /> 
    <rollingStyle value="Date" /> 
    <datePattern value="-yyyy-MM-dd'.txt'" /> 
    <layout type="log4net.Layout.PatternLayout"> 
    <header value="[START: %date{MM/dd/yy HH:mm} ]&#13;&#10;" /> 
    <conversionPattern value="%date{yyyy-MM-dd HH:mm:ss} - %message" /> 
    <footer value="[END]&#13;&#10;&#13;&#10;" /> 
    </layout> 
</appender> 

Jak mogę to uzyskać, aby wydrukować datę/godzinę w nagłówku?

Odpowiedz

14

Łatwym sposobem wykonania tej czynności jest podklasa log4net.Layout.PatternLayout i zastąpienie nagłówka i stopki. Następnie można dodać cokolwiek chcesz nagłówku: datownik, nazwę komputera, nazwę użytkownika, wersję montażową, czy cokolwiek dusza zapragnie:

using System; 
using log4net.Layout; 

namespace MyAssembly 
{ 
    class MyPatternLayout : PatternLayout 
    { 
     public override string Header 
     { 
      get 
      { 
       var dateString = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); 
       return string.Format("[START: {0} ]\r\n", dateString); 
      } 
     } 
    } 
} 

Uwzględnij tę nową klasę w swoim zespole i użyć nowego typu w Twój plik, taki jak ten:

<layout type="MyAssembly.MyPatternLayout"> 
    <conversionPattern value="%date{yyyy-MM-dd HH:mm:ss} - %message" /> 
</layout> 

Ponieważ przejąłeś nagłówek i stopkę, nie musisz nawet dodawać go tutaj. Nagłówek zostanie dodany przy każdym uruchomieniu aplikacji i za każdym razem, gdy plik zostanie przewinięty.

+0

Czy macie jakieś linki do przykładów instacji klasy PatternLayout? – User

+0

Dodałem przykład do odpowiedzi dla ciebie. – pduncan

+0

Czy istnieje sposób na przesłonięcie nagłówka tak, aby używał atrybutu wartości elementu nagłówka w konfiguracji xml, jak ma to miejsce w klasie PatternLayout? – User

1

Wystąpił ten problem i szybkie rozwiązanie, którego używałem, to użycie stałego nagłówka i stopki. Wtedy to zrobić jak najszybciej mieć obiekt Ilog:

log.Info(string.Format("[START: {0} ]\r\n", dateString))

Więc tuż pod nagłówkiem dostaniesz informacje pragnienie.

Np

===Start=== 
[START: 2012-02-23 12:12:12 ] 

logs... 
17

Odpowiedź here.

<header value="[BEGIN LOGGING AT %date]%newline" type="log4net.Util.PatternString" /> 
<footer value="[END LOGGING AT %date]%newline" type="log4net.Util.PatternString" /> 

Działa dla mnie jak urok. Nie trzeba pisać kawałka kodu.

także w projektach zazwyczaj używamy:

<header type="log4net.Util.PatternString" value="Our Application Name version %property{Assembly.Version}, .NET version %property{Runtime.Version}, %date ***%newline"/> 

Spójrz na PatternString doc również.

Zauważyłem również, że plik dziennika nie pojawi się, dopóki nie napiszesz pierwszego wyciągu z dziennika.

+0

Po prostu próbowałem tego i wygląda na to, że te wzorce są rozwiązywane zarówno podczas uruchamiania, co powoduje stopkę z dokładnie tym samym czasem (różnica 2ms), jak w nagłówku. – sluki

+2

@sluki: Użyj '' zamiast 'PatternLayout' – Wizou

0

Budowanie na komentarzu @Wizou's. Zobacz dokumentację DynamicPatternLayout Class.

Jestem rzeczywiście przy tej różnicy w zachowaniu mieć czas rozpoczęcia i zakończenia

jedną istotną różnicą między PatternLayout i DynamicPatternLayout jest leczenie parametrów nagłówka i stopki w konfiguracji. Parametry Header and Footer dla DynamicPatternLayout muszą być składniowe w postaci PatternString, ale nie powinny być oznaczone jako typ log4net.Util.PatternString. Powoduje to statyczną konwersję wzorca w czasie konfiguracji i powoduje, że DynamicPatternLayout działa tak samo jak PatternLayout.

Ustawianie typu na nagłówek PatternString ale pozostawiając stopka jako dynamiczny

<layout type="log4net.Layout.DynamicPatternLayout"> <param name="Header" value="%newline**** Trace Opened Local: %date{yyyy-MM-dd HH:mm:ss.fff} UTC: %utcdate{yyyy-MM-dd HH:mm:ss.fff} ****%newline" type="log4net.Util.PatternString" /> <param name="Footer" value="**** Trace Closed %date{yyyy-MM-dd HH:mm:ss.fff} ****%newline" /> </layout>