2010-04-15 12 views
5

Necesito crear registradores dinámicamente, así que con una publicación from here y la ayuda del reflector he logrado crear registradores dinámicamente, pero me gustaría saber si debería preocuparme por otra cosa ... No sé qué implicaciones pueden tener que hacerlo.log4net: Creando un registrador dinámicamente, ¿debería preocuparme por algo?

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

Necesita una muy BUENA razón para usar ese código y no usar un archivo de configuración en su lugar :-) –

+3

El motivo es que mi aplicación crea comunidades dinámicamente en tiempo de ejecución y quiero mantener un archivo de registro para cada una. – vtortola

Respuesta

2

Yo diría que no tiene que preocuparse por la creación de registradores en el código. Es uno de los métodos compatibles para crearlos. Perderá la capacidad de cambiar cosas mientras la aplicación se está ejecutando (a menos que escriba el código para ello). Ese es solo uno de los beneficios de usar archivos de configuración.

+0

Estaba preocupado porque LoggerImpl es "interno", por lo que aparentemente no se supone que se cree una instancia. Luego creé una copia (DummyLogger) con la misma implementación y la utilicé para crear un ILogImpl, pero no sabía si log4net evitaba crear instancias por su cuenta por alguna razón específica: P – vtortola

Cuestiones relacionadas