2009-03-13 5 views
4

J'ai un projet sur lequel j'utilise log4net, et cela fonctionne très bien, mais je veux savoir si je peux remplacer la configuration XML pour l'attribut racine "level" pour la journalisation lors du débogage et de la libération.Modification du niveau racine Log4Net lorsque l'application est créée en tant que version

Actuellement ma configuration racine ressemble:

<root> 
    <level value="WARN"/> 
    <appender-ref ref="LogFileAppender"/> 
    <appender-ref ref="DebugAppender"/> 
</root> 

Et dans mes applications web classe Global.asax, je pensais que je pouvais envelopper quelque chose dans un

protected override void Application_Start(object sender, EventArgs e) { 
    base.Application_Start(sender, e); 
    XmlConfigurator.Configure(); 

    #if DEBUG 
    //Change logging level to DEBUG 
    #endif 
} 

Pour modifier le niveau de journalisation racine déboguer lorsque la solution est construite dans le débogage.

Est-ce possible, est-ce que mon idée est une solution de type best-practices à ce que je veux, et comment le ferais-je (ou comment le feriez-vous mieux)?

Répondre

6

Je fais l'oposite, en mode débogage j'utilise les configurations de développeur qui est mieux pour filtrer les messages pertinents pour moi; et en mode de libération, je verrouille le niveau WARN pour empêcher un utilisateur veut pirater mon code (il pourrait utiliser des tonnes d'autres moyens, mais c'est un truc de 5 secondes):

public static void Initialize() 
{ 

#if DEBUG 
    ConfigureAndWatch(); 
#else 
    ConfigureAndLockChanges(); 
#endif 

} 

#if DEBUG 

private static void ConfigureAndWatch() 
{ 
    XmlConfigurator.ConfigureAndWatch(new FileInfo("log4net.config")); 
} 

#else 

private static void ConfigureAndLockChanges() 
{ 
    // Disable using DEBUG mode in Release mode (to make harder to hack) 
    XmlConfigurator.Configure(new FileInfo("log4net.config")); 
    foreach (ILoggerRepository repository in LogManager.GetAllRepositories()) 
    { 
     repository.Threshold = Level.Warn; 
    } 
} 

#endif 
+0

Salut Diego, peut fournir un exemple pour les scénarios où les utilisateurs piratent votre code? – Ricky

+1

Salut Ricky, ne vous attendez pas à ce qu'il soit utilisé comme mesure de sécurité. J'évite simplement de consigner des informations importantes qui permettraient à un utilisateur de savoir facilement comment le système se comporte. Bien sûr, n'importe qui peut voir cela en utilisant le réflecteur de RedGate ou un tel type d'outils. Il empêche juste un utilisateur moyen d'essayer de faire quelque chose. Mais tout développeur .net avancé pourra contourner cette mesure de "sécurité". –

Questions connexes