

![]() | Start a set with this search |
![]() | Include this search in one of my sets |
![]() | Exclude this search from one of my sets |
![]() | Permalink to these results Paste this link in email or IM: |
| Atom feed for tracking future search results Paste this URL into your reader: |
17 messages in org.apache.logging.log4j-userRe: conversion patterns and caller cl...| From | Sent On | Attachments |
|---|---|---|
| Jacob Kjome | Jun 5, 2004 11:16 am | |
| Ceki Gülcü | Jun 6, 2004 2:59 am | |
| Jacob Kjome | Jun 6, 2004 6:19 am | |
| Ceki Gülcü | Jun 6, 2004 7:58 am | |
| Mark Masterson | Jun 6, 2004 9:03 am | |
| Jacob Kjome | Jun 6, 2004 11:33 am | |
| Jacob Kjome | Jun 6, 2004 11:50 am | |
| Ceki Gülcü | Jun 7, 2004 6:21 am | |
| Jacob Kjome | Jun 7, 2004 4:29 pm | |
| Ceki Gülcü | Jun 8, 2004 7:04 am | |
| Jacob Kjome | Jun 22, 2004 6:44 am | |
| Keith | Jun 22, 2004 8:01 am | |
| Jacob Kjome | Jun 22, 2004 10:32 am | |
| Alison Ortega | Jun 22, 2004 10:50 am | |
| Keith | Jun 23, 2004 2:00 am | |
| Alison Ortega | Jun 23, 2004 5:58 am | |
| Jacob Kjome | Jun 23, 2004 6:54 am |

![]() | Permalink for this message Paste this link in email or IM: |
![]() | Permalink for this thread Paste this link in email or IM: |
| Atom feed for this thread Paste this URL into your reader: |
| Subject: | Re: conversion patterns and caller class information | Actions... |
|---|---|---|
| From: | Jacob Kjome (ho...@visi.com) | |
| Date: | Jun 6, 2004 6:19:12 am | |
| List: | org.apache.logging.log4j-user | |
At 11:59 AM 6/6/2004 +0200, you wrote:
Hi Jake,
At 08:16 PM 6/5/2004, Jacob Kjome wrote:
I'm noticing an issue with using the conversion characters which generate caller class information. In a project I'm working on, logging is done via a sort of Monitor framework. Anything can back the Monitor whether it be System.out, nothing, Log4j, etc. This makes it so that no logging framework becomes a runtime dependency of the library unless a user explicitly configures the library to use a particular Monitor implementation such as one backed by Log4j. The thing is, classes call the monitor to let the obfuscated logger implementation do the logging. As such, if I use the Log4j implementation and use the conversion characters such as "C", "F", "L", and "M", it ends up looking like logging came from the Log4jMonitor rather than the class that is calling the log4j monitor, which is what I'd want.
With respect to the conversion characters such as "C", "F", "L", and "M", how is monitoring different than wrapping? You are aware of the
Category.log(<http://java.sun.com/products/jdk/1.3/docs/api/java/lang/String.html>String
callerFQCN,
<http://logging.apache.org/log4j/docs/api/org/apache/log4j/../../../org/apache/log4j/Priority.html>Priority
level,
<http://java.sun.com/products/jdk/1.3/docs/api/java/lang/Object.html>Object
message,
<http://java.sun.com/products/jdk/1.3/docs/api/java/lang/Throwable.html>Throwable
t)
method right?
Ok, that brainfart was a bit embarrassing! Of course you are right and it works just fine. I've given the above advice before to others and yet I didn't think about using it myself. Ug!!!
The whole Monitor idea kind of came from this post: http://paulhammant.com/blog//000241.html
How is the monitor handed down to the reusable component? It looks to me like the logger initialization problem has been replaced by the monitor initialization problem. I don't see the gain... Anyone care to explain?
A single monitor is handed to, essentially, a container which then provides this component to all classes in the framework that require it. In each class that will use the monitor, I just provide a Monitor instance variable. I don't create the monitor in the class itself as is the normal Log4j usage. It it up to the user to configure a Monitor implementation (or get a default backed by either nothing or System.out) for the container and the container will provide it to any class that needs it. This way the user has full control over the components rather than the programmer defining components inside the class outside of the control of the user. It's all about IOC (Inversion of Control). You may have read about this stuff before in articles about Picocontainer ( http://www.picocontainer.org/ ) and Spring Framework ( http://www.springframework.org/ ), to name only two. Technically, we aren't using either of these right now, but the same principal applies.
Besides the user having control over components, this completely removes any runtime dependency on Log4j (or any other logging framework) unless one explicitly configures the app to use the Log4jMonitor implementation. Unlike commons-logging where you are just trading a dependency on Log4j specifically for a dual dependency on commons-logging plus some logging implementation such as Log4j or JDK1.4 logging, there is no dependency whatsoever unless it is desired.
Hope that makes sense.
Jake
Jake
-- Ceki Gülcü
For log4j documentation consider "The complete log4j manual" ISBN: 2970036908 http://www.qos.ch/shop/products/clm_t.jsp







