I added an overload to BasicConfigurator that accepts more than one appender so 
you don't have to cast down to the Hierarchy and understand what's going on at 
that level:

 https://issues.apache.org/jira/browse/LOG4NET-153


----- Original Message ----
From: Knittel Bruno <[EMAIL PROTECTED]>
To: Log4NET User <log4net-user@logging.apache.org>
Sent: Tuesday, May 6, 2008 3:38:15 AM
Subject: AW: log4net configuration withtou Xml file

Nachricht 
Hi 
Everyone,
 
    I finally managed to configure log4net through the code, 
even using multiple appenders.
    Was not so hard, I just took a look at how the 
BasicConfigurator, XmlConfigurator and the units tests were 
written.
 
    Follows the piece of code I just ran. It creates a 
ConsoleAppender as well as a FileAppender.
    Hope it can help someone.
 
Regards,
 
Bruno
 
using 
System;
using System.Collections.Generic;
using 
System.Windows.Forms;
 
using 
log4net;
using log4net.Appender;
using log4net.Repository;
using 
log4net.Repository.Hierarchy;
 
namespace log4nettest
{
    static class 
Program
    {
        
/// <summary>
        /// The main 
entry point for the application.
        
/// </summary>
        
[STAThread]
        static void 
Main()
        
{
            
ConfigureLog();
            
ILog lLog = 
LogManager.GetLogger(typeof(Program));
            
lLog.Debug("Debug");
            
lLog.Error("Error");
            
lLog.Fatal("Fatal");
            
lLog.Info("Info");
            
lLog.Warn("warn");
        
}
 
        private static ConsoleAppender 
GetConsoleAppender()
        
{
            
ConsoleAppender lAppender = new 
ConsoleAppender();
            
lAppender.Name = 
"Console";
            
lAppender.Layout = new log4net.Layout.PatternLayout("%date{dd-MM-yyyy 
HH:mm:ss,fff} %5level [%2thread] %message 
(%logger{1}:%line)%n");
            
lAppender.Threshold = 
log4net.Core.Level.Error;
            
lAppender.ActivateOptions();
 
            return 
lAppender;
        }
 
        private static FileAppender 
GetFileAppender()
        
{
            
FileAppender lAppender = new 
FileAppender();
            
lAppender.Name = 
"File";
            
lAppender.AppendToFile = 
true;
            
lAppender.File = 
"log.txt";
            
lAppender.Layout = new log4net.Layout.PatternLayout("%date{dd-MM-yyyy 
HH:mm:ss,fff} %5level [%2thread] %message 
(%logger{1}:%line)%n");
            
lAppender.Threshold = 
log4net.Core.Level.All;
            
lAppender.ActivateOptions();
 
            return 
lAppender;
        }
 
        private static void 
ConfigureLog()
        
{
            Logger 
root;
            root 
= 
((Hierarchy)LogManager.GetRepository()).Root;
            
root.AddAppender(GetConsoleAppender());
            
root.AddAppender(GetFileAppender());
            
root.Repository.Configured = true;
        
}
    }
}

 
 
Bruker BioSpinGmbH 

________________________________
 
Bruno  Knittel
Automation Development 
Bruker BioSpin  GmbH 
Silberstreifen
76287 Rheinstetten 
Germany  Phone:  +49 721 5161-90064
 Fax:     +49 721  5161-494

   [EMAIL PROTECTED]
  www.bruker-biospin.com 

________________________________
 
Bruker BioSpin  GmbH: Sitz der Gesellschaft/Registered Office: Rheinstetten, 
HRB 102368  Amtsgericht Mannheim
Geschäftsführer/Managing Directors: Dr. Bernd  Gewiese, Dr. Dieter Schmalbein, 
Dr. Gerhard Roth

Diese E-Mail  und alle Anlagen können Betriebs- oder Geschäftsgeheimnisse, oder 
sonstige  vertrauliche Informationen enthalten. Sollten Sie diese E-Mail 
irrtümlich  erhalten haben, ist Ihnen eine Kenntnisnahme des Inhalts, eine  
Vervielfältigung oder Weitergabe der E-Mail und aller Anlagen ausdrücklich  
untersagt. Bitte benachrichtigen Sie den Absender und löschen/vernichten  Sie 
die empfangene E-Mail und alle Anlagen.
Vielen Dank. 

