Return-Path: Delivered-To: apmail-logging-log4net-user-archive@www.apache.org Received: (qmail 53113 invoked from network); 28 Aug 2007 14:22:06 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 28 Aug 2007 14:22:06 -0000 Received: (qmail 48269 invoked by uid 500); 28 Aug 2007 14:22:00 -0000 Delivered-To: apmail-logging-log4net-user-archive@logging.apache.org Received: (qmail 48235 invoked by uid 500); 28 Aug 2007 14:22:00 -0000 Mailing-List: contact log4net-user-help@logging.apache.org; run by ezmlm Precedence: bulk list-help: list-unsubscribe: List-Post: Reply-To: "Log4NET User" List-Id: Delivered-To: mailing list log4net-user@logging.apache.org Received: (qmail 48222 invoked by uid 99); 28 Aug 2007 14:22:00 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 28 Aug 2007 07:22:00 -0700 X-ASF-Spam-Status: No, hits=1.0 required=10.0 tests=HTML_MESSAGE,RCVD_IN_DNSWL_LOW,SPF_PASS X-Spam-Check-By: apache.org Received-SPF: pass (athena.apache.org: domain of randallp@vt.edu designates 198.82.160.18 as permitted sender) Received: from [198.82.160.18] (HELO rivendell.cc.vt.edu) (198.82.160.18) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 28 Aug 2007 14:21:47 +0000 Received: from elessar.cc.vt.edu ([198.82.160.22]) by rivendell.cc.vt.edu with Microsoft SMTPSVC(5.0.2195.6713); Tue, 28 Aug 2007 10:21:26 -0400 X-MimeOLE: Produced By Microsoft Exchange V6.5 Content-class: urn:content-classes:message MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="----_=_NextPart_001_01C7E97E.B73AB934" Subject: RE: doubt about log4net configuration Date: Tue, 28 Aug 2007 10:21:24 -0400 Message-ID: <4C058118EC56B34E809904A5D0DA30870269D68C@elessar.cc.w2k.vt.edu> In-Reply-To: X-MS-Has-Attach: X-MS-TNEF-Correlator: Thread-Topic: doubt about log4net configuration Thread-Index: Acfosbt3zG6tiTsQQrmbfJ5xwKuCtQAg2lAgAAuLZYAABKc8kAACGB7g References: <79283A4C79821448A6B7E973A173361F2DD29B@main.hasam.cz> <4C058118EC56B34E809904A5D0DA30870269D5FD@elessar.cc.w2k.vt.edu> From: "Price, Randall" To: "Log4NET User" Cc: X-OriginalArrivalTime: 28 Aug 2007 14:21:26.0061 (UTC) FILETIME=[B7B545D0:01C7E97E] X-Virus-Checked: Checked by ClamAV on apache.org This is a multi-part message in MIME format. ------_=_NextPart_001_01C7E97E.B73AB934 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Hello Dave, =20 I am doing this because in the case of an unhandled error somewhere in the ASP.NET application I can trap it in the Application_Error() routine in Global.aspx, as follows: =20 // Code that runs when an unhandled error occurs. void Application_Error(object sender, EventArgs e) { try { // Get reference to the source of the exception chain. Exception ex =3D Server.GetLastError().GetBaseException(); =20 string strErrorMessage =3D "MESSAGE: " + ex.Message + "\nSOURCE: " + ex.Source + "\nFORM: " + Request.Form.ToString() + "\nQUERYSTRING: " + Request.QueryString.ToString() + "\nTARGETSITE: " + ex.TargetSite + "\nSTACKTRACE: " + ex.StackTrace; =20 // Log the details of the exception and page state to the Event Log. =20 EventLog.WriteEntry(ConfigurationManager.AppSettings["ApplicationName"], strErrorMessage, EventLogEntryType.Error); =20 // Add information to Session so it can be seen in AppError.aspx. Session["Exception"] =3D ex; Session["Procedure"] =3D "Global.asax::Application_Error()"; =20 // Log to file. log4net.ILog log =3D log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMeth od().DeclaringType); log.Error(strErrorMessage); } catch { } } =20 I suppose I could have moved the line creating an instance of the Logger into the Application_Error() routine but instead I have it in the Application_Start() routine. I have not tried moving it there but it should work. =20 Hope this helps clear up the confusion. =20 Thanks, =20 Randall Price Secure Enterprise Technology Initiatives Microsoft Implementation Group Virginia Tech Information Technology 1700 Pratt Drive Blacksburg, VA 24060 Email: Randall.Price@vt.edu Phone: (540) 231-4396 ________________________________ From: Dave McEwan [mailto:dmcewan@harmonyis.com]=20 Sent: Tuesday, August 28, 2007 9:21 AM To: Log4NET User Cc: raszka@hasam.cz; diana.santos@liz-online.pt Subject: RE: doubt about log4net configuration =20 Hello Randall, =20 Could you tell me why you are creating an instance of the Logger in both the Global.asax file and your class AppError? Is this an oversight or am I just missing something? =20 Seems to me that you would not want this in the Global.asax file: log4net.ILog log =3D log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMeth od().DeclaringType); =20 =20 Thanks Dave =20 ________________________________ From: Price, Randall [mailto:randallp@vt.edu]=20 Sent: Tuesday, August 28, 2007 7:55 AM To: Log4NET User Cc: raszka@hasam.cz; diana.santos@liz-online.pt Subject: RE: doubt about log4net configuration =20 Hello Diana, =20 Log4Net works great in ASP.NET. I use it in all my applications, whether ASP.NET, C# / VB.NET WinForms, Console apps, etc. Here is an example of how I use it in ASP.NET: =20 I always do the initial configuration in Global.aspx in the Application_Start() routine: =20 Global.aspx: =20 // Code that runs on application startup. void Application_Start(object sender, EventArgs e) { // Configure the Log4Net logging application. log4net.Config.XmlConfigurator.Configure(); log4net.ILog log =3D log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMeth od().DeclaringType); } =20 The configuration file can be in a stand-alone config file or in the web.config file. I prefer the web.config file so all of the configuration for my application can be done in one place. The following snippet from a typical web.config shows how I configure the Log4Net settings. All that is required is to add a
entry for Log4Net in the , then define the section, as follows (ignore the stuff for the ASP.NET AJAX settings; they are not necessary for the Log4Net configuration): =20 Web.config: =20
=20 ... ... ... =20 In this example, I have configured a rolling file appender that tops out at 100KB. If it exceeds 100KB it renames the file and starts a new one. Each day a new file is started and the previous days' file is renamed as follows (read more about the appenders in the Log4Net documentation): =20 ..\logs\MyApp.log ..\logs\MyApp.log.2007-02-26 ..\logs\MyApp.log.2007-02-25 ..\logs\MyApp.log.2007-02-24 ..etc.. =20 =20 Then in each class where I want to log something from, I get an instance of the logger and call it. In this example, I have an AppError.aspx page that gets called when an error occurs in my ASP.NET application. Here, I am logging the start and end of the Page_Load() event, as well as an error message build from a custom routine, _GetErrorAsString(), defined later in the code. =20 using log4net; using log4net.Config; =20 namespace VT.MyApp { public partial class AppError : System.Web.UI.Page { private static readonly ILog log =3D LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().Dec laringType); =20 protected void Page_Load(object sender, EventArgs e) { if (log.IsInfoEnabled) log.Info(System.Reflection.MethodBase.GetCurrentMethod().Name + "() started."); =20 // Setup the common page headers. Headers.SetHeaders(Context); =20 // Load some string contants. lblMainHeading.Text =3D Constants.DEFAULT_MAIN_HEADING_TEXT; =20 try { // Get the error message from the Session variable, format it, and log it. string strErrorMessage =3D _GetErrorAsString(); log.Error(strErrorMessage); =20 // Check to send the error message via Email to the appropriate destination. _SendEmail(strErrorMessage); =20 // Clear the Session variables associated with error handling. Session.Remove("Exception"); Session.Remove("ErrorProcedure"); Session.Remove("ErrorMoreInfo"); Session.Remove("ErrorStackTrace"); } catch { } =20 if (log.IsInfoEnabled) log.Info(System.Reflection.MethodBase.GetCurrentMethod().Name + "() ended."); =20 } // Page_Load() ... ... ... =20 } // class AppError =20 } // namespace VT.MyApp =20 =20 That is basically it for configuring and using Log4Net in an ASP.NET application. =20 One thing that is vitally important is that the account that is running the ASP.NET application (usually by default the IUSR_{machinename} account on the IIS server) must have the proper permissions to the folder containing the log files. In my example above, that would be the C:\InetPub\wwwroot\MyApp\logs\ folder. I gave the IUSR_{machinename} account Modify permissions on this folder. You might also get it to work with just Read/Write but I haven't tried that. =20 Log4Net is a great logging tool and fairly easy to use. It is quite customizable as you can see if you monitor this forum because there are a lot of people out there writing customizations for it. I find it totally useful right out of the box with a little configuration. =20 Hope this helps. =20 Randall Price Secure Enterprise Technology Initiatives Microsoft Implementation Group Virginia Tech Information Technology 1700 Pratt Drive Blacksburg, VA 24060 Email: Randall.Price@vt.edu Phone: (540) 231-4396 ________________________________ From: Radovan Raszka [mailto:raszka@hasam.cz]=20 Sent: Tuesday, August 28, 2007 1:50 AM To: Log4NET User Subject: RE: doubt about log4net configuration =20 Hi Diana, log4net is easy to use, I try to explain in short. Before you can write any log entry, you must configure logging system. It is usually done during constructing the main application's class (for example in Main() method for console apps) and usually we use configuration file to do this: =20 using log4net; using log4net.Config; XmlConfigurator.Configure(new System.IO.FileInfo("log4net.config")); this line configures log4net system using log4net.config file. This file describes all targets, where log entries can be written to, short example is attached (it allows to into console, file and Windows eventlog) Now you can log anything you want - but some coding is needed - you must get instance of logger (usually in constructor of every class, inside which you want to log): using log4net; Ilog log =3D LogManager.GetLogger(typeof(yourClassName)); or Ilog log =3D LogManager.GetLogger("yourLoggerName"); Now you can send log messages to the log system: =20 log.Info(.....); log.Warn(....); log.Error(....); etc. =20 How message is written into log target depends on configuration - see log4net documentation. All I wrote is valid for standard console or Windows application - I have no experience with logging in ASP.NET, but there will not be big difference (l hope someone gives you exact information, I think log4net should be probably configured in Global.asax) =20 Radovan =09 ________________________________ From: Diana Santos [mailto:diana.santos@liz-online.pt]=20 Sent: Monday, August 27, 2007 3:54 PM To: log4net-user@logging.apache.org Subject: doubt about log4net configuration =20 Hi, =20 I need some ligths on log4net. A friend of mine told me that we use the log4j and we only configure one file obtaining all log the for the application without adding aditional code lines, including the log of the actions taken in the data base. (INSERT / SELECT / DELETE ...) Konw, i'm using the DotNetNuke framework to create a portal, and i want to use the log4net to do some aditional logging. All the articles and post that i read, some say that i have to add to all classes, that i want to do the log, some lines as the import of the log4net and methots that do the log...=20 Is there any way to only configure a file like log4j? =09 thanks for the help. =20 P.S: i'm using ASP.NET 2.0 =20 =20 ------_=_NextPart_001_01C7E97E.B73AB934 Content-Type: text/html; charset="us-ascii" Content-Transfer-Encoding: quoted-printable

