Hi,
For a while now I have mentioned that ContextStack was a bad design choice.
I originally added it in so you could determine what important "state" was in
process when a log event was issued. For instance you could use context to
record the current security group under which you are performing or the
transaction participating in etc.
So the context "a.b.c" could mean you are running this in security permission
set "c", nested in "b" which is nested in "a". Or it could be that you are in
transaction "c" nested in transaction "b" (which is nested in "a"). etc
The problem is that this feature is rarely needed. In fact most times I used
it I stored a other information in there (ie "<hostname>.<user>.<action>")
and relied on the order placed in stack to interpret meaning of each element.
This is of course an error prone activity and a considerable abuse of the
mechanism.
So what I am proposing is that associated with each LogEvent we can
optionally have an extra ContextMap. This object would contain a map between
string keys and objects. Some example entries
"user" ->"fred"
"hostname" ->"helm.realityforge.org"
"ipaddress" ->"1.2.3.4"
"interface" ->"127.0.0.1"
"caller" ->"com.biz.MyCaller.method(MyCaller.java:18)"
"source" ->"1.6.3.2:33"
etc
So it would contain all the possible variables that you could need. Most of
these variables are bound to a particular thread and relatively "static". The
others "caller" and "source" are per-log event.
So what I propose is that associated with each thread is a ContextMap that
you can add *stuff* to. In cases you need to add extra per-call information
(say the caller variable) you can add a "Decorator" LogTarget (ie
CallerDecoratorTarget) that adds to LogEvents ContextMap. This would have the
advantage that getting caller id would still work across when you hand them
off to AsyncLogTarget.
Thoughts?
Cheers,
Pete
*-----------------------------------------------------*
| "Faced with the choice between changing one's mind, |
| and proving that there is no need to do so - almost |
| everyone gets busy on the proof." |
| - John Kenneth Galbraith |
*-----------------------------------------------------*
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]