I have an appender that extends FileAppender.  The relevant method is below.

  protected void subAppend(LoggingEvent event) {
    if(separate) {
        try {//First reset the file so each new log gets a new file.
            setFile(getFile(), getAppend(), getBufferedIO(),
getBufferSize());
        } catch(IOException e) {
            LogLog.error("Unable to reset fileName.");
        }
    }
    super.subAppend(event);
  }

James Stauffer


-----Original Message-----
From: Horry, Adam J [mailto:[EMAIL PROTECTED] 
Sent: Friday, June 11, 2004 3:30 PM
To: Log4J Users List
Subject: RE: Separate log file per servlet


Ok, I was staring at this idea and wanted to make sure I understood it
correctly.

I know how to set the MDC Value.

So I would write my own appender (or extend on that I wanted to use like

DailyRollingFileAppender). I would overwrite the append() or doAppend() to
set the fileName based on the MDC value.

???

-----Original Message-----
From: James Stauffer [mailto:[EMAIL PROTECTED] 
Sent: Friday, June 11, 2004 2:51 PM
To: 'Log4J Users List'
Subject: RE: Separate log file per servlet


You could Have each servlet set an MDC value and then write your own
Appender that uses that MDC value in the filename.

James Stauffer


-----Original Message-----
From: Horry, Adam J [mailto:[EMAIL PROTECTED] 
Sent: Friday, June 11, 2004 1:49 PM
To: Log4J Users List
Subject: RE: Separate log file per servlet


Unfortunately, I have a Web Architect who wants it this way and it 
is my job to make it happen. 

My original idea was to output to a log in XML and then create an XML tool
to filter/sort/etc.

I had thought of the stack trace method but that seemed like a 
performance hog. I thought about messing this the events but that seemed
even uglier.

I will look at the AOP Aspects. Not familiar with it but I am opening to any
suggestion at this point.

Thanks,
Adam

-----Original Message-----
From: James Stauffer [mailto:[EMAIL PROTECTED] 
Sent: Friday, June 11, 2004 2:02 PM
To: 'Log4J Users List'
Subject: RE: Separate log file per servlet


You could set an MDC with the servlet name and then filter the logs.

James Stauffer


-----Original Message-----
From: Shapira, Yoav [mailto:[EMAIL PROTECTED] 
Sent: Friday, June 11, 2004 12:59 PM
To: Log4J Users List
Subject: RE: Separate log file per servlet



Hi,

>1) What is the reason for setting additivity to false in this scenario
>2) does additivity need to be set to false for each appender in this 
>scenario, or only the first?

In my example, I set additivity to false for all the appenders, because I
didn't know what was in the rest of his configuration file.  It's better to
over-isolate than get multiple copies of logging statements IMHO, but it's
certainly not a requirement, and certainly more details need to be known in
order to establish if that's a good approach for this scenario.

As for configuring log4j: do it once, in a ServletContextListener's
contextInitialized method, not from a servlet.

As for the shared class using whatever appender its calling class is
using: ack, that's a bit of a pain.  Logging Domains would help here, but
that's log4j 1.3 ;)  You can also do this fairly nicely with some Aspects
(as in AOP Aspects).  You could pass the name of the calling class, the
calling class itself, or the Logger object itself, to all methods in the
shared class.  That's simple and would work, though it's a bit ugly.  You
could figure out the calling class name using stack trace tricks, but that's
costly from a performance perspective.  I don't know what I'd pick in this
scenario, but then again I wouldn't be in this scenario to start with
because I really dislike the "every component [or class, or whatever] goes
into its own log destination" approach -- I prefer sending everything to one
destination and then filtering/viewing using a good tool like Chainsaw or
emacs ;)

Yoav Shapira



This e-mail, including any attachments, is a confidential business
communication, and may contain information that is confidential, proprietary
and/or privileged.  This e-mail is intended only for the
individual(s) to whom it is addressed, and may not be saved, copied,
printed, disclosed or used by anyone else.  If you are not the(an) intended
recipient, please immediately delete this e-mail from your computer system
and notify the sender.  Thank you.


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to