Hello = Dave,

 

I am doing this because in the case = of an unhandled error somewhere in the ASP.NET application I can trap it in = the Application_Error() routine in Global.aspx, as follows:

 

    = // Code that runs when an unhandled error = occurs.

    = void Application_Error(object sender, EventArgs = e)

    = {

        try

        = {

            = // Get reference to the source = of the exception chain.

            = Exception = ex =3D Server.GetLastError().GetBaseException();

 

            = string strErrorMessage =3D "MESSAGE: = "       + = ex.Message

           &= nbsp;           &n= bsp;           + "\nSOURCE: = "      + ex.Source

           &= nbsp;           &n= bsp;           + "\nFORM: = "        + Request.Form.ToString()

           &= nbsp;           &n= bsp;           + "\nQUERYSTRING: " + Request.QueryString.ToString()

           &= nbsp;           &n= bsp;           + "\nTARGETSITE: "  + ex.TargetSite

           &= nbsp;           &n= bsp;           + "\nSTACKTRACE: "  + ex.StackTrace;

 

            = // Log the details of the = exception and page state to the Event Log.

            = EventLog.WriteEntry(ConfigurationManager.AppSettings["ApplicationName"], strErrorMessage, EventLogEntryType.Error);

 

            = // Add information to Session = so it can be seen in AppError.aspx.

            = Session["Exception"] =3D ex;

            = Session["Procedure"] =3D "Global.asax::Application_Error()";

            =

            = // Log to = file.

            = log4net.ILog log = =3D log4net.LogManager.GetLogger(System.Reflect= ion.MethodBase.GetCurrentMethod().Decla= ringType);

            log.Error(strErrorMessage);

        = }

        catch { = }

    = }

 

