2010-04-15 4 views
5

Мне нужно создать динамические журналы, поэтому с сообщением from here и с помощью рефлектора мне удалось динамически создать регистраторы, но я хотел бы знать, должен ли я беспокоиться о чем-то другом ... Я не знаю, последствия могут сделать это.log4net: динамически создавайте журнал, я должен что-то беспокоиться?

public static ILog GetDyamicLogger(Guid applicationId) 
    { 
     Hierarchy hierarchy = (Hierarchy)LogManager.GetRepository(); 
     RollingFileAppender roller = new RollingFileAppender(); 
     roller.LockingModel = new log4net.Appender.FileAppender.MinimalLock(); 
     roller.AppendToFile = true; 
     roller.RollingStyle = RollingFileAppender.RollingMode.Composite; 
     roller.MaxSizeRollBackups = 14; 
     roller.MaximumFileSize = "15000KB"; 
     roller.DatePattern = "yyyyMMdd"; 
     roller.Layout = new log4net.Layout.PatternLayout(); 
     roller.File = "App_Data\\Logs\\"+applicationId.ToString()+"\\debug.log"; 
     roller.StaticLogFileName = true; 

     PatternLayout patternLayout = new PatternLayout(); 
     patternLayout.ConversionPattern = "%date [%thread] %-5level %logger [%property{NDC}] - %message%newline"; 
     patternLayout.ActivateOptions(); 

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

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

     DummyLogger dummyILogger = new DummyLogger(applicationId.ToString()); 
     dummyILogger.Hierarchy = hierarchy; 
     dummyILogger.Level = log4net.Core.Level.All; 
     dummyILogger.AddAppender(roller); 

     return new LogImpl(dummyILogger); 
    } 

    internal sealed class DummyLogger : Logger 
    { 
     // Methods 
     internal DummyLogger(string name) 
      : base(name) 
     { 
     } 
    } 

Cheers.

+1

Вам нужна очень хорошая причина использовать этот код, а не использовать конфигурационный файл :-) –

+3

Причина в том, что мое приложение динамически создает сообщества во время выполнения, и я хочу поддерживать файл журнала для каждого из них. – vtortola

ответ

2

Я бы сказал, что вам не нужно беспокоиться о создании регистраторов в коде. Это один из поддерживаемых методов их создания. Вы теряете возможность изменять вещи во время работы приложения (если вы не написали для него код). Это лишь одно из преимуществ использования конфигурационных файлов.

+0

Я был обеспокоен тем, что LoggerImpl является «внутренним», поэтому, по-видимому, он не должен быть создан. Затем я создал копию (DummyLogger) с той же реализацией, и я использую ее для создания ILogImpl, но я не знал, не позволяет ли log4net создавать экземпляры самостоятельно по любой конкретной причине: P – vtortola

Смежные вопросы