You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4net-user@logging.apache.org by Wolfgang Trog <wo...@wollinet.com> on 2009/07/31 16:15:28 UTC

Defer file creation

Hi Everbody,

 

I'm looking for a way to defer the creation of the log file until the first
entry is logged. I want to use log4net for writing protocols for jobs that
can be executed in my application. With my current configuration the file is
created during startup which makes no sense if the job doesn't run.  

 

My current configuration:

 

      <appender name="." type="log4net.Appender.RollingFileAppender">

        <file value="....." />

        <appendToFile value="false" />

        <rollingStyle value="Date" />

        <datePattern value="yyyy_MM_dd.\tx\t" />

        <staticLogFileName value="false" />

        <threshold value="INFO" />

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

          <conversionPattern value="%date;%level;%m%n" />

        </layout>

      </appender>

 

One possibility seems to be to generate the appender programmatically, but
then I lose a lot of flexibility. Another one is writing my own appender (or
subclassing an existing one). Is there another way ?

 

Any help is appreciated,

Wolfgang

 


RE: Defer file creation

Posted by Wolfgang Trog <wo...@wollinet.com>.
I want to create protocols for jobs that can be executed in our application,
preferably one file per job and execution. But I don't want a file, if the
job is not executed. The jobs are only executed once a month for example. 

 

Thx for the quick response !

 

Wolfgang

 

 

From: Karim Bourouba [mailto:karym6@hotmail.com] 
Sent: Freitag, 31. Juli 2009 17:06
To: log4net-user@logging.apache.org
Subject: RE: Defer file creation

 


Hi There, 

  

I dont think I have an answer to your question just now - but can I ask why
you would prefer to defer creating the log file?



  

  _____  

From: wolfgang@wollinet.com
To: log4net-user@logging.apache.org
Subject: Defer file creation
Date: Fri, 31 Jul 2009 16:15:28 +0200

Hi Everbody,

 

I'm looking for a way to defer the creation of the log file until the first
entry is logged. I want to use log4net for writing protocols for jobs that
can be executed in my application. With my current configuration the file is
created during startup which makes no sense if the job doesn't run.  

 

My current configuration:

 

      <appender name="." type="log4net.Appender.RollingFileAppender">

        <file value="....." />

        <appendToFile value="false" />

        <rollingStyle value="Date" />

        <datePattern value="yyyy_MM_dd.\tx\t" />

        <staticLogFileName value="false" />

        <threshold value="INFO" />

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

          <conversionPattern value="%date;%level;%m%n" />

        </layout>

      </appender>

 

One possibility seems to be to generate the appender programmatically, but
then I lose a lot of flexibility. Another one is writing my own appender (or
subclassing an existing one). Is there another way ?

 

Any help is appreciated,

Wolfgang

 

 

  _____  

Share your memories online with anyone you want. Learn
<http://clk.atdmt.com/UKM/go/134665338/direct/01/>  more.


RE: Defer file creation

Posted by Karim Bourouba <ka...@hotmail.com>.
My only reason for suggesting it is that you can use it to connect different logging frameworks together. This could be useful for you with the system you are proposing.



 



From: wolfgang@wollinet.com
To: log4net-user@logging.apache.org
Subject: RE: Defer file creation
Date: Tue, 4 Aug 2009 11:01:42 +0200







Not really, since we also use NHibernate, we didn’t look at anything else. But I’ll give it a try. Thx for the hint.
 
Wolfgang
 
 


From: Karim Bourouba [mailto:karym6@hotmail.com] 
Sent: Dienstag, 4. August 2009 10:57
To: log4net-user@logging.apache.org
Subject: RE: Defer file creation
 
Hi Wolfgang,
 
have you considered look at the common logging infrastructure at all? It can work with Log4Net and could be quite useful for you.
 
BR
-
Karim


 



From: wolfgang@wollinet.com
To: log4net-user@logging.apache.org
Subject: RE: Defer file creation
Date: Tue, 4 Aug 2009 10:35:48 +0200

Hi Ross, all
 
some more details about my setup:
 
-          WinForm application
-          Use of Windows Workflow Foundation for customer specific jobs
 
We use log4net for “normal” application logging. Now I need a solution for generating protocols for the jobs (workflows), meaning, which action were made, errors, and so on. These jobs run maybe once a week, a month or so. Each job should get its own protocol file. My decision for using log4net for that, too, was primarily based on the flexibility log4net offers for defining what gets logged and where. I can activate tracing for these jobs on the fly and I can switch to a different appender and write everything to the database. Currently there is no real process in “analyzing” the protocols. The customers simply want them and sometimes we need them for debugging.
 
I’m fine with using my “own” appender, I was just looking if I missed some small configuration value or something like that.
 
Thx to all for the suggestions and quick responses,
Wolfgang
 
 
 

From: Ross Hinkley [mailto:rosshinkley@gmail.com] 
Sent: Montag, 3. August 2009 14:19
To: Log4NET User
Subject: Re: Defer file creation
 
Wolfgang,

If you're separating trace information from activity information, then yes, my (somewhat trite) solution is insufficient.  As noted, it is a bit of a hack.  The custom appender solution is probably preferable.

Are you using the same logfile for every job?  That seems a touch awkward to me (more so than one per job), but maybe for your implementation it fits.

After these jobs are run and the log files are written, what's your process after that?  Do you go in and look to see if any files were made, or is there some automated notification process?  If it's the latter, I really like Karim's idea - presumably, you'd have some job set up to let you know there were log files; why not simply run a database report instead?

-Ross

On Mon, Aug 3, 2009 at 2:19 AM, Wolfgang Trog <wo...@wollinet.com> wrote:


Karim, no worries. About the DB … in fact I want to use the flexibility of log4net, to decide where the logs should go  (file and/or database), to change the log level on the fly and to separate activities form trace information. So it’s much easier for me, to change the appender (where I simply have to comment one line) than to write the code for writing it to the database and then to a log file.
 
Thx,
Wolfgang
   
 


From: Karim Bourouba [mailto:karym6@hotmail.com] 
Sent: Montag, 3. August 2009 09:00



To: log4net-user@logging.apache.org
Subject: RE: Defer file creation


 

Hi Wolfgang, 
  
sorry, but I havent really been paying much attention to this thread I am afraid. Is it not possible for you to write your log to a DB and then create logfiles from that? It seems a bit long-winded, but could be a solution as opposed to creating your own appender.



  



From: wolfgang@wollinet.com
To: log4net-user@logging.apache.org
Subject: RE: Defer file creation
Date: Mon, 3 Aug 2009 08:43:56 +0200

Hi Ross,
 
thx for the suggestion. I can’t defer the logger configuration, because I need basic logging from the beginning. I could probably use a separate log file for each job, but that seems a bit awkward. I think I’ll stick to the “write my own appender” approach for the moment.
 
Thx,
Wolfgang
 
 

From: Ross Hinkley [mailto:rosshinkley@gmail.com] 
Sent: Freitag, 31. Juli 2009 18:02
To: Log4NET User
Subject: Re: Defer file creation
 
Off the top of my head: doesn't the logfile only get generated if the logger is configured?  Rather than deferring the log file getting created, couldn't you defer execution of the configurator?

You could use a getter to run the configurator, like the following:

private static ILog _log = LogManager.GetLogger(typeof(Program));
public static ILog log
{
    get
    {
        if(!log4net.LogManager.GetRepository().Configured)
            log4net.Config.XmlConfigurator.Configure(new FileInfo(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile));
        return _log;
    }
}