I suppose I could have moved the = line creating an instance of the Logger into the Application_Error() routine = but instead I have it in the Application_Start() routine.  I have not = tried moving it there but it should work.

 

Hope this helps clear up the = confusion.

 

Thanks,

=

 

Randall Price

Secure Enterprise Technology = Initiatives

Microsoft Implementation = Group

Virginia Tech Information = Technology

1700 Pratt = Drive

Blacksburg, VA  24060

Email:     = Randall.Price@vt.edu

Phone:     = (540) 231-4396


From: Dave = McEwan [mailto:dmcewan@harmonyis.com]
Sent: Tuesday, August 28, = 2007 9:21 AM
To: Log4NET User
Cc: raszka@hasam.cz; diana.santos@liz-online.pt
Subject: RE: doubt about = log4net configuration

 

Hello = Randall,

 

Could you tell me why you are = creating an instance of the Logger in both the Global.asax file and your class AppError?  Is this an oversight or = am I just missing something?

 

Seems to me that you would not want this in the Global.asax = file:

log4net.ILog log =3D log4net.LogManager.GetLogger(System.Reflect= ion.MethodBase.GetCurrentMethod().Decla= ringType);

 

 

Thanks

Dave

 


From: = Price, Randall [mailto:randallp@vt.edu]
Sent: Tuesday, August 28, = 2007 7:55 AM
To: Log4NET User
Cc: raszka@hasam.cz; diana.santos@liz-online.pt
Subject: RE: doubt about = log4net configuration

 

