You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@avalon.apache.org by da...@hic.gov.au on 2001/12/19 03:41:16 UTC

Logkit: Target Additivity

I have been playing around with Namespace hierarchies and additivity and
have come across some behaviour which does not seem right.


The following code exhibits the problem:

public void testLoggerAdditivity() {
   Hierarchy h = new Hierarchy();
   Logger logger1 = h.getLoggerFor("A");
   logger1.setPriority(Priority.DEBUG);
   Logger logger2 = h.getLoggerFor("A.B");
   logger2.setPriority(Priority.DEBUG);
   Logger logger3 = h.getLoggerFor("A.B.C");
   logger3.setPriority(Priority.DEBUG);
   final String pattern =
      "%7.7{priority} %5.5{time}   [%8.8{category}] "
         + "(%{context}): %{message}\\n%{throwable}";
   final PatternFormatter formatter = new PatternFormatter(pattern);
   File file1 = new File("LKAdd1.txt");
   try {
      FileTarget target1 = new FileTarget(file1, false, formatter);
      PriorityFilter filter = new PriorityFilter(Priority.ERROR);
      //Set log targets of logger
      logger1.setLogTargets(new LogTarget[] { target1, filter });
      logger1.setAdditivity(true);
      File file2 = new File("LKAdd2.txt");
      FileTarget target2 = new FileTarget(file2, false, formatter);
      logger2.setLogTargets(new LogTarget[] { target2, filter });
   }
   catch (IOException ioe) {
   }
   logger2.setAdditivity(true);
   logger3.setAdditivity(true);
   logger1.info("Additivity Message1");
   logger2.info("Additivity Message2");
   logger3.info("Additivity Message3");
}

Having setup a 3 level hierarchy, I attach targets to levels 1 and 2 (but
not 3). However the results written to the files LKAdd1.txt are:
INFO    10087   [A       ] (): Additivity Message1
INFO    10087   [A.B     ] (): Additivity Message2
and the results written to LKAdd2.txt are:
INFO    10087   [A.B     ] (): Additivity Message2
INFO    10087   [A.B.C   ] (): Additivity Message3

I would have assumed that the text logged to logger3 would also appear in
the target attached to logger1.

It is prevented from doing so by the following chunk of code in the log
method of class Logger:

            if( m_logTargetsForceSet && m_additivity && null != m_parent )
            {
                m_parent.output( event );
            }

m_logTargetsForceSet  is only set when a target is added but as logger3
uses the inherited handler and not one of its own, it only logs to
LKAdd2.txt and refuses to log to any parent targets.

I could not find any description as to how additivity is actually handled
so is this a defect?



****************************************************************
NOTICE - This message is intended only for the use of the 
addressee named above and may contain privileged and 
confidential information.  If you are not the intended recipient
of this message you are hereby notified that you must not 
disseminate, copy or take any action based upon it.  If you 
received this message in error please notify HIC immediately.
Any views expressed in this message are those of the individual
sender, except where the sender specifically states them to be
the views of HIC.
****************************************************************

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>


Re: Logkit: Target Additivity

Posted by Peter Donald <pe...@apache.org>.
Okay - I think I fixed this in latest CVS. Can you download it and make sure 
all is good ?

On Wed, 19 Dec 2001 13:41, david.gray@hic.gov.au wrote:
> I have been playing around with Namespace hierarchies and additivity and
> have come across some behaviour which does not seem right.
>
>
> The following code exhibits the problem:
>
> public void testLoggerAdditivity() {
>    Hierarchy h = new Hierarchy();
>    Logger logger1 = h.getLoggerFor("A");
>    logger1.setPriority(Priority.DEBUG);
>    Logger logger2 = h.getLoggerFor("A.B");
>    logger2.setPriority(Priority.DEBUG);
>    Logger logger3 = h.getLoggerFor("A.B.C");
>    logger3.setPriority(Priority.DEBUG);
>    final String pattern =
>       "%7.7{priority} %5.5{time}   [%8.8{category}] "
>          + "(%{context}): %{message}\\n%{throwable}";
>    final PatternFormatter formatter = new PatternFormatter(pattern);
>    File file1 = new File("LKAdd1.txt");
>    try {
>       FileTarget target1 = new FileTarget(file1, false, formatter);
>       PriorityFilter filter = new PriorityFilter(Priority.ERROR);
>       //Set log targets of logger
>       logger1.setLogTargets(new LogTarget[] { target1, filter });
>       logger1.setAdditivity(true);
>       File file2 = new File("LKAdd2.txt");
>       FileTarget target2 = new FileTarget(file2, false, formatter);
>       logger2.setLogTargets(new LogTarget[] { target2, filter });
>    }
>    catch (IOException ioe) {
>    }
>    logger2.setAdditivity(true);
>    logger3.setAdditivity(true);
>    logger1.info("Additivity Message1");
>    logger2.info("Additivity Message2");
>    logger3.info("Additivity Message3");
> }
>
> Having setup a 3 level hierarchy, I attach targets to levels 1 and 2 (but
> not 3). However the results written to the files LKAdd1.txt are:
> INFO    10087   [A       ] (): Additivity Message1
> INFO    10087   [A.B     ] (): Additivity Message2
> and the results written to LKAdd2.txt are:
> INFO    10087   [A.B     ] (): Additivity Message2
> INFO    10087   [A.B.C   ] (): Additivity Message3
>
> I would have assumed that the text logged to logger3 would also appear in
> the target attached to logger1.
>
> It is prevented from doing so by the following chunk of code in the log
> method of class Logger:
>
>             if( m_logTargetsForceSet && m_additivity && null != m_parent )
>             {
>                 m_parent.output( event );
>             }
>
> m_logTargetsForceSet  is only set when a target is added but as logger3
> uses the inherited handler and not one of its own, it only logs to
> LKAdd2.txt and refuses to log to any parent targets.
>
> I could not find any description as to how additivity is actually handled
> so is this a defect?
>
>
>
> ****************************************************************
> NOTICE - This message is intended only for the use of the
> addressee named above and may contain privileged and
> confidential information.  If you are not the intended recipient
> of this message you are hereby notified that you must not
> disseminate, copy or take any action based upon it.  If you
> received this message in error please notify HIC immediately.
> Any views expressed in this message are those of the individual
> sender, except where the sender specifically states them to be
> the views of HIC.
> ****************************************************************

-- 
Cheers,

Pete

-------------------------
  All things considered, 
 insanity may be the only 
  reasonable alternative.
-------------------------

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>


Re: Logkit: Target Additivity

Posted by Peter Donald <pe...@apache.org>.
On Wed, 19 Dec 2001 13:41, david.gray@hic.gov.au wrote:
> It is prevented from doing so by the following chunk of code in the log
> method of class Logger:
>
>             if( m_logTargetsForceSet && m_additivity && null != m_parent )
>             {
>                 m_parent.output( event );
>             }
>
> m_logTargetsForceSet  is only set when a target is added but as logger3
> uses the inherited handler and not one of its own, it only logs to
> LKAdd2.txt and refuses to log to any parent targets.
>
> I could not find any description as to how additivity is actually handled
> so is this a defect?

This is a defect. Im not sure exactly how to fix it though. If we didn't 
check m_logTargetsForceSet then the class would print out twice to the 
targets inherited from logger2. You got any ideas on how to fix this without 
large overheads?

-- 
Cheers,

Pete

------------------------------------
The two secrets to success:
   1- Don't tell anyone everything.
------------------------------------

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>