This way, your logger will only get configured (and the file subsequently made) if something is logged.

Is it a hack?  Absolutely.  But it's the quickest way I could think of to answer your question. :)

-Ross

On Fri, Jul 31, 2009 at 10:23 AM, Wolfgang Trog <wo...@wollinet.com> wrote:


For now, I  tried a quick hack and modified FileAppender and it’s now working like I want:
 
override public void ActivateOptions()
        {
            …
 
            if ( m_fileName != null )
            {
                //SafeOpenFile( m_fileName, m_appendToFile );
            }
            else
            {
                LogLog.Warn( "FileAppender: File option not set for appender [" + Name + "]." );
                LogLog.Warn( "FileAppender: Are you using FileAppender instead of ConsoleAppender?" );
            }
        }
 
I would prefer a solution, where I don’t have to use my own appender, but at least I have a workaround.
 
Regards,
Wolfgang
 
 


From: Wolfgang Trog [mailto:wolfgang@wollinet.com] 
Sent: Freitag, 31. Juli 2009 17:15
To: 'Log4NET User'


Subject: RE: Defer file creation
 
I want to create protocols for jobs that can be executed in our application, preferably one file per job and execution. But I don’t want a file, if the job is not executed. The jobs are only executed once a month for example. 

 
Thx for the quick response !
 
Wolfgang
 
 


From: Karim Bourouba [mailto:karym6@hotmail.com] 

Sent: Freitag, 31. Juli 2009 17:06

To: log4net-user@logging.apache.org
Subject: RE: Defer file creation


 

Hi There, 
  
I dont think I have an answer to your question just now - but can I ask why you would prefer to defer creating the log file?



  



From: wolfgang@wollinet.com
To: log4net-user@logging.apache.org
Subject: Defer file creation
Date: Fri, 31 Jul 2009 16:15:28 +0200

Hi Everbody,
 
I’m looking for a way to defer the creation of the log file until the first entry is logged. I want to use log4net for writing protocols for jobs that can be executed in my application. With my current configuration the file is created during startup which makes no sense if the job doesn’t run.  
 
My current configuration:
 
      <appender name="…" type="log4net.Appender.RollingFileAppender">
        <file value="....." />
        <appendToFile value="false" />
        <rollingStyle value="Date" />
        <datePattern value="yyyy_MM_dd.\tx\t" />
        <staticLogFileName value="false" />
        <threshold value="INFO" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%date;%level;%m%n" />
        </layout>
      </appender>
 
One possibility seems to be to generate the appender programmatically, but then I lose a lot of flexibility. Another one is writing my own appender (or subclassing an existing one). Is there another way ?
 
Any help is appreciated,
Wolfgang
 
 



Share your memories online with anyone you want. Learn more.
 
 



Windows Live Messenger: Thanks for 10 great years—enjoy free winks and emoticons. Get Them Now
 
 



Celebrate a decade of Messenger with free winks, emoticons, display pics, and more. Get Them Now
_________________________________________________________________

Upgrade to Internet Explorer 8 Optimised for MSN.  

http://extras.uk.msn.com/internet-explorer-8/?ocid=T010MSN07A0716U

RE: Defer file creation

Posted by Wolfgang Trog <wo...@wollinet.com>.
Not really, since we also use NHibernate, we didn't look at anything else.
But I'll give it a try. Thx for the hint.

 

Wolfgang

 

 

From: Karim Bourouba [mailto:karym6@hotmail.com] 
Sent: Dienstag, 4. August 2009 10:57
To: log4net-user@logging.apache.org
Subject: RE: Defer file creation

 

Hi Wolfgang,
 
have you considered look at the common logging infrastructure at all? It can
work with Log4Net and could be quite useful for you.
 
BR
-
Karim


 

  _____  

From: wolfgang@wollinet.com
To: log4net-user@logging.apache.org
Subject: RE: Defer file creation
Date: Tue, 4 Aug 2009 10:35:48 +0200

Hi Ross, all

 

some more details about my setup:

 

-          WinForm application

-          Use of Windows Workflow Foundation for customer specific jobs

 

We use log4net for "normal" application logging. Now I need a solution for
generating protocols for the jobs (workflows), meaning, which action were
made, errors, and so on. These jobs run maybe once a week, a month or so.
Each job should get its own protocol file. My decision for using log4net for
that, too, was primarily based on the flexibility log4net offers for
defining what gets logged and where. I can activate tracing for these jobs
on the fly and I can switch to a different appender and write everything to
the database. Currently there is no real process in "analyzing" the
protocols. The customers simply want them and sometimes we need them for
debugging.

 

I'm fine with using my "own" appender, I was just looking if I missed some
small configuration value or something like that.

 

Thx to all for the suggestions and quick responses,

Wolfgang

 

 

 

From: Ross Hinkley [mailto:rosshinkley@gmail.com] 
Sent: Montag, 3. August 2009 14:19
To: Log4NET User
Subject: Re: Defer file creation

 

Wolfgang,

If you're separating trace information from activity information, then yes,
my (somewhat trite) solution is insufficient.  As noted, it is a bit of a
hack.  The custom appender solution is probably preferable.

Are you using the same logfile for every job?  That seems a touch awkward to
me (more so than one per job), but maybe for your implementation it fits.

After these jobs are run and the log files are written, what's your process
after that?  Do you go in and look to see if any files were made, or is
there some automated notification process?  If it's the latter, I really
like Karim's idea - presumably, you'd have some job set up to let you know
there were log files; why not simply run a database report instead?

-Ross

On Mon, Aug 3, 2009 at 2:19 AM, Wolfgang Trog <wo...@wollinet.com> wrote:

Karim, no worries. About the DB . in fact I want to use the flexibility of
log4net, to decide where the logs should go  (file and/or database), to
change the log level on the fly and to separate activities form trace
information. So it's much easier for me, to change the appender (where I
simply have to comment one line) than to write the code for writing it to
the database and then to a log file.
 
Thx,
Wolfgang
   
 

From: Karim Bourouba [mailto:karym6@hotmail.com] 
Sent: Montag, 3. August 2009 09:00


To: log4net-user@logging.apache.org
Subject: RE: Defer file creation

 

Hi Wolfgang, 
  
sorry, but I havent really been paying much attention to this thread I am
afraid. Is it not possible for you to write your log to a DB and then create
logfiles from that? It seems a bit long-winded, but could be a solution as
opposed to creating your own appender.



  

  _____  

From: wolfgang@wollinet.com
To: log4net-user@logging.apache.org
Subject: RE: Defer file creation
Date: Mon, 3 Aug 2009 08:43:56 +0200

Hi Ross,
 
thx for the suggestion. I can't defer the logger configuration, because I
need basic logging from the beginning. I could probably use a separate log
file for each job, but that seems a bit awkward. I think I'll stick to the
"write my own appender" approach for the moment.
 
Thx,
Wolfgang
 
 

From: Ross Hinkley [mailto:rosshinkley@gmail.com] 
Sent: Freitag, 31. Juli 2009 18:02
To: Log4NET User
Subject: Re: Defer file creation

 

Off the top of my head: doesn't the logfile only get generated if the logger
is configured?  Rather than deferring the log file getting created, couldn't
you defer execution of the configurator?

You could use a getter to run the configurator, like the following:

private static ILog _log = LogManager.GetLogger(typeof(Program));
public static ILog log
{
    get
    {
        if(!log4net.LogManager.GetRepository().Configured)
            log4net.Config.XmlConfigurator.Configure(new
FileInfo(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile));
        return _log;
    }
}

This way, your logger will only get configured (and the file subsequently
made) if something is logged.

Is it a hack?  Absolutely.  But it's the quickest way I could think of to
answer your question. :)

-Ross

On Fri, Jul 31, 2009 at 10:23 AM, Wolfgang Trog <wo...@wollinet.com>
wrote:

For now, I  tried a quick hack and modified FileAppender and it's now
working like I want:
 
override public void ActivateOptions()
        {
            .
 
            if ( m_fileName != null )
            {
                //SafeOpenFile( m_fileName, m_appendToFile );
            }
            else
            {
                LogLog.Warn( "FileAppender: File option not set for appender
[" + Name + "]." );
                LogLog.Warn( "FileAppender: Are you using FileAppender
instead of ConsoleAppender?" );
            }
        }
 
I would prefer a solution, where I don't have to use my own appender, but at
least I have a workaround.
 
Regards,
Wolfgang
 
 

From: Wolfgang Trog [mailto:wolfgang@wollinet.com] 
Sent: Freitag, 31. Juli 2009 17:15
To: 'Log4NET User'


Subject: RE: Defer file creation

 
I want to create protocols for jobs that can be executed in our application,
preferably one file per job and execution. But I don't want a file, if the
job is not executed. The jobs are only executed once a month for example. 

 
Thx for the quick response !
 
Wolfgang
 
 

From: Karim Bourouba [mailto:karym6@hotmail.com] 

Sent: Freitag, 31. Juli 2009 17:06

To: log4net-user@logging.apache.org

Subject: RE: Defer file creation

 

Hi There, 
  
I dont think I have an answer to your question just now - but can I ask why
you would prefer to defer creating the log file?



  

  _____  

From: wolfgang@wollinet.com
To: log4net-user@logging.apache.org
Subject: Defer file creation
Date: Fri, 31 Jul 2009 16:15:28 +0200

Hi Everbody,
 
I'm looking for a way to defer the creation of the log file until the first
entry is logged. I want to use log4net for writing protocols for jobs that
can be executed in my application. With my current configuration the file is
created during startup which makes no sense if the job doesn't run.  
 
My current configuration:
 
      <appender name="." type="log4net.Appender.RollingFileAppender">
        <file value="....." />
        <appendToFile value="false" />
        <rollingStyle value="Date" />
        <datePattern value="yyyy_MM_dd.\tx\t" />
        <staticLogFileName value="false" />
        <threshold value="INFO" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%date;%level;%m%n" />
        </layout>
      </appender>
 
One possibility seems to be to generate the appender programmatically, but
then I lose a lot of flexibility. Another one is writing my own appender (or
subclassing an existing one). Is there another way ?
 
Any help is appreciated,
Wolfgang
 

 

  _____  

Share your memories online with anyone you want. Learn more.

 

 

  _____  

Windows Live Messenger: Thanks for 10 great years-enjoy free winks and
emoticons. Get Them Now

 

 

  _____  

Celebrate a decade of Messenger with free winks, emoticons, display pics,
and more. Get Them <http://clk.atdmt.com/UKM/go/157562755/direct/01/>  Now


RE: Defer file creation

Posted by Karim Bourouba <ka...@hotmail.com>.
Hi Wolfgang,

 

have you considered look at the common logging infrastructure at all? It can work with Log4Net and could be quite useful for you.

 

BR

-

Karim


 




From: wolfgang@wollinet.com
To: log4net-user@logging.apache.org
Subject: RE: Defer file creation
Date: Tue, 4 Aug 2009 10:35:48 +0200







Hi Ross, all
 
some more details about my setup:
 
-          WinForm application
-          Use of Windows Workflow Foundation for customer specific jobs
 
We use log4net for “normal” application logging. Now I need a solution for generating protocols for the jobs (workflows), meaning, which action were made, errors, and so on. These jobs run maybe once a week, a month or so. Each job should get its own protocol file. My decision for using log4net for that, too, was primarily based on the flexibility log4net offers for defining what gets logged and where. I can activate tracing for these jobs on the fly and I can switch to a different appender and write everything to the database. Currently there is no real process in “analyzing” the protocols. The customers simply want them and sometimes we need them for debugging.
 
I’m fine with using my “own” appender, I was just looking if I missed some small configuration value or something like that.
 
Thx to all for the suggestions and quick responses,
Wolfgang
 
 
 

From: Ross Hinkley [mailto:rosshinkley@gmail.com] 
Sent: Montag, 3. August 2009 14:19
To: Log4NET User
Subject: Re: Defer file creation
 
Wolfgang,

If you're separating trace information from activity information, then yes, my (somewhat trite) solution is insufficient.  As noted, it is a bit of a hack.  The custom appender solution is probably preferable.

Are you using the same logfile for every job?  That seems a touch awkward to me (more so than one per job), but maybe for your implementation it fits.

After these jobs are run and the log files are written, what's your process after that?  Do you go in and look to see if any files were made, or is there some automated notification process?  If it's the latter, I really like Karim's idea - presumably, you'd have some job set up to let you know there were log files; why not simply run a database report instead?

-Ross

On Mon, Aug 3, 2009 at 2:19 AM, Wolfgang Trog <wo...@wollinet.com> wrote:


Karim, no worries. About the DB … in fact I want to use the flexibility of log4net, to decide where the logs should go  (file and/or database), to change the log level on the fly and to separate activities form trace information. So it’s much easier for me, to change the appender (where I simply have to comment one line) than to write the code for writing it to the database and then to a log file.

 

Thx,

Wolfgang

   

 



From: Karim Bourouba [mailto:karym6@hotmail.com] 
Sent: Montag, 3. August 2009 09:00




To: log4net-user@logging.apache.org
Subject: RE: Defer file creation


 


Hi Wolfgang, 

  

sorry, but I havent really been paying much attention to this thread I am afraid. Is it not possible for you to write your log to a DB and then create logfiles from that? It seems a bit long-winded, but could be a solution as opposed to creating your own appender.



  




From: wolfgang@wollinet.com
To: log4net-user@logging.apache.org
Subject: RE: Defer file creation
Date: Mon, 3 Aug 2009 08:43:56 +0200

Hi Ross,

 

thx for the suggestion. I can’t defer the logger configuration, because I need basic logging from the beginning. I could probably use a separate log file for each job, but that seems a bit awkward. I think I’ll stick to the “write my own appender” approach for the moment.

 

Thx,

Wolfgang

 

 


From: Ross Hinkley [mailto:rosshinkley@gmail.com] 
Sent: Freitag, 31. Juli 2009 18:02
To: Log4NET User
Subject: Re: Defer file creation

 

Off the top of my head: doesn't the logfile only get generated if the logger is configured?  Rather than deferring the log file getting created, couldn't you defer execution of the configurator?

You could use a getter to run the configurator, like the following:

private static ILog _log = LogManager.GetLogger(typeof(Program));
public static ILog log
{
    get
    {
        if(!log4net.LogManager.GetRepository().Configured)
            log4net.Config.XmlConfigurator.Configure(new FileInfo(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile));
        return _log;
    }
}

This way, your logger will only get configured (and the file subsequently made) if something is logged.

Is it a hack?  Absolutely.  But it's the quickest way I could think of to answer your question. :)

-Ross

On Fri, Jul 31, 2009 at 10:23 AM, Wolfgang Trog <wo...@wollinet.com> wrote:



For now, I  tried a quick hack and modified FileAppender and it’s now working like I want:
 
override public void ActivateOptions()
        {
            …
 
            if ( m_fileName != null )
            {
                //SafeOpenFile( m_fileName, m_appendToFile );
            }
            else
            {
                LogLog.Warn( "FileAppender: File option not set for appender [" + Name + "]." );
                LogLog.Warn( "FileAppender: Are you using FileAppender instead of ConsoleAppender?" );
            }
        }
 
I would prefer a solution, where I don’t have to use my own appender, but at least I have a workaround.
 
Regards,
Wolfgang
 
 



From: Wolfgang Trog [mailto:wolfgang@wollinet.com] 
Sent: Freitag, 31. Juli 2009 17:15
To: 'Log4NET User'



Subject: RE: Defer file creation

 
I want to create protocols for jobs that can be executed in our application, preferably one file per job and execution. But I don’t want a file, if the job is not executed. The jobs are only executed once a month for example. 


 
Thx for the quick response !
 
Wolfgang
 
 



From: Karim Bourouba [mailto:karym6@hotmail.com] 


Sent: Freitag, 31. Juli 2009 17:06


To: log4net-user@logging.apache.org

Subject: RE: Defer file creation



 

Hi There, 
  
I dont think I have an answer to your question just now - but can I ask why you would prefer to defer creating the log file?



  




From: wolfgang@wollinet.com
To: log4net-user@logging.apache.org
Subject: Defer file creation
Date: Fri, 31 Jul 2009 16:15:28 +0200

Hi Everbody,
 
I’m looking for a way to defer the creation of the log file until the first entry is logged. I want to use log4net for writing protocols for jobs that can be executed in my application. With my current configuration the file is created during startup which makes no sense if the job doesn’t run.  
 
My current configuration:
 
      <appender name="…" type="log4net.Appender.RollingFileAppender">
        <file value="....." />
        <appendToFile value="false" />
        <rollingStyle value="Date" />
        <datePattern value="yyyy_MM_dd.\tx\t" />
        <staticLogFileName value="false" />
        <threshold value="INFO" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%date;%level;%m%n" />
        </layout>
      </appender>
 
One possibility seems to be to generate the appender programmatically, but then I lose a lot of flexibility. Another one is writing my own appender (or subclassing an existing one). Is there another way ?
 
Any help is appreciated,
Wolfgang
 

 




Share your memories online with anyone you want. Learn more.

 

 




Windows Live Messenger: Thanks for 10 great years—enjoy free winks and emoticons. Get Them Now

 
_________________________________________________________________

Upgrade to Internet Explorer 8 Optimised for MSN.  

http://extras.uk.msn.com/internet-explorer-8/?ocid=T010MSN07A0716U

RE: Defer file creation

Posted by Wolfgang Trog <wo...@wollinet.com>.
Hi Ross, all

 

some more details about my setup:

 

-          WinForm application

-          Use of Windows Workflow Foundation for customer specific jobs

 

We use log4net for "normal" application logging. Now I need a solution for
generating protocols for the jobs (workflows), meaning, which action were
made, errors, and so on. These jobs run maybe once a week, a month or so.
Each job should get its own protocol file. My decision for using log4net for
that, too, was primarily based on the flexibility log4net offers for
defining what gets logged and where. I can activate tracing for these jobs
on the fly and I can switch to a different appender and write everything to
the database. Currently there is no real process in "analyzing" the
protocols. The customers simply want them and sometimes we need them for
debugging.

 

I'm fine with using my "own" appender, I was just looking if I missed some
small configuration value or something like that.

 

Thx to all for the suggestions and quick responses,

Wolfgang

 

 

 

From: Ross Hinkley [mailto:rosshinkley@gmail.com] 
Sent: Montag, 3. August 2009 14:19
To: Log4NET User
Subject: Re: Defer file creation

 

Wolfgang,

If you're separating trace information from activity information, then yes,
my (somewhat trite) solution is insufficient.  As noted, it is a bit of a
hack.  The custom appender solution is probably preferable.

Are you using the same logfile for every job?  That seems a touch awkward to
me (more so than one per job), but maybe for your implementation it fits.

After these jobs are run and the log files are written, what's your process
after that?  Do you go in and look to see if any files were made, or is
there some automated notification process?  If it's the latter, I really
like Karim's idea - presumably, you'd have some job set up to let you know
there were log files; why not simply run a database report instead?

-Ross

On Mon, Aug 3, 2009 at 2:19 AM, Wolfgang Trog <wo...@wollinet.com> wrote:

Karim, no worries. About the DB . in fact I want to use the flexibility of
log4net, to decide where the logs should go  (file and/or database), to
change the log level on the fly and to separate activities form trace
information. So it's much easier for me, to change the appender (where I
simply have to comment one line) than to write the code for writing it to
the database and then to a log file.

 

Thx,

Wolfgang

   

 

From: Karim Bourouba [mailto:karym6@hotmail.com] 
Sent: Montag, 3. August 2009 09:00


To: log4net-user@logging.apache.org
Subject: RE: Defer file creation

 


Hi Wolfgang, 

  

sorry, but I havent really been paying much attention to this thread I am
afraid. Is it not possible for you to write your log to a DB and then create
logfiles from that? It seems a bit long-winded, but could be a solution as
opposed to creating your own appender.



  

  _____  

From: wolfgang@wollinet.com
To: log4net-user@logging.apache.org
Subject: RE: Defer file creation
Date: Mon, 3 Aug 2009 08:43:56 +0200

Hi Ross,

 

thx for the suggestion. I can't defer the logger configuration, because I
need basic logging from the beginning. I could probably use a separate log
file for each job, but that seems a bit awkward. I think I'll stick to the
"write my own appender" approach for the moment.

 

Thx,

Wolfgang

 

 

From: Ross Hinkley [mailto:rosshinkley@gmail.com] 
Sent: Freitag, 31. Juli 2009 18:02
To: Log4NET User
Subject: Re: Defer file creation

 

Off the top of my head: doesn't the logfile only get generated if the logger
is configured?  Rather than deferring the log file getting created, couldn't
you defer execution of the configurator?

You could use a getter to run the configurator, like the following:

private static ILog _log = LogManager.GetLogger(typeof(Program));
public static ILog log
{
    get
    {
        if(!log4net.LogManager.GetRepository().Configured)
            log4net.Config.XmlConfigurator.Configure(new
FileInfo(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile));
        return _log;
    }
}

This way, your logger will only get configured (and the file subsequently
made) if something is logged.

Is it a hack?  Absolutely.  But it's the quickest way I could think of to
answer your question. :)