Hello = Diana,

 

Log4Net works great in = ASP.NET.  I use it in all my applications, whether ASP.NET, C# / VB.NET WinForms, = Console apps, etc.  Here is an example of how I use it in = ASP.NET:

 

I always do the initial = configuration in Global.aspx in the Application_Start() = routine:

 

Global.aspx:

 

    = // Code that runs on = application startup.

    = void = Application_Start(object sender, = EventArgs = e)

    = {

        // Configure the Log4Net = logging application.

        log4net.Config.XmlConfigurator.Configure();

        log4net.ILog log =3D log4net.LogManager.GetLogger(System.Reflect= ion.MethodBase.GetCurrentMethod().Decla= ringType);

    = }

 

The configuration file can be in a stand-alone config file or in the web.config file.  I prefer the web.config file so all of the configuration for my application can be = done in one place.  The following snippet from a typical web.config shows = how I configure the Log4Net settings.  All that is required is to add a <section> entry for Log4Net in the <configSections>, then = define the <log4net> section, as follows (ignore the <sectionGroup> = stuff for the ASP.NET AJAX settings; they are not necessary for the Log4Net configuration):

 

Web.config:=

 

<?xml version=3D"1.0"?>

<configuration>

  <configSections>

    <sectionGroup name=3D"system.web.extensions" type=3D"System.Web.Configuration.SystemWebExtensionsSectionG= roup, System.Web.Extensions, Version=3D1.0.61025.0, Culture=3Dneutral, PublicKeyToken=3D31bf3856ad364e35">

      <sectionGroup name=3D"scripting" type=3D"System.Web.Configuration.ScriptingSectionGroup, = System.Web.Extensions, Version=3D1.0.61025.0, Culture=3Dneutral, = PublicKeyToken=3D31bf3856ad364e35">

        = <section name=3D"scriptResourceHandler" type=3D"System.Web.Configuration.ScriptingScriptResourceHand= lerSection, System.Web.Extensions, Version=3D1.0.61025.0, Culture=3Dneutral, PublicKeyToken=3D31bf3856ad364e35" requirePermission=3D"false" allowDefinition=3D"MachineToApplication"/>

        = <sectionGroup name=3D"webServices" type=3D"System.Web.Configuration.ScriptingWebServicesSection= Group, System.Web.Extensions, Version=3D1.0.61025.0, Culture=3Dneutral, PublicKeyToken=3D31bf3856ad364e35">

          = <section name=3D"jsonSerialization" type=3D"System.Web.Configuration.ScriptingJsonSerializationS= ection, System.Web.Extensions, Version=3D1.0.61025.0, Culture=3Dneutral, PublicKeyToken=3D31bf3856ad364e35" requirePermission=3D"false" allowDefinition=3D"Everywhere" />

          = <section name=3D"profileService" type=3D"System.Web.Configuration.ScriptingProfileServiceSect= ion, System.Web.Extensions, Version=3D1.0.61025.0, Culture=3Dneutral, PublicKeyToken=3D31bf3856ad364e35" requirePermission=3D"false" allowDefinition=3D"MachineToApplication" />

          = <section name=3D"authenticationService" type=3D"System.Web.Configuration.ScriptingAuthenticationServ= iceSection, System.Web.Extensions, Version=3D1.0.61025.0, Culture=3Dneutral, PublicKeyToken=3D31bf3856ad364e35" requirePermission=3D"false" allowDefinition=3D"MachineToApplication" />

        = </sectionGroup>

      </sectionGroup>

    </sectionGroup>

    <!-— Define a section for the Log4Net logger. = -->

    <section = name=3D"log4net" type=3D"log4net.Config.Log4NetConfigurationSectionHandler, = log4net"/>

  </configSections>

 

  <!-- This Log4Net section defines items required for the Log4Net logger. -->

  <log4net>

    <appender = name=3D"RollingFileAppender" type=3D"log4net.Appender.RollingFileAppender&q= uot;>

      <file value=3D"logs\Web_Reporting.log"/>

      <appendToFile value=3D"true"/>

      <maximumFileSize value=3D"100KB"/>

      <maxSizeRollBackups value=3D"2"/>

      <layout type=3D"log4net.Layout.PatternLayout">

        = <conversionPattern value=3D"%date [%thread] %-5level %logger = - %message %newline"/>

      </layout>

    </appender>

    <root>

      <level value=3D"ALL"/>

      <appender-ref ref=3D"RollingFileAppender"/>

    </root>

  </log4net>

  ...

  ...

  ...

