Log4net, dosya adında tarih bulunan günlük dosya adı


Yanıtlar:


103

Log4net yapılandırma dosyanızda RollingFileAppender ile aşağıdaki parametreyi kullanın:

<param name="DatePattern" value="dd.MM.yyyy'.log'" />

28
Bunun bir yapılandırma öğesine yükseltildiği anlaşılıyor: <datePattern value = "dd.MM.yyyy'.log '" /> Şerefe!
longda

3
@mstaessen <preserveLogFileNameExtension value="true" />doğru sözdizimi ve bu harika bir cevap. Kayıp nasıl gerçekleşti, sorabilir miyim?
Larry B

1
Doğru hatırlıyorsam, şöyle oldu. Başlangıçta log4net, döngü sırasındaki ilk dosya adını oluşturacaktır. Bu dosyanın zaten var olduğunu algılar ve ardından ikinci dosyaya gitmeye karar verir, ancak o da zaten var olduğunda, geri almaya karar vermez, bunun yerine onu temizler ve ikinci günlük dosyasındaki her şeyin üzerine yazar. Temizlenmiş zaman çerçevesinin günlüklerine ihtiyacınız olana kadar tamamen fark edilmeden geçer ...
mstaessen

207
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
  <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
  <file value="logs\" />
  <datePattern value="dd.MM.yyyy'.log'" />
  <staticLogFileName value="false" />
  <appendToFile value="true" />
  <rollingStyle value="Composite" />
  <maxSizeRollBackups value="10" />
  <maximumFileSize value="5MB" />
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
  </layout>
</appender>

1
@Mun'un yaptığı gibi sorunu çözmek için hangi parametrenin ana noktasını vurgulamanız gerektiğini düşünüyorum. Ancak cevabınıza ben de oy verdim.
RDeveloper

1
Benim için işe yarayan, staticLogFileName öğesiyle (ve dosya öğesinin değer özniteliğine dikkat edin) birlikte
datePattern öğesiydi

Tam cevap!
Nagehan

32

RollingLogFileAppender için şu öğelere ve değerlere de ihtiyacınız vardır:

<rollingStyle value="Date" />
<staticLogFileName value="false" />

3
Bu çalışır, ancak dosya uzantısından sonra tarihi ekler. Örneğin, Error.log20111104 gibi günlük dosyaları alıyorum - Dosya adını biraz daha iyi biçimlendirmenin bir yolunu bilen var mı?
LostNomad311

Dosya adını nasıl daha iyi biçimlendireceğiniz aşağıda açıklanmıştır: stackoverflow.com/questions/615092/…
LostNomad311

staticLogFileName ne için kullanılır? Günlük dosyasının yalnızca gün bittikten sonra yeni bir adla alınmasını istiyorum. Her seferinde belirli bir duruma bakan bir günlük monitörü kullanmak istiyorum.
Paz

22

Log4Net 1.2.13'ü kullanarak dosya adında tarih saatine izin vermek için aşağıdaki yapılandırma ayarlarını kullanırız.

<file type="log4net.Util.PatternString" value="E:/logname-%utcdate{yyyy-MM-dd}.txt" />

Aşağıdaki kuralda dosyalar sağlayacak: logname-2015-04-17.txt

Bununla birlikte, günde 1 günlük tuttuğunuzdan emin olmak için genellikle aşağıdakilere sahip olmak en iyisidir.

<rollingStyle value="Date" />
<datePattern value="yyyyMMdd" />

Dosya boyutu önemliyse, aşağıdakiler yeni bir gün doğana kadar 5MB boyutunda 500 dosyaya izin verir. CountDirection , artık geçerli olmayan dosyaların Artan veya Azalan numaralandırılmasına izin verir.

 <maxSizeRollBackups value="500" />
 <maximumFileSize value="5MB" />
 <rollingStyle value="Composite" />
 <datePattern value="yyyyMMdd" />
 <CountDirection value="1"/>
 <staticLogFileName value="true" />

18

Kullanmaya son verdim ('.log' dosya adını ve 'myfilename_' etrafındaki tek tırnak işaretlerini not edin):

  <rollingStyle value="Date" />
  <datePattern value="'myfilename_'yyyy-MM-dd"/>
  <preserveLogFileNameExtension value="true" />
  <staticLogFileName value="false" />
  <file type="log4net.Util.PatternString" value="c:\\Logs\\.log" />

Bu bana şunu verir:

myfilename_2015-09-22.log
myfilename_2015-09-23.log
.
.

preserveLogFileNameExtensionburada
Dmitry Karpenko

13

Tüm cevapları denedim, ancak her zaman eksik olan ve benden beklendiği gibi çalışmayan bir şeyler vardı.

Sonra her yanıtta verilen ipuçlarını biraz denedim ve aşağıdaki ayarlarda başarılı oldum:

<appender name="RollingActivityLog" type="log4net.Appender.RollingFileAppender">
  <file type="log4net.Util.PatternString" value="C:\temp\LOG4NET_Sample_Activity.log" />
  <appendToFile value="true" />
  <rollingStyle value="Date" />
  <staticLogFileName value="false" />
  <preserveLogFileNameExtension value="true" />
  <datePattern value="-yyyyMMdd" />
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%date %-5level - %message%newline" />
  </layout>
</appender>

Diğer parametre kombinasyonlarıyla ilgili sorun, en son dosyanın zaman modeline sahip olmaması veya her gün .log20171215yeni bir dosya saati (ve yeni bir dosya türü! ) Oluşturan zaman kalıbının eklenmesi veya her iki sorunun ortaya çıkmasıydı.

Şimdi bu ayarla şuna benzer dosyalar alıyorsunuz:

LOG4NET_Sample_Activity-20171215.log

istediğim de buydu.


Özetlemek:

  • Tarih desenini <file value=...özniteliğe koymayın , sadece datePattern.

  • preserveLogFileNameExtension Değer özniteliğinin olarak ayarlandığından emin olun true.

  • staticLogFileName Değerin olarak ayarlandığından emin olun false.

  • rollingStyleÖznitelik değerini olarak ayarlayın Date.


Ayrıca rollingStyle'ı hem tarih hem de boyutta dönen Bileşik olarak ayarlayabilirsiniz.
Simon Tewsi

1
Harika çalışıyor. Ayrıca özete ekleyeceğim: staticLogFileName değerinin false olarak ayarlandığından emin olun
Randall Flagg

5

Dosya uzantısını korumak için:

<log4net>
    <root>
      <level value="DEBUG"/>
      <appender-ref ref="RollingLogFileAppender"/>
    </root>
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
      <file type="log4net.Util.PatternString" value="D:\\LogFolder\\%date{yyyyMM}\\SchT.log" />
      <appendToFile value="true" />
      <rollingStyle value="Date" />
      <maximumFileSize value="30MB" />
      <staticLogFileName value="true" />
      <preserveLogFileNameExtension value="true"/>
      <datePattern value="ddMMyyyy" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
      </layout>
    </appender>
  </log4net>

neden var %date{yyyyMM}ve value="ddMMyyyy" ? geçerlilik tarihi modeli hangisidir?
Allan Harabe

Bence datePattern dosya adı içindir, ancak% date {yyyyMM} ana dizin içindir (bu şekilde istedim)
Fourat

DatePattern özniteliği, Date rollingStyle için kayan dönemi ayarlar. RollingFileAppender altındaki logging.apache.org/log4net/release/config-examples.html adresine bakın . "Örneğin," yyyyMMdd "şeklinde bir tarih kalıbı her gün döner. Kullanılabilir kalıpların bir listesi için System.Globalization.DateTimeFormatInfo'ya bakın."
Ryan Buddicom

@rbuddicom evet ama soru dosya uzantısının nasıl korunacağıyla ilgili.
Fourat

Biliyorum, Allan 'değer = "ddMMyyyy" nin amacını sorguladı. "Sanırım dosya adı için datePattern" yorumunuz bu açıdan yanlış.
Ryan Buddicom

0

Önceki yanıtta bulunan genişletilmiş yapılandırma bölümü

 ...
 ...
 <rollingStyle value="Composite" />
 ...
 ...

listelenmiş işler ama kullanmak zorunda değildim

<staticLogFileName value="false" /> 

. RollingAppender'ın bu ayarı (mantıksal olarak) yok sayması gerektiğini düşünüyorum, çünkü tanım gereği dosya her gün uygulama yeniden başlatıldığında / yeniden kullanıldığında yeniden oluşturulur. Belki de, uygulama HER başladığında anında devreden çıkma için önemli olabilir.


Benim için <staticLogFileName value = "false" /> olmadan çalışmazdı
nurettin

bende de staticLogFileName değerini false olarak ayarlamak zorunda kaldım, aksi takdirde günlüğe
kaydetmezdi

0

Sistem değişkenini kullanarak CI'dan kolay değişiklik yapılmasını sağlamak için yapılandırmayı koda taşıdım. Bu kodu dosya adı için kullandım ve sonuç 'Log_03-23-2020.log'

            log4net.Repository.ILoggerRepository repository = LogManager.GetRepository(Assembly.GetEntryAssembly());
            Hierarchy hierarchy = (Hierarchy)repository;
            PatternLayout patternLayout = new PatternLayout();
            patternLayout.ConversionPattern = "%date %level - %message%newline%exception";
            patternLayout.ActivateOptions();

            RollingFileAppender roller = new RollingFileAppender();
            roller.AppendToFile = true;
            roller.File = "Log_";
            roller.DatePattern = "MM-dd-yyyy'.log'";
            roller.Layout = patternLayout;
            roller.MaxFileSize = 1024*1024*10;
            roller.MaxSizeRollBackups = 10;
            roller.StaticLogFileName = false;
            roller.RollingStyle = RollingFileAppender.RollingMode.Composite;
            roller.ActivateOptions();
            hierarchy.Root.AddAppender(roller);
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.