SORU
8 EKİM 2009, PERŞEMBE


Nasıl dosya konumunu programlı olarak değiştirebilir miyim?

Tamamen yeni Log4net ediyorum.
Bir şeyler başarmak dosyası ve basit bir yapılandırma günlüğü ekleyerek başardım.
Değeri "C:\temp\log.txt" kodlanmış var ama bu yeterli değil.

Özel klasörlere gitmek zorunda kaydeder

path = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData);

ve bu yol, Windows Server 2008 veya Windows XP veya Vista vb kullanarak olup olmadığını bağlı olarak değişir...

Nasıl log4net Program aracılığıyla dosya konumunu değiştirebilir miyim?

Bu yaptığım şey

<configSections>
<section name="log4net"
         type="log4net.Config.Log4NetConfigurationSectionHandler,Log4net"/>
</configSections>
<log4net>         
    <root>
        <level value="DEBUG" />
        <appender-ref ref="LogFileAppender" />
    </root>
    <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender">
        <param name="File" value="C:\temp\log.txt" />
        <param name="AppendToFile" value="true" />
        <rollingStyle value="Size" />
        <maxSizeRollBackups value="10" />
        <maximumFileSize value="10MB" />
        <staticLogFileName value="true" />
        <layout type="log4net.Layout.PatternLayout">
            <param name="ConversionPattern" value="%-5p%d{yyyy-MM-dd hh:mm:ss} – %m%n" />
        </layout>
    </appender>
</log4net>

class Program
{
    protected static readonly ILog log = LogManager.GetLogger(typeof(Program));

    static void Main(string[] args)
    {
        log4net.Config.XmlConfigurator.Configure();
        log.Warn("Log something");

        path = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData);


        // How can I change where I log stuff?
    }
}

Sadece değiştirebilirim nasıl anlamaya istiyorum nerede için malzeme giriş yapmak.

Herhangi bir öneriniz var mı? Çok teşekkürler

CEVAP
8 EKİM 2009, PERŞEMBE


log4net sizin için halledebilir. String türünde herhangi bir appender özelliği, bu durumda, log4net.Util.PatternString seçeneği işleyicisi kullanarak biçimlendirilebilir. PatternString bile şu zarif config sağlayan SpecialFolder numaralama destekler:

<appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender" >
    <file type="log4net.Util.PatternString" 
        value="%envFolderPath{CommonApplicationData}\\test.txt" />
    ...
</appender>

İşte puding delillerinden bir birim test:

[Test]
public void Load()
{
    XmlConfigurator.Configure();
    var fileAppender = LogManager.GetRepository()
        .GetAppenders().First(appender => appender is RollingFileAppender);

    var expectedFile = 
        Path.Combine(
            Environment.GetFolderPath(
                Environment.SpecialFolder.CommonApplicationData),
                "test.txt");

    Assert.That(fileAppender, 
        Is.Not.Null & Has.Property("File").EqualTo(expectedFile));
}

Aşağıdaki test log4net aslında diske yazar doğrular temelde bu "bütünleşme" test, birim test, ama şimdilik bu kalsın): . bir kılan (

[Test]
public void Log4net_WritesToDisk()
{
    var expectedFile = 
        Path.Combine(
            Environment.GetFolderPath(
                Environment.SpecialFolder.CommonApplicationData),
                "test.txt");

    if (File.Exists(expectedFile))
        File.Delete(expectedFile);

    XmlConfigurator.Configure();

    var log = LogManager.GetLogger(typeof (ConfigTest));
    log.Info("Message from test");

    LogManager.Shutdown();

    Assert.That(File.ReadAllText(expectedFile), 
        Text.Contains("Message from test"));
}

NB: ben güçlü kompakt özellik sözdizimi yukarıda örnek gösterilen kullanmanızı öneririz. Tüm bu "<property name=" config çok daha okunabilir olduğunu. kaldırma

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • incognitotraveler

    incognitotra

    27 Mayıs 2010
  • khloe brooks

    khloe brooks

    25 Temmuz 2011
  • Vintendo Power

    Vintendo Pow

    2 Ocak 2007