SORU
20 NİSAN 2009, PAZARTESİ


Nasıl sıfırdan log4net Program aracılığıyla (config)yapılandırma

Bu Kötü bir Fikir, biliyorum, ama... Hayır config dosyası ile sıfırdan log4net programlı olarak yapılandırmak istiyorum. Benim için basit bir günlük uygulama ve takımımda sorumlu olduğumuzu nispeten küçük bölüm bir sürü uygulama için kullanmaya çalışıyorum. Hepsini aynı veritabanına oturum açmak istiyorum. Günlük uygulama sadece etrafında sarıcı AdoNetAppender önceden ile log4net.

Tüm uygulamaları yapılandırma dosyası dağıtımı ile küçük bir sorun yaratıyor ki ClickOnce dağıtılır. Eğer yapılandırma dosyası çekirdek projesinin bir parçası olsaydı, özellikleri ile derleme dağıtmak için ayarlanmış olabilir. Ama bağlantılı bir uygulamanın parçası, ana uygulama ile dağıtma seçeneği yok. Eğer bu doğru değil ise (biri bana bildirin lütfen.

Muhtemelen Kötü bir Fikir olduğu için, çok fazla örnek kod, Program aracılığıyla sıfırdan log4net configruating için kullanılabilir olması için görünmüyor. Şu ana kadar öğrendiklerimi burada.

Dim apndr As New AdoNetAppender()
apndr.CommandText = "INSERT INTO LOG_ENTRY (LOG_DTM, LOG_LEVEL, LOGGER, MESSAGE, PROGRAM, USER_ID, MACHINE, EXCEPTION) VALUES (@log_date, @log_level, @logger, @message, @program, @user, @machine, @exception)"
apndr.ConnectionString = connectionString
apndr.ConnectionType = "System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
apndr.CommandType = CommandType.Text
Dim logDate As New AdoNetAppenderParameter()
logDate.ParameterName = "@log_date"
logDate.DbType = DbType.DateTime
logDate.Layout = New RawTimeStampLayout()
apndr.AddParameter(logDate)
Dim logLevel As New AdoNetAppenderParameter()
logLevel.ParameterName = "@log_level"
'And so forth...

apndr tüm parametreleri konfigüre ettikten sonra, ben de ilk bunu denedi...

Dim hier As Hierarchy = DirectCast(LogManager.GetRepository(), Hierarchy)
hier.Root.AddAppender(apndr)

İşe yaramadı. Sonra, karanlıkta ateş gibi, bu yerine çalıştım.

BasicConfigurator.Configure(apndr)

Bu da işe yaramadı. Kimseye hiçbir yapılandırma dosyası ile sıfırdan log4net Program aracılığıyla yapılandırma konusunda iyi referansları var mı?

CEVAP
21 Kasım 2009, CUMARTESİ


İşte kod tamamen log4net yapılandırması yaratan örnek bir sınıf. Statik bir yöntem ile bir logger oluşturma genellikle kötü olarak görülüyor bahsetmeliyiz, ama benim bağlamda, benim istediğim bu. Ne olursa olsun, ihtiyaçlarınızı karşılamak için bu kodu doğrayın.

using log4net;
using log4net.Repository.Hierarchy;
using log4net.Core;
using log4net.Appender;
using log4net.Layout;

namespace dnservices.logging
{
public class Logger
{
	private PatternLayout _layout = new PatternLayout();
	private const string LOG_PATTERN = "%d [%t] %-5p %m%n";

	public string DefaultPattern
	{
		get { return LOG_PATTERN; }
	}

    public Logger()
    {
        _layout.ConversionPattern = DefaultPattern;
        _layout.ActivateOptions();
    }

    public PatternLayout DefaultLayout
    {
    	get { return _layout; }
    }

    public void AddAppender(IAppender appender)
    {
        Hierarchy hierarchy = 
        	(Hierarchy)LogManager.GetRepository();

        hierarchy.Root.AddAppender(appender);
    }

    static Logger()
    {
    	Hierarchy hierarchy = (Hierarchy)LogManager.GetRepository();
        TraceAppender tracer = new TraceAppender();
        PatternLayout patternLayout = new PatternLayout();

        patternLayout.ConversionPattern = LOG_PATTERN;
        patternLayout.ActivateOptions();

        tracer.Layout = patternLayout;
        tracer.ActivateOptions();
        hierarchy.Root.AddAppender(tracer);

        RollingFileAppender roller = new RollingFileAppender();
        roller.Layout = patternLayout;
        roller.AppendToFile = true;
        roller.RollingStyle = RollingFileAppender.RollingMode.Size;
        roller.MaxSizeRollBackups = 4;
        roller.MaximumFileSize = "100KB";
        roller.StaticLogFileName = true;
        roller.File = "dnservices.txt";
        roller.ActivateOptions();
        hierarchy.Root.AddAppender(roller);

        hierarchy.Root.Level = Level.All;
        hierarchy.Configured = true;
    }

    public static ILog Create()
    {
        return LogManager.GetLogger("dnservices");
    }
}

}

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BioHunta

    BioHunta

    28 Mayıs 2006
  • george sarintzotis

    george sarin

    2 Aralık 2007
  • SoundHound

    SoundHound

    8 Mart 2006