</configuration>

 

In this example, I have configured = a rolling file appender that tops out at 100KB.  If it exceeds 100KB = it renames the file and starts a new one.  Each day a new file is = started and the previous days’ file is renamed as follows (read more about the appenders in the Log4Net documentation):

 

..\logs\MyApp.log<= /font>

..\logs\MyApp.log.2007-02-26

..\logs\MyApp.log.2007-02-25

..\logs\MyApp.log.2007-02-24

..etc..

=

 

 

Then in each class where I want to = log something from, I get an instance of the logger and call it.  In = this example, I have an AppError.aspx page that gets called when an error = occurs in my ASP.NET application.  Here, I am logging the start and end of = the Page_Load() event, as well as an error message build from a custom = routine, _GetErrorAsString(), defined later in the code.

 

using = log4net;

using = log4net.Config;

 

namespace = VT.MyApp

{

    = public partial class AppError : System.Web.UI.Page

    = {

        private = static readonly ILog log =3D LogManager.GetLogger(System.Reflect= ion.MethodBase.GetCurrentMethod().Decla= ringType);

 

        protected = void = Page_Load(object sender, = EventArgs = e)

        {

            if = (log.IsInfoEnabled) log.Info(System.Reflection.MethodBase.GetCurrentMethod().Name + "() = started.");

 

            // Setup the common page = headers.

            Headers.SetHeaders(Context);

 

            // Load some string = contants.

            lblMainHeading.Text =3D Constants.DEFAULT_MAIN_HEADING_TEXT= ;

 

            try

            {

           &= nbsp;    // Get the error message = from the Session variable, format it, and log = it.

              &= nbsp; string = strErrorMessage =3D _GetErrorAsString();

           &= nbsp;    log.Error(strErrorMessage);

 

           &= nbsp;    // Check to send the = error message via Email to the appropriate = destination.

           &= nbsp;    _SendEmail(strErrorMessage);

 

                // Clear the Session variables associated with error = handling.

           &= nbsp;    Session.Remove("Exception");<= /span>

           &= nbsp;    Session.Remove("ErrorProcedure");

           &= nbsp;    Session.Remove("ErrorMoreInfo");

           &= nbsp;    Session.Remove("ErrorStackTrace");<= /o:p>

            }

            catch { = }

 

            if = (log.IsInfoEnabled) log.Info(System.Reflection.MethodBase.GetCurrentMethod().Name + "() = ended.");

 

        }   // = Page_Load()

...

...

...

 

    }   // class = AppError

 

}   // namespace = VT.MyApp

 

 