-Ross

On Fri, Jul 31, 2009 at 10:23 AM, Wolfgang Trog <wo...@wollinet.com>
wrote:

For now, I  tried a quick hack and modified FileAppender and it's now
working like I want:
 
override public void ActivateOptions()
        {
            .
 
            if ( m_fileName != null )
            {
                //SafeOpenFile( m_fileName, m_appendToFile );
            }
            else
            {
                LogLog.Warn( "FileAppender: File option not set for appender
[" + Name + "]." );
                LogLog.Warn( "FileAppender: Are you using FileAppender
instead of ConsoleAppender?" );
            }
        }
 
I would prefer a solution, where I don't have to use my own appender, but at
least I have a workaround.
 
Regards,
Wolfgang
 
 

From: Wolfgang Trog [mailto:wolfgang@wollinet.com] 
Sent: Freitag, 31. Juli 2009 17:15
To: 'Log4NET User'


Subject: RE: Defer file creation

 
I want to create protocols for jobs that can be executed in our application,
preferably one file per job and execution. But I don't want a file, if the
job is not executed. The jobs are only executed once a month for example. 

 
Thx for the quick response !
 
Wolfgang
 
 

From: Karim Bourouba [mailto:karym6@hotmail.com] 

Sent: Freitag, 31. Juli 2009 17:06

To: log4net-user@logging.apache.org

Subject: RE: Defer file creation

 

Hi There, 
  
I dont think I have an answer to your question just now - but can I ask why
you would prefer to defer creating the log file?



  

  _____  

From: wolfgang@wollinet.com
To: log4net-user@logging.apache.org
Subject: Defer file creation
Date: Fri, 31 Jul 2009 16:15:28 +0200

Hi Everbody,
 
I'm looking for a way to defer the creation of the log file until the first
entry is logged. I want to use log4net for writing protocols for jobs that
can be executed in my application. With my current configuration the file is
created during startup which makes no sense if the job doesn't run.  
 
My current configuration:
 
      <appender name="." type="log4net.Appender.RollingFileAppender">
        <file value="....." />
        <appendToFile value="false" />
        <rollingStyle value="Date" />
        <datePattern value="yyyy_MM_dd.\tx\t" />
        <staticLogFileName value="false" />
        <threshold value="INFO" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%date;%level;%m%n" />
        </layout>
      </appender>
 
One possibility seems to be to generate the appender programmatically, but
then I lose a lot of flexibility. Another one is writing my own appender (or
subclassing an existing one). Is there another way ?
 
Any help is appreciated,
Wolfgang
 

 

  _____  

Share your memories online with anyone you want. Learn more.

 

 

  _____  

Windows Live Messenger: Thanks for 10 great years-enjoy free winks and
emoticons. Get <http://clk.atdmt.com/UKM/go/157562755/direct/01/>  Them Now

 


Re: Defer file creation

Posted by Ross Hinkley <ro...@gmail.com>.
Wolfgang,

If you're separating trace information from activity information, then yes,
my (somewhat trite) solution is insufficient.  As noted, it is a bit of a
hack.  The custom appender solution is probably preferable.

Are you using the same logfile for every job?  That seems a touch awkward to
me (more so than one per job), but maybe for your implementation it fits.

After these jobs are run and the log files are written, what's your process
after that?  Do you go in and look to see if any files were made, or is
there some automated notification process?  If it's the latter, I really
like Karim's idea - presumably, you'd have some job set up to let you know
there were log files; why not simply run a database report instead?

-Ross

On Mon, Aug 3, 2009 at 2:19 AM, Wolfgang Trog <wo...@wollinet.com> wrote:

>  Karim, no worries. About the DB … in fact I want to use the flexibility
> of log4net, to decide where the logs should go  (file and/or database), to
> change the log level on the fly and to separate activities form trace
> information. So it’s much easier for me, to change the appender (where I
> simply have to comment one line) than to write the code for writing it to
> the database and then to a log file.
>
>
>
> Thx,
>
> Wolfgang
>
>
>
>
>
> *From:* Karim Bourouba [mailto:karym6@hotmail.com]
> *Sent:* Montag, 3. August 2009 09:00
>
> *To:* log4net-user@logging.apache.org
> *Subject:* RE: Defer file creation
>
>
>
>
> Hi Wolfgang,
>
>
>
> sorry, but I havent really been paying much attention to this thread I am
> afraid. Is it not possible for you to write your log to a DB and then create
> logfiles from that? It seems a bit long-winded, but could be a solution as
> opposed to creating your own appender.
>
>
>
>
>  ------------------------------
>
> From: wolfgang@wollinet.com
> To: log4net-user@logging.apache.org
> Subject: RE: Defer file creation
> Date: Mon, 3 Aug 2009 08:43:56 +0200
>
> Hi Ross,
>
>
>
> thx for the suggestion. I can’t defer the logger configuration, because I
> need basic logging from the beginning. I could probably use a separate log
> file for each job, but that seems a bit awkward. I think I’ll stick to the
> “write my own appender” approach for the moment.
>
>
>
> Thx,
>
> Wolfgang
>
>
>
>
>
> *From:* Ross Hinkley [mailto:rosshinkley@gmail.com]
> *Sent:* Freitag, 31. Juli 2009 18:02
> *To:* Log4NET User
> *Subject:* Re: Defer file creation
>
>
>
> Off the top of my head: doesn't the logfile only get generated if the
> logger is configured?  Rather than deferring the log file getting created,
> couldn't you defer execution of the configurator?
>
> You could use a getter to run the configurator, like the following:
>
> private static ILog _log = LogManager.GetLogger(typeof(Program));
> public static ILog log
> {
>     get
>     {
>         if(!log4net.LogManager.GetRepository().Configured)
>             log4net.Config.XmlConfigurator.Configure(new
> FileInfo(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile));
>         return _log;
>     }
> }
>
> This way, your logger will only get configured (and the file subsequently
> made) if something is logged.
>
> Is it a hack?  Absolutely.  But it's the quickest way I could think of to
> answer your question. :)
>
> -Ross
>
> On Fri, Jul 31, 2009 at 10:23 AM, Wolfgang Trog <wo...@wollinet.com>
> wrote:
>
> For now, I  tried a quick hack and modified FileAppender and it’s now
> working like I want:
>
> override public void ActivateOptions()
>         {
>             …
>
>             if ( m_fileName != null )
>             {
>                 //SafeOpenFile( m_fileName, m_appendToFile );
>             }
>             else
>             {
>                 LogLog.Warn( "FileAppender: File option not set for
> appender [" + Name + "]." );
>                 LogLog.Warn( "FileAppender: Are you using FileAppender
> instead of ConsoleAppender?" );
>             }
>         }
>
> I would prefer a solution, where I don’t have to use my own appender, but
> at least I have a workaround.
>
> Regards,
> Wolfgang
>
>
>
> *From:* Wolfgang Trog [mailto:wolfgang@wollinet.com]
> *Sent:* Freitag, 31. Juli 2009 17:15
> *To:* 'Log4NET User'
>
>
> *Subject:* RE: Defer file creation
>
>
> I want to create protocols for jobs that can be executed in our
> application, preferably one file per job and execution. But I don’t want a
> file, if the job is not executed. The jobs are only executed once a month
> for example.
>
>
> Thx for the quick response !
>
> Wolfgang
>
>
>
> *From:* Karim Bourouba [mailto:karym6@hotmail.com]
>
> *Sent:* Freitag, 31. Juli 2009 17:06
>
> *To:* log4net-user@logging.apache.org
>
> *Subject:* RE: Defer file creation
>
>
>
> Hi There,
>
> I dont think I have an answer to your question just now - but can I ask why
> you would prefer to defer creating the log file?
>
>
>
>
>  ------------------------------
>
> From: wolfgang@wollinet.com
> To: log4net-user@logging.apache.org
> Subject: Defer file creation
> Date: Fri, 31 Jul 2009 16:15:28 +0200
>
> Hi Everbody,
>
> I’m looking for a way to defer the creation of the log file until the first
> entry is logged. I want to use log4net for writing protocols for jobs that
> can be executed in my application. With my current configuration the file is
> created during startup which makes no sense if the job doesn’t run.
>
> My current configuration:
>
>       <appender name="…" type="log4net.Appender.RollingFileAppender">
>         <file value="....." />
>         <appendToFile value="false" />
>         <rollingStyle value="Date" />
>         <datePattern value="yyyy_MM_dd.\tx\t" />
>         <staticLogFileName value="false" />
>         <threshold value="INFO" />
>         <layout type="log4net.Layout.PatternLayout">
>           <conversionPattern value="%date;%level;%m%n" />
>         </layout>
>       </appender>
>
> One possibility seems to be to generate the appender programmatically, but
> then I lose a lot of flexibility. Another one is writing my own appender (or
> subclassing an existing one). Is there another way ?
>
> Any help is appreciated,
> Wolfgang
>
>
>
>  ------------------------------
>
> Share your memories online with anyone you want. Learn more.
>
>
>
>
>  ------------------------------
>
> Windows Live Messenger: Thanks for 10 great years—enjoy free winks and
> emoticons. Get Them Now <http://clk.atdmt.com/UKM/go/157562755/direct/01/>
>

RE: Defer file creation

Posted by Wolfgang Trog <wo...@wollinet.com>.
Karim, no worries. About the DB . in fact I want to use the flexibility of
log4net, to decide where the logs should go  (file and/or database), to
change the log level on the fly and to separate activities form trace
information. So it's much easier for me, to change the appender (where I
simply have to comment one line) than to write the code for writing it to
the database and then to a log file.

 

Thx,

Wolfgang

   

 

From: Karim Bourouba [mailto:karym6@hotmail.com] 
Sent: Montag, 3. August 2009 09:00
To: log4net-user@logging.apache.org
Subject: RE: Defer file creation

 


Hi Wolfgang, 

  

sorry, but I havent really been paying much attention to this thread I am
afraid. Is it not possible for you to write your log to a DB and then create
logfiles from that? It seems a bit long-winded, but could be a solution as
opposed to creating your own appender.



  

  _____  

From: wolfgang@wollinet.com
To: log4net-user@logging.apache.org
Subject: RE: Defer file creation
Date: Mon, 3 Aug 2009 08:43:56 +0200

Hi Ross,

 

thx for the suggestion. I can't defer the logger configuration, because I
need basic logging from the beginning. I could probably use a separate log
file for each job, but that seems a bit awkward. I think I'll stick to the
"write my own appender" approach for the moment.

 

Thx,

Wolfgang

 

 

From: Ross Hinkley [mailto:rosshinkley@gmail.com] 
Sent: Freitag, 31. Juli 2009 18:02
To: Log4NET User
Subject: Re: Defer file creation

 

Off the top of my head: doesn't the logfile only get generated if the logger
is configured?  Rather than deferring the log file getting created, couldn't
you defer execution of the configurator?

You could use a getter to run the configurator, like the following:

private static ILog _log = LogManager.GetLogger(typeof(Program));
public static ILog log
{
    get
    {
        if(!log4net.LogManager.GetRepository().Configured)
            log4net.Config.XmlConfigurator.Configure(new
FileInfo(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile));
        return _log;
    }
}

This way, your logger will only get configured (and the file subsequently
made) if something is logged.

Is it a hack?  Absolutely.  But it's the quickest way I could think of to
answer your question. :)

-Ross

On Fri, Jul 31, 2009 at 10:23 AM, Wolfgang Trog <wo...@wollinet.com>
wrote:

For now, I  tried a quick hack and modified FileAppender and it's now
working like I want:
 
override public void ActivateOptions()
        {
            .
 
            if ( m_fileName != null )
            {
                //SafeOpenFile( m_fileName, m_appendToFile );
            }
            else
            {
                LogLog.Warn( "FileAppender: File option not set for appender
[" + Name + "]." );
                LogLog.Warn( "FileAppender: Are you using FileAppender
instead of ConsoleAppender?" );
            }
        }
 
I would prefer a solution, where I don't have to use my own appender, but at
least I have a workaround.
 
Regards,
Wolfgang
 
 

From: Wolfgang Trog [mailto:wolfgang@wollinet.com] 
Sent: Freitag, 31. Juli 2009 17:15
To: 'Log4NET User'


Subject: RE: Defer file creation

 
I want to create protocols for jobs that can be executed in our application,
preferably one file per job and execution. But I don't want a file, if the
job is not executed. The jobs are only executed once a month for example. 

 
Thx for the quick response !
 
Wolfgang
 
 

From: Karim Bourouba [mailto:karym6@hotmail.com] 

Sent: Freitag, 31. Juli 2009 17:06

To: log4net-user@logging.apache.org

Subject: RE: Defer file creation

 

Hi There, 
  
I dont think I have an answer to your question just now - but can I ask why
you would prefer to defer creating the log file?



  

  _____  

From: wolfgang@wollinet.com
To: log4net-user@logging.apache.org
Subject: Defer file creation
Date: Fri, 31 Jul 2009 16:15:28 +0200

Hi Everbody,
 
I'm looking for a way to defer the creation of the log file until the first
entry is logged. I want to use log4net for writing protocols for jobs that
can be executed in my application. With my current configuration the file is
created during startup which makes no sense if the job doesn't run.  
 
My current configuration:
 
      <appender name="." type="log4net.Appender.RollingFileAppender">
        <file value="....." />
        <appendToFile value="false" />
        <rollingStyle value="Date" />
        <datePattern value="yyyy_MM_dd.\tx\t" />
        <staticLogFileName value="false" />
        <threshold value="INFO" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%date;%level;%m%n" />
        </layout>
      </appender>
 
One possibility seems to be to generate the appender programmatically, but
then I lose a lot of flexibility. Another one is writing my own appender (or
subclassing an existing one). Is there another way ?
 
Any help is appreciated,
Wolfgang
 

 

  _____  

Share your memories online with anyone you want. Learn more.

 

 

  _____  

Windows Live Messenger: Thanks for 10 great years-enjoy free winks and
emoticons. Get Them <http://clk.atdmt.com/UKM/go/157562755/direct/01/>  Now


RE: Defer file creation

Posted by Karim Bourouba <ka...@hotmail.com>.

Hi Wolfgang,
 
sorry, but I havent really been paying much attention to this thread I am afraid. Is it not possible for you to write your log to a DB and then create logfiles from that? It seems a bit long-winded, but could be a solution as opposed to creating your own appender.



 



From: wolfgang@wollinet.com
To: log4net-user@logging.apache.org
Subject: RE: Defer file creation
Date: Mon, 3 Aug 2009 08:43:56 +0200







Hi Ross,
 
thx for the suggestion. I can’t defer the logger configuration, because I need basic logging from the beginning. I could probably use a separate log file for each job, but that seems a bit awkward. I think I’ll stick to the “write my own appender” approach for the moment.
 
Thx,
Wolfgang
 
 

From: Ross Hinkley [mailto:rosshinkley@gmail.com] 
Sent: Freitag, 31. Juli 2009 18:02
To: Log4NET User
Subject: Re: Defer file creation
 
Off the top of my head: doesn't the logfile only get generated if the logger is configured?  Rather than deferring the log file getting created, couldn't you defer execution of the configurator?

You could use a getter to run the configurator, like the following:

private static ILog _log = LogManager.GetLogger(typeof(Program));
public static ILog log
{
    get
    {
        if(!log4net.LogManager.GetRepository().Configured)
            log4net.Config.XmlConfigurator.Configure(new FileInfo(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile));
        return _log;
    }
}

This way, your logger will only get configured (and the file subsequently made) if something is logged.

Is it a hack?  Absolutely.  But it's the quickest way I could think of to answer your question. :)

-Ross

On Fri, Jul 31, 2009 at 10:23 AM, Wolfgang Trog <wo...@wollinet.com> wrote:


For now, I  tried a quick hack and modified FileAppender and it’s now working like I want:

 

override public void ActivateOptions()

        {

            …

 

            if ( m_fileName != null )

            {

                //SafeOpenFile( m_fileName, m_appendToFile );

            }

            else

            {

                LogLog.Warn( "FileAppender: File option not set for appender [" + Name + "]." );

                LogLog.Warn( "FileAppender: Are you using FileAppender instead of ConsoleAppender?" );

            }

        }

 

I would prefer a solution, where I don’t have to use my own appender, but at least I have a workaround.

 

Regards,
Wolfgang

 

 



From: Wolfgang Trog [mailto:wolfgang@wollinet.com] 
Sent: Freitag, 31. Juli 2009 17:15
To: 'Log4NET User'



Subject: RE: Defer file creation
 

I want to create protocols for jobs that can be executed in our application, preferably one file per job and execution. But I don’t want a file, if the job is not executed. The jobs are only executed once a month for example. 


 

Thx for the quick response !

 

Wolfgang

 

 



From: Karim Bourouba [mailto:karym6@hotmail.com] 


Sent: Freitag, 31. Juli 2009 17:06

To: log4net-user@logging.apache.org
Subject: RE: Defer file creation


 


Hi There, 

  

I dont think I have an answer to your question just now - but can I ask why you would prefer to defer creating the log file?



  




From: wolfgang@wollinet.com
To: log4net-user@logging.apache.org
Subject: Defer file creation
Date: Fri, 31 Jul 2009 16:15:28 +0200

Hi Everbody,

 

I’m looking for a way to defer the creation of the log file until the first entry is logged. I want to use log4net for writing protocols for jobs that can be executed in my application. With my current configuration the file is created during startup which makes no sense if the job doesn’t run.  

 

My current configuration:

 

      <appender name="…" type="log4net.Appender.RollingFileAppender">

        <file value="....." />

        <appendToFile value="false" />

        <rollingStyle value="Date" />

        <datePattern value="yyyy_MM_dd.\tx\t" />

        <staticLogFileName value="false" />

        <threshold value="INFO" />

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

          <conversionPattern value="%date;%level;%m%n" />

        </layout>

      </appender>

 

One possibility seems to be to generate the appender programmatically, but then I lose a lot of flexibility. Another one is writing my own appender (or subclassing an existing one). Is there another way ?

 

Any help is appreciated,

Wolfgang

 

 




Share your memories online with anyone you want. Learn more.

 
_________________________________________________________________
Windows Live Messenger: Celebrate 10 amazing years with free winks and emoticons.
http://clk.atdmt.com/UKM/go/157562755/direct/01/

RE: Defer file creation

Posted by Wolfgang Trog <wo...@wollinet.com>.
Hi Ross,

 

thx for the suggestion. I can't defer the logger configuration, because I
need basic logging from the beginning. I could probably use a separate log
file for each job, but that seems a bit awkward. I think I'll stick to the
"write my own appender" approach for the moment.

 

Thx,

Wolfgang

 

 

From: Ross Hinkley [mailto:rosshinkley@gmail.com] 
Sent: Freitag, 31. Juli 2009 18:02
To: Log4NET User
Subject: Re: Defer file creation

 

Off the top of my head: doesn't the logfile only get generated if the logger
is configured?  Rather than deferring the log file getting created, couldn't
you defer execution of the configurator?

You could use a getter to run the configurator, like the following:

private static ILog _log = LogManager.GetLogger(typeof(Program));
public static ILog log
{
    get
    {
        if(!log4net.LogManager.GetRepository().Configured)
            log4net.Config.XmlConfigurator.Configure(new
FileInfo(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile));
        return _log;
    }
}

This way, your logger will only get configured (and the file subsequently
made) if something is logged.

Is it a hack?  Absolutely.  But it's the quickest way I could think of to
answer your question. :)

-Ross

On Fri, Jul 31, 2009 at 10:23 AM, Wolfgang Trog <wo...@wollinet.com>
wrote:

For now, I  tried a quick hack and modified FileAppender and it's now
working like I want:

 

override public void ActivateOptions()

        {

            .

 

            if ( m_fileName != null )

            {

                //SafeOpenFile( m_fileName, m_appendToFile );

            }

            else

            {

                LogLog.Warn( "FileAppender: File option not set for appender
[" + Name + "]." );

                LogLog.Warn( "FileAppender: Are you using FileAppender
instead of ConsoleAppender?" );

            }

        }

 

I would prefer a solution, where I don't have to use my own appender, but at
least I have a workaround.

 

Regards,
Wolfgang

 

 

From: Wolfgang Trog [mailto:wolfgang@wollinet.com] 
Sent: Freitag, 31. Juli 2009 17:15
To: 'Log4NET User'


Subject: RE: Defer file creation

 

I want to create protocols for jobs that can be executed in our application,
preferably one file per job and execution. But I don't want a file, if the
job is not executed. The jobs are only executed once a month for example. 

 

Thx for the quick response !

 

Wolfgang

 

 

From: Karim Bourouba [mailto:karym6@hotmail.com] 

Sent: Freitag, 31. Juli 2009 17:06

To: log4net-user@logging.apache.org

Subject: RE: Defer file creation

 


Hi There, 

  

I dont think I have an answer to your question just now - but can I ask why
you would prefer to defer creating the log file?



  

  _____  

From: wolfgang@wollinet.com
To: log4net-user@logging.apache.org
Subject: Defer file creation
Date: Fri, 31 Jul 2009 16:15:28 +0200

Hi Everbody,

 

I'm looking for a way to defer the creation of the log file until the first
entry is logged. I want to use log4net for writing protocols for jobs that
can be executed in my application. With my current configuration the file is
created during startup which makes no sense if the job doesn't run.  

 

My current configuration:

 

      <appender name="." type="log4net.Appender.RollingFileAppender">

        <file value="....." />

        <appendToFile value="false" />

        <rollingStyle value="Date" />

        <datePattern value="yyyy_MM_dd.\tx\t" />

        <staticLogFileName value="false" />

        <threshold value="INFO" />

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

          <conversionPattern value="%date;%level;%m%n" />

        </layout>

      </appender>

 

One possibility seems to be to generate the appender programmatically, but
then I lose a lot of flexibility. Another one is writing my own appender (or
subclassing an existing one). Is there another way ?

 

Any help is appreciated,

Wolfgang

 

 

  _____  

Share your memories online with anyone you want. Learn
<http://clk.atdmt.com/UKM/go/134665338/direct/01/>  more.

 


Re: Defer file creation

Posted by Ross Hinkley <ro...@gmail.com>.
Off the top of my head: doesn't the logfile only get generated if the logger
is configured?  Rather than deferring the log file getting created, couldn't
you defer execution of the configurator?

You could use a getter to run the configurator, like the following:

private static ILog _log = LogManager.GetLogger(typeof(Program));
public static ILog log
{
    get
    {
        if(!log4net.LogManager.GetRepository().Configured)
            log4net.Config.XmlConfigurator.Configure(new
FileInfo(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile));
        return _log;
    }
}

This way, your logger will only get configured (and the file subsequently
made) if something is logged.

Is it a hack?  Absolutely.  But it's the quickest way I could think of to
answer your question. :)

-Ross

On Fri, Jul 31, 2009 at 10:23 AM, Wolfgang Trog <wo...@wollinet.com>wrote:

>  For now, I  tried a quick hack and modified FileAppender and it’s now
> working like I want:
>
>
>
> override public void ActivateOptions()
>
>         {
>
>             …
>
>
>
>             if ( m_fileName != null )
>
>             {
>
>                 //SafeOpenFile( m_fileName, m_appendToFile );
>
>             }
>
>             else
>
>             {
>
>                 LogLog.Warn( "FileAppender: File option not set for
> appender [" + Name + "]." );
>
>                 LogLog.Warn( "FileAppender: Are you using FileAppender
> instead of ConsoleAppender?" );
>
>             }
>
>         }
>
>
>
> I would prefer a solution, where I don’t have to use my own appender, but
> at least I have a workaround.
>
>
>
> Regards,
> Wolfgang
>
>
>
>
>
> *From:* Wolfgang Trog [mailto:wolfgang@wollinet.com]
> *Sent:* Freitag, 31. Juli 2009 17:15
> *To:* 'Log4NET User'
> *Subject:* RE: Defer file creation
>
>
>
> I want to create protocols for jobs that can be executed in our
> application, preferably one file per job and execution. But I don’t want a
> file, if the job is not executed. The jobs are only executed once a month
> for example.
>
>
>
> Thx for the quick response !
>
>
>
> Wolfgang
>
>
>
>
>
> *From:* Karim Bourouba [mailto:karym6@hotmail.com]
> *Sent:* Freitag, 31. Juli 2009 17:06
> *To:* log4net-user@logging.apache.org
> *Subject:* RE: Defer file creation
>
>
>
>
> Hi There,
>
>
>
> I dont think I have an answer to your question just now - but can I ask why
> you would prefer to defer creating the log file?
>
>
>
>
>  ------------------------------
>
> From: wolfgang@wollinet.com
> To: log4net-user@logging.apache.org
> Subject: Defer file creation
> Date: Fri, 31 Jul 2009 16:15:28 +0200
>
> Hi Everbody,
>
>
>
> I’m looking for a way to defer the creation of the log file until the first
> entry is logged. I want to use log4net for writing protocols for jobs that
> can be executed in my application. With my current configuration the file is
> created during startup which makes no sense if the job doesn’t run.
>
>
>
> My current configuration:
>
>
>
>       <appender name="…" type="log4net.Appender.RollingFileAppender">
>
>         <file value="....." />
>
>         <appendToFile value="false" />
>
>         <rollingStyle value="Date" />
>
>         <datePattern value="yyyy_MM_dd.\tx\t" />
>
>         <staticLogFileName value="false" />
>
>         <threshold value="INFO" />
>
>         <layout type="log4net.Layout.PatternLayout">
>
>           <conversionPattern value="%date;%level;%m%n" />
>
>         </layout>
>
>       </appender>
>
>
>
> One possibility seems to be to generate the appender programmatically, but
> then I lose a lot of flexibility. Another one is writing my own appender (or
> subclassing an existing one). Is there another way ?
>
>
>
> Any help is appreciated,
>
> Wolfgang
>
>
>
>
>  ------------------------------
>
> Share your memories online with anyone you want. Learn more.<http://clk.atdmt.com/UKM/go/134665338/direct/01/>
>

RE: Defer file creation

Posted by Wolfgang Trog <wo...@wollinet.com>.
For now, I  tried a quick hack and modified FileAppender and it's now
working like I want:

 

override public void ActivateOptions()

        {

            .

 

            if ( m_fileName != null )

            {

                //SafeOpenFile( m_fileName, m_appendToFile );

            }

            else

            {

                LogLog.Warn( "FileAppender: File option not set for appender
[" + Name + "]." );

                LogLog.Warn( "FileAppender: Are you using FileAppender
instead of ConsoleAppender?" );

            }

        }

 

I would prefer a solution, where I don't have to use my own appender, but at
least I have a workaround.

 

Regards,
Wolfgang

 

 

From: Wolfgang Trog [mailto:wolfgang@wollinet.com] 
Sent: Freitag, 31. Juli 2009 17:15
To: 'Log4NET User'
Subject: RE: Defer file creation

 

I want to create protocols for jobs that can be executed in our application,
preferably one file per job and execution. But I don't want a file, if the
job is not executed. The jobs are only executed once a month for example. 

 

Thx for the quick response !

 

Wolfgang

 

 

From: Karim Bourouba [mailto:karym6@hotmail.com] 
Sent: Freitag, 31. Juli 2009 17:06
To: log4net-user@logging.apache.org
Subject: RE: Defer file creation

 


Hi There, 

  

I dont think I have an answer to your question just now - but can I ask why
you would prefer to defer creating the log file?



  

  _____  

From: wolfgang@wollinet.com
To: log4net-user@logging.apache.org
Subject: Defer file creation
Date: Fri, 31 Jul 2009 16:15:28 +0200

Hi Everbody,

 

I'm looking for a way to defer the creation of the log file until the first
entry is logged. I want to use log4net for writing protocols for jobs that
can be executed in my application. With my current configuration the file is
created during startup which makes no sense if the job doesn't run.  

 

My current configuration:

 

      <appender name="." type="log4net.Appender.RollingFileAppender">

        <file value="....." />

        <appendToFile value="false" />

        <rollingStyle value="Date" />

        <datePattern value="yyyy_MM_dd.\tx\t" />

        <staticLogFileName value="false" />

        <threshold value="INFO" />

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

          <conversionPattern value="%date;%level;%m%n" />

        </layout>

      </appender>

 

One possibility seems to be to generate the appender programmatically, but
then I lose a lot of flexibility. Another one is writing my own appender (or
subclassing an existing one). Is there another way ?

 

Any help is appreciated,

Wolfgang

 

 

  _____  

Share your memories online with anyone you want. Learn
<http://clk.atdmt.com/UKM/go/134665338/direct/01/>  more.


RE: Defer file creation

Posted by Karim Bourouba <ka...@hotmail.com>.

Hi There,
 
I dont think I have an answer to your question just now - but can I ask why you would prefer to defer creating the log file?



 



From: wolfgang@wollinet.com
To: log4net-user@logging.apache.org
Subject: Defer file creation
Date: Fri, 31 Jul 2009 16:15:28 +0200





Hi Everbody,
 
I’m looking for a way to defer the creation of the log file until the first entry is logged. I want to use log4net for writing protocols for jobs that can be executed in my application. With my current configuration the file is created during startup which makes no sense if the job doesn’t run.  
 
My current configuration:
 
      <appender name="…" type="log4net.Appender.RollingFileAppender">
        <file value="....." />
        <appendToFile value="false" />
        <rollingStyle value="Date" />
        <datePattern value="yyyy_MM_dd.\tx\t" />
        <staticLogFileName value="false" />
        <threshold value="INFO" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%date;%level;%m%n" />
        </layout>
      </appender>
 
One possibility seems to be to generate the appender programmatically, but then I lose a lot of flexibility. Another one is writing my own appender (or subclassing an existing one). Is there another way ?
 
Any help is appreciated,
Wolfgang
 
_________________________________________________________________
Share your memories online with anyone you want.
http://clk.atdmt.com/UKM/go/134665338/direct/01/