This message and any attachments may contain trade  secrets or privileged, 
undisclosed or otherwise confidential information.  If you have received this 
e-mail in error, you are hereby notified that  any review, copying or 
distribution of it and its attachments is strictly  prohibited. Please inform 
the sender immediately and delete/destroy the  original message and any copies.
Thank  you.

 
-----Ursprüngliche Nachricht-----
Von: Radovan Raszka  [mailto:[EMAIL PROTECTED] 
Gesendet: Dienstag, 6. Mai 2008  08:00
An: Log4NET User
Betreff: RE: log4net configuration  withtou Xml file


Hello Bruno,
configuring log4net directly from the code is my  dream too, but documentation 
did not give any example how to do  this.
It is simple if you need to use the only appender -  use BasicConfigurator:
 
   log4net.Appender.FileAppender fa = new  log4net.Appender.FileAppender();
   fa.AppendToFile =  false;
   fa.File =  "ipagent.log";
   fa.Layout = new  log4net.Layout.PatternLayout("%date{dd-MM-yyyy 
HH:mm:ss,fff} %5level  [%2thread] %message (%logger{1}:%line)%n");
   fa.Threshold  =  log4net.Core.Level.Debug;
   fa.ActivateOptions();
   log4net.Config.BasicConfigurator.Configure(fa);
 
I have this tested and it works well. But when  configuration is more complex, 
I didn't found a way how to make logging to  work. Look at this message 
http://www.mail-archive.com/log4net-user@logging.apache.org/msg03890.html,  
there you find a piece of my (nonworking) code.
If you'll be able to find what is missing there, let  me know
 
Radovan  Raszka


________________________________
 From: Knittel Bruno  [mailto:[EMAIL PROTECTED] 
Sent: Monday, May 05,  2008 9:32 AM
To: log4net-user@logging.apache.org
Subject: log4net configuration  withtou Xml file


Hello  Everyone,
 
    I need to be able to configure log4net without the XmlConfigurator,  that 
is directly from my code.
    I am aware of the BasicConfigurator but one appender is not enough  for me.
 
    I would like to be able to create some new appenders, remove (or  disable) 
them and change their
    log threshold at runtime.I am working under Compact  Framework 2.0.
 
    I already took a look at this ( 
http://www.mail-archive.com/log4net-user@logging.apache.org/msg02895.html )  
mail that gave me many informations,
    but did not yet found how to create an appender and register it not  for 
one logger but for all (and all the ones that will be created after I  
registered my appender).
 
    In fact how can I achieve a configuration like the following file but  
programmatically:
 
    <configuration>
 <log4net>  
  <appender  name="TextLogFileAppender" type="log4net.Appender.FileAppender"  >
   <file value="log.xml"  />
   <appendToFile value="true"  />
   <layout  type="log4net.Layout.XmlLayoutSchemaLog4j"  />
   <param name="Threshold" value="ERROR"  />
  </appender>
  
  <appender  name="ConsoleErrorAppender"  
type="log4net.Appender.ConsoleAppender">
   <layout  type="log4net.Layout.PatternLayout">
    <conversionPattern  value="%date [%thread] %-5level %logger [%ndc]  
&lt;%property{auth}&gt; - %message%newline"  />
   </layout>
   <param  name="Threshold" value="FATAL"  />
  </appender>
  
  <appender  name="UdpAppender"  type="log4net.Appender.UdpAppender">
   <localPort  value="8080" />
   <remoteAddress  value="192.168.1.1" />
   <remotePort value="8080"  />
   <layout  type="log4net.Layout.XmlLayoutSchemaLog4j">
    <locationInfo  value="true"  />
   </layout>
   <param  name="Threshold" value="DEBUG"  />
  </appender>
 
  <!-- Setup the root category, add the appenders and  set the default level  
-->  
  <root>
   <appender-ref  ref="TextLogFileAppender" />
   <appender-ref  ref="ConsoleErrorAppender" />
   <appender-ref  ref="UdpAppender"  />
  </root> 
 </log4net>
</configuration>
 
 
    Best regards and many thanks in advance for any  help,
 
    Bruno

Reply via email to