That is basically it for = configuring and using Log4Net in an ASP.NET application.

 

One thing that is vitally important = is that the account that is running the ASP.NET application (usually by = default the IUSR_{machinename} account on the IIS server) must have the proper permissions to the folder containing the log files.  In my example = above, that would be the C:\InetPub\wwwroot\MyApp\logs\ folder.  I gave = the IUSR_{machinename} account Modify permissions on this folder.  You = might also get it to work with just Read/Write but I haven’t tried = that.

 

Log4Net is a great logging tool and = fairly easy to use.  It is quite customizable as you can see if you = monitor this forum because there are a lot of people out there writing customizations = for it.  I find it totally useful right out of the box with a little configuration.

 

Hope this = helps.

 

Randall Price

Secure Enterprise Technology = Initiatives

Microsoft Implementation = Group

Virginia Tech Information = Technology

1700 Pratt = Drive

Blacksburg, VA  = 24060

Email:     = Randall.Price@vt.edu

Phone:     = (540) 231-4396


From: = Radovan Raszka [mailto:raszka@hasam.cz]
Sent: Tuesday, August 28, = 2007 1:50 AM
To: Log4NET User
Subject: RE: doubt about = log4net configuration

 

Hi = Diana,

log4net is easy = to use, I try to explain in short.

Before you can = write any log entry, you must configure logging system. It is usually done during constructing the main application's class (for example in Main() method = for console apps) and usually we use configuration file to do = this:

 

using log4net;

using log4net.Config;

XmlConfigurator.Configure(new System.IO.FileInfo("log4net.config"));

this line configures log4net system using log4net.config file. = This file describes all targets, where log entries can be written to, short = example is attached (it allows to into console, file and Windows = eventlog)

Now you can log anything you want - but = some coding is needed - you must get instance of logger (usually in = constructor of every class, inside which you want to log):

using log4net;

Ilog log&nbs= p;=3D LogManager.GetLogger(typeof(yourClassName));

or<= span lang=3DPT>

Ilog log&nbs= p;=3D LogManager.GetLogger("yourLoggerName");

Now you can send = log messages to the log system:

 

=

log.Info(.....);<= /span>

log.Warn(....);

log.Error(....); = etc.

 

=

How message is = written into log target depends on configuration - see log4net = documentation.

All I wrote is = valid for standard console or Windows application - I have no experience with = logging in ASP.NET, but there will not be big difference (l hope someone gives = you exact information, I think log4net should be probably = configured in Global.asax)

 

=

Radovan


From: Diana Santos [mailto:diana.santos@liz-online.pt]
Sent: Monday, August 27, = 2007 3:54 PM
To: log4net-user@logging.apache.org
Subject: doubt about = log4net configuration

 

Hi,

 

I need some ligths on log4net. A friend of mine told = me that we use the log4j and we only configure one file obtaining all log the = for the application without adding aditional code lines, including the log of = the actions taken in the data base. (INSERT / SELECT / DELETE = …)

Konw, i‘m using the DotNetNuke framework to = create a portal, and i want to use the log4net to do some aditional logging. All = the articles and post that i read, some say that i have to add to all = classes, that i want to do the log, some lines as the import of the log4net and = methots that do the log…
Is there any way to only configure a file like log4j?

thanks for the help.

 

P.S: i’m using ASP.NET = 2.0

 

 

------_=_NextPart_001_01C7E97E.B73AB934--