donaldp 2002/07/09 21:18:31
Modified: docs/logkit changes.html features.html index.html
whitepaper.html
docs/logkit/images header.gif
Added: docs/logkit/css ns4_only.css print.css site.css tigris.css
Log:
Update site
Revision Changes Path
1.7 +447 -388 jakarta-avalon-site/docs/logkit/changes.html
Index: changes.html
===================================================================
RCS file: /home/cvs/jakarta-avalon-site/docs/logkit/changes.html,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- changes.html 2 Apr 2002 12:12:35 -0000 1.6
+++ changes.html 10 Jul 2002 04:18:31 -0000 1.7
@@ -1,521 +1,580 @@
-<html>
-<head>
-<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<title>Revision History</title>
-</head>
-<body bgcolor="#ffffff" marginheight="4" marginwidth="4" leftmargin="4"
topmargin="4" alink="#023264" vlink="#023264" link="#525D76" text="#000000">
-<table border="0" cellpadding="0" cellspacing="0" width="100%">
-<tr>
-<td align="left" valign="top"><a
href="http://jakarta.apache.org/index.html"><img src="images/jakarta-logo.gif"
border="0" vspace="0" hspace="0"></a></td><td bgcolor="#ffffff" align="left"
valign="top" width="100%"><img src="images/header.gif" align="right" border="0"
vspace="0" hspace="0"></td>
-</tr>
-<tr>
-<td colspan="2" height="2" width="100%">
-<hr size="1" noshade="">
-</td>
-</tr>
-</table>
-<table border="0" cellpadding="0" cellspacing="0" width="100%">
-<tr>
-<td valign="top" width="1%"></td><td nowrap="1" valign="top" width="14%">
-<br>
-<font face="arial,helvetica,sanserif">
-<br>
-<br>
-<a href="http://jakarta.apache.org/avalon"><font size="+1"
color="#778899">Back to Avalon</font></a>
-<br>
-<br>
-<font size="+1" color="#000000">About</font>
-<br>
-<font size="-1">
-<ul>
-<li>
-<a href="index.html"><font size="-1">Overview</font></a>
-</li>
-<li>
-<a href="features.html"><font size="-1">Features</font></a>
-</li>
-<li>
-<a
href="http://jakarta.apache.org/builds/jakarta-avalon/release/logkit/latest"><font
size="-1">Download</font></a>
-</li>
-<li>
-<a href="whitepaper.html"><font size="-1">Whitepaper</font></a>
-</li>
-<li>
-<a href="changes.html"><font size="-1">Changes</font></a>
-</li>
-<li>
-<a href="http://jakarta.apache.org/avalon/logkit/api/index.html"><font
size="-1">API Docs</font></a>
-</li>
-</ul>
-</font>
-<br>
-<br>
-</font></td><td align="left" valign="top" width="*">
-<title>Revision History</title>
-<center>
-<table width="100%">
-<tr>
-<td bgcolor="#99aabb">
-<center>
-<b><font face="arial,helvetica,sanserif" color="#000000" size="+2">Revision
History</font></b>
-</center>
-</td>
-</tr>
-</table>
-</center>
-<br>
-<div align="right">
-<table width="100%" cellspacing="0" cellpadding="2" border="0">
-<tr>
-<td bgcolor="#525D76"><font face="arial,helvetica,sanserif"
color="#ffffff"><b>Revision 1.1
- ()
- </b></font></td>
-</tr>
-<tr>
-<td><font face="arial,helvetica,sanserif" color="#000000">
-<br>
-<ul>
-<li>
-<img src="images/update.jpg" border="0" alt="changed" align="absmiddle">
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<!-- Content Stylesheet for Site -->
+
+
+<!-- start the processing -->
+ <html>
+ <head>
+ <style type="text/css">
+ @import url("./css/tigris.css");
+ @import url("./css/site.css");
+ </style>
+ <meta http-equiv="Content-Type" content="text/html;
charset=iso-8859-1"/>
+
+
+ <title>LogKit -
$root.getChild("properties").getChild("title").getText()</title>
+ </head>
+
+ <body marginwidth="0" marginheight="0" class="composite">
+
+ <div id="banner">
+ <table border="0" cellspacing="0" cellpadding="8" width="100%">
+ <!-- TOP IMAGE -->
+ <tr>
+ <td> <td align="left">
+ <a href="http://jakarta.apache.org"><img
src="http://jakarta.apache.org/images/jakarta-logo.gif" border="0"/></a>
+ </td>
+ <td align="right">
+ <a href="http://jakarta.apache.org/avalon/logkit"><img
src="./images/header.gif" alt="LogKit" border="0"/></a>
+ </td>
+ </td>
+ <td><div align="right" valign="bottom"><b><font
size="+3">LogKit</font></b></div></td>
+ </tr>
+ </table>
+ </div>
+
+ <table border="0" cellspacing="0" cellpadding="8" width="100%"
id="main">
+ <tr valign="top">
+ <!-- LEFT SIDE NAVIGATION -->
+ <td id="leftcol" width="20%">
+ <div id="navcolumn">
+ <div>
+ <strong>About</strong>
+ <div><small> <a href="./index.html">Overview</a>
+ </small></div>
+ <div><small> <a href="./features.html">Features</a>
+ </small></div>
+ <div><small> <a
href="http://jakarta.apache.org/builds/jakarta-avalon/release/logkit/latest">Download</a>
+ </small></div>
+ <div><small> <a href="./whitepaper.html">Whitepaper</a>
+ </small></div>
+ <div><small> <a href="./changes.html">Changes</a>
+ </small></div>
+ <div><small> <a
href="http://jakarta.apache.org/avalon/logkit/api/index.html">API Docs</a>
+ </small></div>
+ </div>
+ </div>
+ </td>
+ <td><div id="bodycol"><div class="app">
+
+ <table border="0" cellspacing="0" cellpadding="2" width="100%">
+ <tr><td bgcolor="#525D76">
+ <font color="#ffffff" face="arial,helvetica,sanserif">
+ <strong>ChangeLog</strong>
+ </font>
+ </td></tr>
+ <tr><td>
+ <blockquote>
+ <table border="0" cellspacing="0" cellpadding="2"
width="100%">
+ <tr><td bgcolor="#828DA6">
+ <font color="#ffffff" face="arial,helvetica,sanserif">
+ <strong>
+ Revision 1.1 (Unreleased)
+ </strong>
+ </font>
+ </td></tr>
+ <tr><td>
+ <blockquote>
+ <ul>
+ <li> <p>
+ Added SMTPOutputLogTarget to enable logging to email addresses.
+ (MC)</p>
+</li>
+ <li> <p>
Changed the default log format so that the log entry times are
formatted
using a human friendly format.
- (LM)</li>
-<li>
-<img src="images/update.jpg" border="0" alt="changed" align="absmiddle">
+ (LM)</p>
+</li>
+ <li> <p>
Rotate before write.
- (EP)</li>
-<li>
-<img src="images/add.jpg" border="0" alt="added" align="absmiddle">
+ (EP)</p>
+</li>
+ <li> <p>
Added RotateStrategyByDate to enable daily, weekly, and monthly
rotation of log files.
- (EP)</li>
-</ul>
-</font></td>
-</tr>
-<tr>
-<td bgcolor="#525D76"><font face="arial,helvetica,sanserif"
color="#ffffff"><b>Revision 1.0.1
- (January 31, 2001)
- </b></font></td>
-</tr>
-<tr>
-<td><font face="arial,helvetica,sanserif" color="#000000">
-<br>
-<ul>
-<li>
-<img src="images/fix.jpg" border="0" alt="off" align="absmiddle">
+ (EP)</p>
+</li>
+ </ul>
+ </blockquote>
+ </td></tr>
+ </table>
+ </a>
+ <table border="0" cellspacing="0" cellpadding="2"
width="100%">
+ <tr><td bgcolor="#828DA6">
+ <font color="#ffffff" face="arial,helvetica,sanserif">
+ <strong>
+ Revision 1.0.1 (January 31, 2001)
+ </strong>
+ </font>
+ </td></tr>
+ <tr><td>
+ <blockquote>
+ <ul>
+ <li> <p>
Fixed spelling in the documentation files.
- (PD)</li>
-<li>
-<img src="images/fix.jpg" border="0" alt="off" align="absmiddle">
+ (PD)</p>
+</li>
+ <li> <p>
Fix javadoc warnings from "@returns" tags used instead of "@return".
- (PD)</li>
-<li>
-<img src="images/update.jpg" border="0" alt="changed" align="absmiddle">
+ (PD)</p>
+</li>
+ <li> <p>
added new constructors to produce better readable file names in the
File Strategy classes.
- (GP)</li>
-<li>
-<img src="images/fix.jpg" border="0" alt="off" align="absmiddle">
+ (GP)</p>
+</li>
+ <li> <p>
Added fixes to AsyncLogTarget: Make sure that the LogTarget delegated
to cannot disrupt thread by throwing an exception. Remove uneeded step
from documentation.
- (PD)</li>
-<li>
-<img src="images/update.jpg" border="0" alt="changed" align="absmiddle">
+ (PD)</p>
+</li>
+ <li> <p>
Many improvements to PatternFormatter including: Made it possible to
specify the format of date in the auxilliary parameter of the format
for dates. Cached the date and DateFormatter objects so that they are
not created every time a LogEvent is formatted. Added a getRTime()
method to format relative time. Just delegates to getTime at the
moment for backwards compatability.
- (PD)</li>
-<li>
-<img src="images/update.jpg" border="0" alt="changed" align="absmiddle">
+ (PD)</p>
+</li>
+ <li> <p>
Made sure that additivity is transitive (in Logger) - even when you
only inherit your loggers from your parent.
- (PD)</li>
-<li>
-<img src="images/update.jpg" border="0" alt="changed" align="absmiddle">
+ (PD)</p>
+</li>
+ <li> <p>
Added isPriorityEnabled() method to Logger to determine if specified
priority is enabled.
- (PD)</li>
-<li>
-<img src="images/update.jpg" border="0" alt="changed" align="absmiddle">
+ (PD)</p>
+</li>
+ <li> <p>
Various build improvements.
- (LM)</li>
-</ul>
-</font></td>
-</tr>
-<tr>
-<td bgcolor="#525D76"><font face="arial,helvetica,sanserif"
color="#ffffff"><b>Revision 1.0
- (October 26, 2001)
- </b></font></td>
-</tr>
-<tr>
-<td><font face="arial,helvetica,sanserif" color="#000000">
-<br>
-<ul>
-<li>
-<img src="images/remove.jpg" border="0" alt="deleted" align="absmiddle">
+ (LM)</p>
+</li>
+ </ul>
+ </blockquote>
+ </td></tr>
+ </table>
+ </a>
+ <table border="0" cellspacing="0" cellpadding="2"
width="100%">
+ <tr><td bgcolor="#828DA6">
+ <font color="#ffffff" face="arial,helvetica,sanserif">
+ <strong>
+ Revision 1.0 (October 26, 2001)
+ </strong>
+ </font>
+ </td></tr>
+ <tr><td>
+ <blockquote>
+ <ul>
+ <li> <p>
Remove references to Testlet (since we migrated to JUnit).
- (BL)</li>
-<li>
-<img src="images/fix.jpg" border="0" alt="off" align="absmiddle">
+ (BL)</p>
+</li>
+ <li> <p>
Fixed EOL issues in test so that line formatting works across all
systems (rather than just unix).
- (PD)</li>
-<li>
-<img src="images/update.jpg" border="0" alt="changed" align="absmiddle">
+ (PD)</p>
+</li>
+ <li> <p>
Added in a clearer javadoc class description in PatternFormatter.
- (PD)</li>
-<li>
-<img src="images/update.jpg" border="0" alt="changed" align="absmiddle">
+ (PD)</p>
+</li>
+ <li> <p>
Made Hierarchy setDefaultLogTargets() which is like
setDefaultLogTarget() but accepts an array.
- (PD)</li>
-<li>
-<img src="images/update.jpg" border="0" alt="changed" align="absmiddle">
+ (PD)</p>
+</li>
+ <li> <p>
Use default log format when use default constructor in
AvalonFormatter comaptibility.
- (EP)</li>
-<li>
-<img src="images/update.jpg" border="0" alt="changed" align="absmiddle">
+ (EP)</p>
+</li>
+ <li> <p>
Various build improvements.
- (BL)</li>
-</ul>
-</font></td>
-</tr>
-<tr>
-<td bgcolor="#525D76"><font face="arial,helvetica,sanserif"
color="#ffffff"><b>Revision 1.0b5
- (September 17, 2001)
- </b></font></td>
-</tr>
-<tr>
-<td><font face="arial,helvetica,sanserif" color="#000000">
-<br>
-<ul>
-<li>
-<img src="images/update.jpg" border="0" alt="changed" align="absmiddle">
+ (BL)</p>
+</li>
+ </ul>
+ </blockquote>
+ </td></tr>
+ </table>
+ </a>
+ <table border="0" cellspacing="0" cellpadding="2"
width="100%">
+ <tr><td bgcolor="#828DA6">
+ <font color="#ffffff" face="arial,helvetica,sanserif">
+ <strong>
+ Revision 1.0b5 (September 17, 2001)
+ </strong>
+ </font>
+ </td></tr>
+ <tr><td>
+ <blockquote>
+ <ul>
+ <li> <p>
Updated unit tests to use JUnit rather than Testlet.
- (EP)</li>
-<li>
-<img src="images/add.jpg" border="0" alt="added" align="absmiddle">
+ (EP)</p>
+</li>
+ <li> <p>
Deprecate OutputStreamLogger and replace with LoggerOutputStream.
- (PD)</li>
-<li>
-<img src="images/add.jpg" border="0" alt="added" align="absmiddle">
+ (PD)</p>
+</li>
+ <li> <p>
Added JMS support for JMS Log messages.
- (PD)</li>
-<li>
-<img src="images/add.jpg" border="0" alt="added" align="absmiddle">
+ (PD)</p>
+</li>
+ <li> <p>
Added file rotation strategies, including patches from
Bernhard Huber and Carsten Ziegeler
- (PD)</li>
-<li>
-<img src="images/add.jpg" border="0" alt="added" align="absmiddle">
+ (PD)</p>
+</li>
+ <li> <p>
Implemented a database log target.
- (PD)</li>
-<li>
-<img src="images/fix.jpg" border="0" alt="off" align="absmiddle">
+ (PD)</p>
+</li>
+ <li> <p>
Used synchronization to make targets more threads safe.
- (PD)</li>
-<li>
-<img src="images/fix.jpg" border="0" alt="off" align="absmiddle">
+ (PD)</p>
+</li>
+ <li> <p>
Fix masquerading attack security hole.
- (PD)</li>
-<li>
-<img src="images/update.jpg" border="0" alt="changed" align="absmiddle">
+ (PD)</p>
+</li>
+ <li> <p>
Incorporate additivity feature similar to Log4j. This is needed as
getLogTargets() is deprecated for security reasons (allowed masq)
and yet this functionality is still needed. Added unit tests to
verify it behaves as expected.
- (PD)</li>
-<li>
-<img src="images/update.jpg" border="0" alt="changed" align="absmiddle">
+ (PD)</p>
+</li>
+ <li> <p>
Made LogEvent serializable. The format may change slightly before
release.
- (PD)</li>
-<li>
-<img src="images/update.jpg" border="0" alt="changed" align="absmiddle">
+ (PD)</p>
+</li>
+ <li> <p>
Passed Hierarchy object as ErrorHandler. Hierarchy delegates to another
ErrorHandler which allows ErrorHandler to be pluggable without
resetting
all ErrorHandlers each time an ErrorHandler is changed.
- (PD)</li>
-<li>
-<img src="images/update.jpg" border="0" alt="changed" align="absmiddle">
+ (PD)</p>
+</li>
+ <li> <p>
Incorporated delegation of Error Handling to ErrorHandler.
Logging components receive an ErrorHandler by implementing ErrorAware.
Added AbstractTarget that provided basic functionality of open/close
and error handling almost always needed by LogTargets.
Refactored all existing targets to work with this method.
- (PD)</li>
-<li>
-<img src="images/update.jpg" border="0" alt="changed" align="absmiddle">
+ (PD)</p>
+</li>
+ <li> <p>
Made ContextMap serializable. After deserializing it defaults to
readonly.
This assumes that Context only contains serializable elements.
- (PD)</li>
-<li>
-<img src="images/update.jpg" border="0" alt="changed" align="absmiddle">
+ (PD)</p>
+</li>
+ <li> <p>
Update build process to the proposed standard.
- (BL)</li>
-<li>
-<img src="images/update.jpg" border="0" alt="changed" align="absmiddle">
+ (BL)</p>
+</li>
+ <li> <p>
Update build process to notify the user of missing jars, and perform
many other checks
- (PD)</li>
-</ul>
-</font></td>
-</tr>
-<tr>
-<td bgcolor="#525D76"><font face="arial,helvetica,sanserif"
color="#ffffff"><b>Revision 1.0b4
- (August 6, 2001)
- </b></font></td>
-</tr>
-<tr>
-<td><font face="arial,helvetica,sanserif" color="#000000">
-<br>
-<ul>
-<li>
-<img src="images/update.jpg" border="0" alt="changed" align="absmiddle">
+ (PD)</p>
+</li>
+ </ul>
+ </blockquote>
+ </td></tr>
+ </table>
+ </a>
+ <table border="0" cellspacing="0" cellpadding="2"
width="100%">
+ <tr><td bgcolor="#828DA6">
+ <font color="#ffffff" face="arial,helvetica,sanserif">
+ <strong>
+ Revision 1.0b4 (August 6, 2001)
+ </strong>
+ </font>
+ </td></tr>
+ <tr><td>
+ <blockquote>
+ <ul>
+ <li> <p>
Added ContextMap, updated whitepaper to describe the feature. Deprecated
ContextStack
in the process as it encouraged bad practices and has been supersceded
by ContextMap.
- (PD)</li>
-<li>
-<img src="images/add.jpg" border="0" alt="added" align="absmiddle">
+ (PD)</p>
+</li>
+ <li> <p>
Added ExtendedPatternFormatter to allow log messages to be formatted
with
caller method and thread ids.
- (PD)</li>
-<li>
-<img src="images/update.jpg" border="0" alt="changed" align="absmiddle">
+ (PD)</p>
+</li>
+ <li> <p>
Fixed bug in OutputStreamLogger so that it does not append a '\n' at end
of stream.
- (PD)</li>
-<li>
-<img src="images/add.jpg" border="0" alt="added" align="absmiddle">
+ (PD)</p>
+</li>
+ <li> <p>
Added Target SafeFileTarget that opens file and then closes file each
time
a log entry is written.
- (PD)</li>
-<li>
-<img src="images/add.jpg" border="0" alt="added" align="absmiddle">
+ (PD)</p>
+</li>
+ <li> <p>
Added basic unit tests for the logkit formatters, stream and file output
targets, priority and logTarget inheritance and utility code.
- (PD)</li>
-<li>
-<img src="images/update.jpg" border="0" alt="changed" align="absmiddle">
+ (PD)</p>
+</li>
+ <li> <p>
Rework existing logtargets so that they are thread safe, perform better
error
management and improve usability. Old style targets have been deprecated
as
have any "unsafe" methods.
- (PD)</li>
-<li>
-<img src="images/update.jpg" border="0" alt="changed" align="absmiddle">
+ (PD)</p>
+</li>
+ <li> <p>
Added extra constructor to PatternFormatter so that format string is
specified at construction time. Deprecated no arguements constructor
and setFormat() method.
- (PD)</li>
-<li>
-<img src="images/add.jpg" border="0" alt="added" align="absmiddle">
+ (PD)</p>
+</li>
+ <li> <p>
Added StackIntrospector class that is amalgamation of utility code
supplied by
Stuart Roebuck ([EMAIL PROTECTED]) and Sylvain
Wallez ([EMAIL PROTECTED]).
- (PD)</li>
-<li>
-<img src="images/update.jpg" border="0" alt="changed" align="absmiddle">
+ (PD)</p>
+</li>
+ <li> <p>
Right justified fields are cropped on the left. ie [%-20.20{context}]
changes from
outputting "[org.apache.log.forma]" to "[mat.PatternFormatter]".
- (SR)</li>
-<li>
-<img src="images/update.jpg" border="0" alt="changed" align="absmiddle">
+ (SR)</p>
+</li>
+ <li> <p>
Made Hierarchy.log() deal gracefully with a null exception parameter.
- (PD)</li>
-<li>
-<img src="images/add.jpg" border="0" alt="added" align="absmiddle">
+ (PD)</p>
+</li>
+ <li> <p>
Added stylesheet to convert Stylebook markup to DocBook markup.
- (BL)</li>
-<li>
-<img src="images/update.jpg" border="0" alt="changed" align="absmiddle">
+ (BL)</p>
+</li>
+ <li> <p>
Deprecated AvalonFormatter and created a new Formatter inside Avalon
project.
- (BL)</li>
-<li>
-<img src="images/update.jpg" border="0" alt="changed" align="absmiddle">
+ (BL)</p>
+</li>
+ <li> <p>
Changed the documentation build process to use Cocoon to build
the site.
- (BL)</li>
-<li>
-<img src="images/update.jpg" border="0" alt="changed" align="absmiddle">
+ (BL)</p>
+</li>
+ <li> <p>
Deprecated FilterTarget it was rarely (never?) used and offers only
minor
advantages over directly using sub-classes.
- (PD)</li>
-<li>
-<img src="images/add.jpg" border="0" alt="added" align="absmiddle">
+ (PD)</p>
+</li>
+ <li> <p>
Added XMLFormatter to enable writing logs in XML format.
- (PD)</li>
-<li>
-<img src="images/update.jpg" border="0" alt="changed" align="absmiddle">
+ (PD)</p>
+</li>
+ <li> <p>
Made priority serializable.
- (PD)</li>
-</ul>
-</font></td>
-</tr>
-<tr>
-<td bgcolor="#525D76"><font face="arial,helvetica,sanserif"
color="#ffffff"><b>Revision 1.0b3
- (July 22, 2001)
- </b></font></td>
-</tr>
-<tr>
-<td><font face="arial,helvetica,sanserif" color="#000000">
-<br>
-<ul>
-<li>
-<img src="images/update.jpg" border="0" alt="changed" align="absmiddle">
+ (PD)</p>
+</li>
+ </ul>
+ </blockquote>
+ </td></tr>
+ </table>
+ </a>
+ <table border="0" cellspacing="0" cellpadding="2"
width="100%">
+ <tr><td bgcolor="#828DA6">
+ <font color="#ffffff" face="arial,helvetica,sanserif">
+ <strong>
+ Revision 1.0b3 (July 22, 2001)
+ </strong>
+ </font>
+ </td></tr>
+ <tr><td>
+ <blockquote>
+ <ul>
+ <li> <p>
Added setPriority() method to Priority filter to allow modification of
filter properties at runtime.
- (PD)</li>
-<li>
-<img src="images/update.jpg" border="0" alt="changed" align="absmiddle">
+ (PD)</p>
+</li>
+ <li> <p>
Deprecated Logger.getCategory as it violates the Inversion Of Control
principle.
- (PD)</li>
-<li>
-<img src="images/update.jpg" border="0" alt="changed" align="absmiddle">
+ (PD)</p>
+</li>
+ <li> <p>
Enhanced FileOutputLogTarget to enable it to be used to append to a
file, rather than overwrite.
- (PD)</li>
-</ul>
-</font></td>
-</tr>
-<tr>
-<td bgcolor="#525D76"><font face="arial,helvetica,sanserif"
color="#ffffff"><b>Revision 1.0b2
- (June 4, 2001)
- </b></font></td>
-</tr>
-<tr>
-<td><font face="arial,helvetica,sanserif" color="#000000">
-<br>
-<ul>
-<li>
-<img src="images/add.jpg" border="0" alt="added" align="absmiddle">
+ (PD)</p>
+</li>
+ </ul>
+ </blockquote>
+ </td></tr>
+ </table>
+ </a>
+ <table border="0" cellspacing="0" cellpadding="2"
width="100%">
+ <tr><td bgcolor="#828DA6">
+ <font color="#ffffff" face="arial,helvetica,sanserif">
+ <strong>
+ Revision 1.0b2 (June 4, 2001)
+ </strong>
+ </font>
+ </td></tr>
+ <tr><td>
+ <blockquote>
+ <ul>
+ <li> <p>
Beta 2 release.
- (BL)</li>
-<li>
-<img src="images/update.jpg" border="0" alt="changed" align="absmiddle">
+ (BL)</p>
+</li>
+ <li> <p>
Update documentation so that you can get started easily.
- (PD)</li>
-<li>
-<img src="images/fix.jpg" border="0" alt="off" align="absmiddle">
+ (PD)</p>
+</li>
+ <li> <p>
Fixed logical error in PriorityFilter. The code _used_ to allow
anything up to a priority level (i.e. if priority was set to
ERROR, then it would allow DEBUG, INFO, and WARN). Now it
operates correctly (i.e. if priority was set to ERROR, then
it will allow ERROR and FATAL_ERROR).
- (BL)</li>
-</ul>
-</font></td>
-</tr>
-<tr>
-<td bgcolor="#525D76"><font face="arial,helvetica,sanserif"
color="#ffffff"><b>Revision 1.0b1
- (May 11, 2001)
- </b></font></td>
-</tr>
-<tr>
-<td><font face="arial,helvetica,sanserif" color="#000000">
-<br>
-<ul>
-<li>
-<img src="images/add.jpg" border="0" alt="added" align="absmiddle">First
public release. (PD)</li>
-<li>
-<img src="images/update.jpg" border="0" alt="changed" align="absmiddle">
+ (BL)</p>
+</li>
+ </ul>
+ </blockquote>
+ </td></tr>
+ </table>
+ </a>
+ <table border="0" cellspacing="0" cellpadding="2"
width="100%">
+ <tr><td bgcolor="#828DA6">
+ <font color="#ffffff" face="arial,helvetica,sanserif">
+ <strong>
+ Revision 1.0b1 (May 11, 2001)
+ </strong>
+ </font>
+ </td></tr>
+ <tr><td>
+ <blockquote>
+ <ul>
+ <li> <p>First public release. (PD)</p>
+</li>
+ <li> <p>
Renamed LogEntry to LogEvent. This was done as Entry was a misnomer.
It was a misnomer as each Entry could in fact never be placed in
logs or placed in multiple logs. It is up to the LogTargets how to
treat the event and whether or not to convert the event into an entry.
Updated all interfaces that referred to entry to refer to event.
- (PD)</li>
-<li>
-<img src="images/add.jpg" border="0" alt="added" align="absmiddle">
+ (PD)</p>
+</li>
+ <li> <p>
Added getCurrentContextStack() to ContextStack class and made the
method with same name in LogKit delegate to
ContextStack.getCurrentContextStack()
- (PD)</li>
-<li>
-<img src="images/add.jpg" border="0" alt="added" align="absmiddle">
+ (PD)</p>
+</li>
+ <li> <p>
Added getDefaultLogEngine() to LogEngine and made the method with same name
in LogKit delegate to LogEngine.getDefaultLogEngine()
- (PD)</li>
-<li>
-<img src="images/update.jpg" border="0" alt="changed" align="absmiddle">
+ (PD)</p>
+</li>
+ <li> <p>
Made Priority a class in place of Priority.Enum class. Converted constants
to use this interface. Added getPriorityForName() method and made LogKit
method of same name delegate to it.
- (PD)</li>
-<li>
-<img src="images/update.jpg" border="0" alt="changed" align="absmiddle">
+ (PD)</p>
+</li>
+ <li> <p>
Made ContextStack contain objects other than strings.
- (PD)</li>
-<li>
-<img src="images/update.jpg" border="0" alt="changed" align="absmiddle">
+ (PD)</p>
+</li>
+ <li> <p>
Made each hierarchy extend from a root Logger about category "". Also put
default log target into this Logger. Thus no longer *need*
getDefaultLogTarget
method in LogEngine/LogKit - thus it was removed.
- (PD)</li>
-<li>
-<img src="images/update.jpg" border="0" alt="changed" align="absmiddle">
+ (PD)</p>
+</li>
+ <li> <p>
Made each logger cache a version of logTargets. Combine this with the root
logger
containing default log target means that you no longer have to recursively
check parents to get LogTargets or check the engine. This is considerably
faster.
- (PD)</li>
-<li>
-<img src="images/update.jpg" border="0" alt="changed" align="absmiddle">
+ (PD)</p>
+</li>
+ <li> <p>
Made "category" behave identically to logTarget inheritance wise.
Each logger caches priority when it is inherited from parents. This is
slightly faster than old version.
- (PD)</li>
-<li>
-<img src="images/remove.jpg" border="0" alt="deleted" align="absmiddle">
+ (PD)</p>
+</li>
+ <li> <p>
Merged "Category" object into Logger. This required adding getPriority to
Logger and making Logger.getCategory() return name of category rather than
Category object.
- (PD)</li>
-<li>
-<img src="images/fix.jpg" border="0" alt="off" align="absmiddle">
+ (PD)</p>
+</li>
+ <li> <p>
Protected logger manipulation by synchronized sections
- (PD)</li>
-<li>
-<img src="images/update.jpg" border="0" alt="changed" align="absmiddle">
+ (PD)</p>
+</li>
+ <li> <p>
Made ServletOutputTarget not filter - leave that to a separate FilterTarget
- (PD)</li>
-<li>
-<img src="images/update.jpg" border="0" alt="changed" align="absmiddle">
+ (PD)</p>
+</li>
+ <li> <p>
Moved instance variables to private instead of protected were appopriate.
This allows to decrease maintanence cost just in case someone inherits
from one of our classes.
- (PD)</li>
-<li>
-<img src="images/remove.jpg" border="0" alt="deleted" align="absmiddle">
+ (PD)</p>
+</li>
+ <li> <p>
Removed the hashtable that stored log targets as it can be easily done
by users of LogKit and wasn't serving any real purpose.
- (PD)</li>
-<li>
-<img src="images/update.jpg" border="0" alt="changed" align="absmiddle">
+ (PD)</p>
+</li>
+ <li> <p>
Renamed LogEngine to Hierarchy to match Log4j and allow easy cross
migration
- (PD)</li>
-</ul>
-</font></td>
-</tr>
-</table>
-</div>
-</td>
-</tr>
-</table>
-<br>
-<table cellpadding="0" cellspacing="0" border="0" width="100%">
-<tr>
-<td>
-<hr size="1" noshade="">
-</td>
-</tr>
-<tr>
-<td align="center"><font color="#525D76" size="-1"
face="arial,helvetica,sanserif"><i>
- Copyright ©1999-2002 by the Apache Software Foundation.
- All Rights Reserved.
- </i></font></td>
-</tr>
-</table>
-</body>
-</html>
+ (PD)</p>
+</li>
+ </ul>
+ </blockquote>
+ </td></tr>
+ </table>
+ </a>
+ </blockquote>
+ </td></tr>
+ </table>
+ </div>
+ <div align="right" id="authors">
+ </div>
+ </div></td>
+ </tr>
+ </table>
+
+ <!-- FOOTER -->
+ <div id="footer">
+ <table border="0" cellspacing="0" cellpadding="4">
+ <tr>
+ <td>Copyright © 1999-2002, Apache Software Foundation</td>
+ </tr>
+ </table>
+ </div>
+
+ </body>
+ </html>
+
+<!-- end the processing -->
+
+
+
1.7 +193 -135 jakarta-avalon-site/docs/logkit/features.html
Index: features.html
===================================================================
RCS file: /home/cvs/jakarta-avalon-site/docs/logkit/features.html,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- features.html 2 Apr 2002 17:21:18 -0000 1.6
+++ features.html 10 Jul 2002 04:18:31 -0000 1.7
@@ -1,168 +1,226 @@
-<html>
-<head>
-<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<title>Logkit - Features</title>
-</head>
-<body bgcolor="#ffffff" marginheight="4" marginwidth="4" leftmargin="4"
topmargin="4" alink="#023264" vlink="#023264" link="#525D76" text="#000000">
-<table border="0" cellpadding="0" cellspacing="0" width="100%">
-<tr>
-<td align="left" valign="top"><a
href="http://jakarta.apache.org/index.html"><img src="images/jakarta-logo.gif"
border="0" vspace="0" hspace="0"></a></td><td bgcolor="#ffffff" align="left"
valign="top" width="100%"><img src="images/header.gif" align="right" border="0"
vspace="0" hspace="0"></td>
-</tr>
-<tr>
-<td colspan="2" height="2" width="100%">
-<hr size="1" noshade="">
-</td>
-</tr>
-</table>
-<table border="0" cellpadding="0" cellspacing="0" width="100%">
-<tr>
-<td valign="top" width="1%"></td><td nowrap="1" valign="top" width="14%">
-<br>
-<font face="arial,helvetica,sanserif">
-<br>
-<br>
-<a href="http://jakarta.apache.org/avalon"><font size="+1"
color="#778899">Back to Avalon</font></a>
-<br>
-<br>
-<font size="+1" color="#000000">About</font>
-<br>
-<font size="-1">
-<ul>
-<li>
-<a href="index.html"><font size="-1">Overview</font></a>
-</li>
-<li>
-<a href="features.html"><font size="-1">Features</font></a>
-</li>
-<li>
-<a
href="http://jakarta.apache.org/builds/jakarta-avalon/release/logkit/latest"><font
size="-1">Download</font></a>
-</li>
-<li>
-<a href="whitepaper.html"><font size="-1">Whitepaper</font></a>
-</li>
-<li>
-<a href="changes.html"><font size="-1">Changes</font></a>
-</li>
-<li>
-<a href="http://jakarta.apache.org/avalon/logkit/api/index.html"><font
size="-1">API Docs</font></a>
-</li>
-</ul>
-</font>
-<br>
-<br>
-</font></td><td align="left" valign="top" width="*">
-<title>Logkit - Features</title>
-<center>
-<table width="100%">
-<tr>
-<td bgcolor="#99aabb">
-<center>
-<b><font face="arial,helvetica,sanserif" color="#000000" size="+2">Logkit -
Features</font></b>
-</center>
-</td>
-</tr>
-</table>
-</center>
-<br>
-<font size="-2" face="arial,helvetica,sanserif" color="#000000">
-<p>by <a href="mailto:[EMAIL PROTECTED]">Peter Donald</a>
-</p>
-</font><font face="arial,helvetica,sanserif" color="#000000"></font>
-<br>
-<div align="right">
-<table cellspacing="0" cellpadding="2" border="0" width="100%">
-<tr>
-<td bgcolor="bbccdd"><font face="arial,helvetica,sanserif" color="#000000"
size="+1"><b>Features</b></font></td>
-</tr>
-<tr>
-<td><font face="arial,helvetica,sanserif" color="#000000">
-<br>
-
-<p align="justify">
-
-<em>This document is under construction!</em>
-<p align="justify"></p>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<!-- This is a generated file. Do not edit. -->
+ <html>
+ <head>
+ <style type="text/css">
+ @import url("./css/tigris.css");
+ @import url("./css/site.css");
+ </style>
+ <meta http-equiv="Content-Type" content="text/html;
charset=iso-8859-1"/>
+
+ <meta name="author" value="Peter Donald">
+ <meta name="email" value="[EMAIL PROTECTED]">
+
+ <title>LogKit - Logkit - Features</title>
+ </head>
+
+ <body marginwidth="0" marginheight="0" class="composite">
+
+ <div id="banner">
+ <table border="0" cellspacing="0" cellpadding="8" width="100%">
+ <!-- TOP IMAGE -->
+ <tr>
+ <td> <td align="left">
+ <a href="http://jakarta.apache.org"><img
src="http://jakarta.apache.org/images/jakarta-logo.gif" border="0"/></a>
+ </td>
+ <td align="right">
+ <a href="http://jakarta.apache.org/avalon/logkit"><img
src="./images/header.gif" alt="LogKit" border="0"/></a>
+ </td>
+ </td>
+ <td><div align="right" valign="bottom"><b><font
size="+3">LogKit</font></b></div></td>
+ </tr>
+ </table>
+ </div>
+
+ <table border="0" cellspacing="0" cellpadding="8" width="100%"
id="main">
+ <tr valign="top">
+ <!-- LEFT SIDE NAVIGATION -->
+ <td id="leftcol" width="20%">
+ <div id="navcolumn">
+ <div>
+ <strong>About</strong>
+ <div><small> <a href="./index.html">Overview</a>
+ </small></div>
+ <div><small> <a href="./features.html">Features</a>
+ </small></div>
+ <div><small> <a
href="http://jakarta.apache.org/builds/jakarta-avalon/release/logkit/latest">Download</a>
+ </small></div>
+ <div><small> <a href="./whitepaper.html">Whitepaper</a>
+ </small></div>
+ <div><small> <a href="./changes.html">Changes</a>
+ </small></div>
+ <div><small> <a
href="http://jakarta.apache.org/avalon/logkit/api/index.html">API Docs</a>
+ </small></div>
+ </div>
+ </div>
+ </td>
+ <td><div id="bodycol"><div class="app">
+()
+ <div class="h3">
+ <h3><a name="Features">Features</a></h3>
+ <p
+ >
+
+ <strong
+ > This document is under construction!
+ </strong>
+ <br
+ >
+ </br>
+
The LogKit provides the following features:
- </p>
-<ul>
+ </p>
+ <ul
+ >
-<li>
+ <li
+ >
Decouples LogEvent generation from LogEvent handling.
- </li>
-<li>
+ </li>
+
+
+ <li
+ >
Is simple to use and simple to configure.
- </li>
-<li>
+ </li>
+
+
+ <li
+ >
Designed with security in mind.
- </li>
-<li>
+ </li>
+
+
+ <li
+ >
Allow users fine control of logging based on priority and/or category.
- </li>
-<li>
+ </li>
+
+
+ <li
+ >
Has hierarchical logging namespace to enable inheritance of LogTargets
and
Priorities.
- </li>
-<li>
+ </li>
+
+
+ <li
+ >
Lightweight.
- </li>
-<li>
+ </li>
+
+
+ <li
+ >
Designed to be integrated into existing products.
- </li>
-<li>
+ </li>
+
+
+ <li
+ >
Performance oriented.
- </li>
-<li>
+ </li>
+
+
+ <li
+ >
Enables users to plug in filters to filter out or modify LogEvents
before they are written out.
- </li>
-<li>
+ </li>
+
+
+ <li
+ >
Allow users to specify the serialization format of LogEvents via
Formatters.
- </li>
-<li>
+ </li>
+
+
+ <li
+ >
Comes with a number of existing LogTargets to ease integration.
- </li>
-<li>
+ </li>
+
+
+ <li
+ >
The LogKit has existed for a number years and been used in a number of
different environments which demonstrates it's reliability and
stability.
- </li>
+
+ </li>
+
-</ul>
+ </ul>
+ </div>
+ </div>
+ <div align="right" id="authors">
+ by <a href="[EMAIL PROTECTED]">Peter Donald</a>
+ </div>
+ </div></td>
+ </tr>
+ </table>
+ <!-- FOOTER -->
+ <div id="footer">
+ <table border="0" cellspacing="0" cellpadding="4">
+ <tr>
+ <td>Copyright © 1999-2002, Apache Software Foundation</td>
+ </tr>
+ </table>
+ </div>
-</font></td>
-</tr>
-</table>
-</div>
-<br>
-</td>
-</tr>
-</table>
-<br>
-<table cellpadding="0" cellspacing="0" border="0" width="100%">
-<tr>
-<td>
-<hr size="1" noshade="">
-</td>
-</tr>
-<tr>
-<td align="center"><font color="#525D76" size="-1"
face="arial,helvetica,sanserif"><i>
- Copyright ©1999-2002 by the Apache Software Foundation.
- All Rights Reserved.
- </i></font></td>
-</tr>
-</table>
-</body>
-</html>
+ </body>
+ </html>
+()
1.7 +140 -108 jakarta-avalon-site/docs/logkit/index.html
Index: index.html
===================================================================
RCS file: /home/cvs/jakarta-avalon-site/docs/logkit/index.html,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- index.html 2 Apr 2002 17:21:18 -0000 1.6
+++ index.html 10 Jul 2002 04:18:31 -0000 1.7
@@ -1,111 +1,143 @@
-<html>
-<head>
-<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<title>LogKit - Introduction</title>
-</head>
-<body bgcolor="#ffffff" marginheight="4" marginwidth="4" leftmargin="4"
topmargin="4" alink="#023264" vlink="#023264" link="#525D76" text="#000000">
-<table border="0" cellpadding="0" cellspacing="0" width="100%">
-<tr>
-<td align="left" valign="top"><a
href="http://jakarta.apache.org/index.html"><img src="images/jakarta-logo.gif"
border="0" vspace="0" hspace="0"></a></td><td bgcolor="#ffffff" align="left"
valign="top" width="100%"><img src="images/header.gif" align="right" border="0"
vspace="0" hspace="0"></td>
-</tr>
-<tr>
-<td colspan="2" height="2" width="100%">
-<hr size="1" noshade="">
-</td>
-</tr>
-</table>
-<table border="0" cellpadding="0" cellspacing="0" width="100%">
-<tr>
-<td valign="top" width="1%"></td><td nowrap="1" valign="top" width="14%">
-<br>
-<font face="arial,helvetica,sanserif">
-<br>
-<br>
-<a href="http://jakarta.apache.org/avalon"><font size="+1"
color="#778899">Back to Avalon</font></a>
-<br>
-<br>
-<font size="+1" color="#000000">About</font>
-<br>
-<font size="-1">
-<ul>
-<li>
-<a href="index.html"><font size="-1">Overview</font></a>
-</li>
-<li>
-<a href="features.html"><font size="-1">Features</font></a>
-</li>
-<li>
-<a
href="http://jakarta.apache.org/builds/jakarta-avalon/release/logkit/latest"><font
size="-1">Download</font></a>
-</li>
-<li>
-<a href="whitepaper.html"><font size="-1">Whitepaper</font></a>
-</li>
-<li>
-<a href="changes.html"><font size="-1">Changes</font></a>
-</li>
-<li>
-<a href="http://jakarta.apache.org/avalon/logkit/api/index.html"><font
size="-1">API Docs</font></a>
-</li>
-</ul>
-</font>
-<br>
-<br>
-</font></td><td align="left" valign="top" width="*">
-<title>LogKit - Introduction</title>
-<center>
-<table width="100%">
-<tr>
-<td bgcolor="#99aabb">
-<center>
-<b><font face="arial,helvetica,sanserif" color="#000000" size="+2">LogKit -
Introduction</font></b>
-</center>
-</td>
-</tr>
-</table>
-</center>
-<br>
-<font size="-2" face="arial,helvetica,sanserif" color="#000000">
-<p>by <a href="mailto:[email protected]">Avalon Documentation
Team</a>
-</p>
-</font><font face="arial,helvetica,sanserif" color="#000000"></font>
-<br>
-<div align="right">
-<table cellspacing="0" cellpadding="2" border="0" width="100%">
-<tr>
-<td bgcolor="bbccdd"><font face="arial,helvetica,sanserif" color="#000000"
size="+1"><b>Introduction</b></font></td>
-</tr>
-<tr>
-<td><font face="arial,helvetica,sanserif" color="#000000">
-<br>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<!-- This is a generated file. Do not edit. -->
+ <html>
+ <head>
+ <style type="text/css">
+ @import url("./css/tigris.css");
+ @import url("./css/site.css");
+ </style>
+ <meta http-equiv="Content-Type" content="text/html;
charset=iso-8859-1"/>
+
+ <meta name="author" value="Avalon Documentation Team">
+ <meta name="email" value="[email protected]">
-<p align="justify">
+ <title>LogKit - LogKit - Introduction</title>
+ </head>
+
+ <body marginwidth="0" marginheight="0" class="composite">
+
+ <div id="banner">
+ <table border="0" cellspacing="0" cellpadding="8" width="100%">
+ <!-- TOP IMAGE -->
+ <tr>
+ <td> <td align="left">
+ <a href="http://jakarta.apache.org"><img
src="http://jakarta.apache.org/images/jakarta-logo.gif" border="0"/></a>
+ </td>
+ <td align="right">
+ <a href="http://jakarta.apache.org/avalon/logkit"><img
src="./images/header.gif" alt="LogKit" border="0"/></a>
+ </td>
+ </td>
+ <td><div align="right" valign="bottom"><b><font
size="+3">LogKit</font></b></div></td>
+ </tr>
+ </table>
+ </div>
+
+ <table border="0" cellspacing="0" cellpadding="8" width="100%"
id="main">
+ <tr valign="top">
+ <!-- LEFT SIDE NAVIGATION -->
+ <td id="leftcol" width="20%">
+ <div id="navcolumn">
+ <div>
+ <strong>About</strong>
+ <div><small> <a href="./index.html">Overview</a>
+ </small></div>
+ <div><small> <a href="./features.html">Features</a>
+ </small></div>
+ <div><small> <a
href="http://jakarta.apache.org/builds/jakarta-avalon/release/logkit/latest">Download</a>
+ </small></div>
+ <div><small> <a href="./whitepaper.html">Whitepaper</a>
+ </small></div>
+ <div><small> <a href="./changes.html">Changes</a>
+ </small></div>
+ <div><small> <a
href="http://jakarta.apache.org/avalon/logkit/api/index.html">API Docs</a>
+ </small></div>
+ </div>
+ </div>
+ </td>
+ <td><div id="bodycol"><div class="app">
+ <div class="h3">
+ <h3><a name="Introduction">Introduction</a></h3>
+ <p
+ >
LogKit is a logging toolkit designed for secure performance oriented
logging
in applications. To get started using LogKit, it is recomended that
you read the
- <a href="whitepaper.html">whitepaper</a> and browse the
- <a href="http://jakarta.apache.org/avalon/logkit/api/index.html">API
docs</a>.
- </p>
-
-</font></td>
-</tr>
-</table>
-</div>
-<br>
-</td>
-</tr>
-</table>
-<br>
-<table cellpadding="0" cellspacing="0" border="0" width="100%">
-<tr>
-<td>
-<hr size="1" noshade="">
-</td>
-</tr>
-<tr>
-<td align="center"><font color="#525D76" size="-1"
face="arial,helvetica,sanserif"><i>
- Copyright ©1999-2002 by the Apache Software Foundation.
- All Rights Reserved.
- </i></font></td>
-</tr>
-</table>
-</body>
-</html>
+
+ <link
+ href="whitepaper.html"
+ type="simple"
+ show="replace"
+ actuate="user"
+ > whitepaper
+ </link>
+ and browse the
+
+ <link
+ href="http://jakarta.apache.org/avalon/logkit/api/index.html"
+ type="simple"
+ show="replace"
+ actuate="user"
+ > API docs
+ </link>
+ .
+
+ </p>
+ </div>
+ </div>
+ <div align="right" id="authors">
+ by <a href="[email protected]">Avalon
Documentation Team</a>
+ </div>
+ </div></td>
+ </tr>
+ </table>
+
+ <!-- FOOTER -->
+ <div id="footer">
+ <table border="0" cellspacing="0" cellpadding="4">
+ <tr>
+ <td>Copyright © 1999-2002, Apache Software Foundation</td>
+ </tr>
+ </table>
+ </div>
+
+ </body>
+ </html>
1.7 +382 -523 jakarta-avalon-site/docs/logkit/whitepaper.html
Index: whitepaper.html
===================================================================
RCS file: /home/cvs/jakarta-avalon-site/docs/logkit/whitepaper.html,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- whitepaper.html 2 Apr 2002 17:21:18 -0000 1.6
+++ whitepaper.html 10 Jul 2002 04:18:31 -0000 1.7
@@ -1,169 +1,156 @@
-<html>
-<head>
-<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<title>LogKit - Whitepaper</title>
-</head>
-<body bgcolor="#ffffff" marginheight="4" marginwidth="4" leftmargin="4"
topmargin="4" alink="#023264" vlink="#023264" link="#525D76" text="#000000">
-<table border="0" cellpadding="0" cellspacing="0" width="100%">
-<tr>
-<td align="left" valign="top"><a
href="http://jakarta.apache.org/index.html"><img src="images/jakarta-logo.gif"
border="0" vspace="0" hspace="0"></a></td><td bgcolor="#ffffff" align="left"
valign="top" width="100%"><img src="images/header.gif" align="right" border="0"
vspace="0" hspace="0"></td>
-</tr>
-<tr>
-<td colspan="2" height="2" width="100%">
-<hr size="1" noshade="">
-</td>
-</tr>
-</table>
-<table border="0" cellpadding="0" cellspacing="0" width="100%">
-<tr>
-<td valign="top" width="1%"></td><td nowrap="1" valign="top" width="14%">
-<br>
-<font face="arial,helvetica,sanserif">
-<br>
-<br>
-<a href="http://jakarta.apache.org/avalon"><font size="+1"
color="#778899">Back to Avalon</font></a>
-<br>
-<br>
-<font size="+1" color="#000000">About</font>
-<br>
-<font size="-1">
-<ul>
-<li>
-<a href="index.html"><font size="-1">Overview</font></a>
-</li>
-<li>
-<a href="features.html"><font size="-1">Features</font></a>
-</li>
-<li>
-<a
href="http://jakarta.apache.org/builds/jakarta-avalon/release/logkit/latest"><font
size="-1">Download</font></a>
-</li>
-<li>
-<a href="whitepaper.html"><font size="-1">Whitepaper</font></a>
-</li>
-<li>
-<a href="changes.html"><font size="-1">Changes</font></a>
-</li>
-<li>
-<a href="http://jakarta.apache.org/avalon/logkit/api/index.html"><font
size="-1">API Docs</font></a>
-</li>
-</ul>
-</font>
-<br>
-<br>
-</font></td><td align="left" valign="top" width="*">
-<title>LogKit - Whitepaper</title>
-<center>
-<table width="100%">
-<tr>
-<td bgcolor="#99aabb">
-<center>
-<b><font face="arial,helvetica,sanserif" color="#000000" size="+2">LogKit -
Whitepaper</font></b>
-</center>
-</td>
-</tr>
-</table>
-</center>
-<br>
-<font size="-2" face="arial,helvetica,sanserif" color="#000000">
-<p>by <a href="mailto:[EMAIL PROTECTED]">Peter Donald</a>
-</p>
-</font><font face="arial,helvetica,sanserif" color="#000000"></font>
-<br>
-<div align="right">
-<table cellspacing="0" cellpadding="2" border="0" width="100%">
-<tr>
-<td bgcolor="bbccdd"><font face="arial,helvetica,sanserif" color="#000000"
size="+1"><b>Abstract</b></font></td>
-</tr>
-<tr>
-<td><font face="arial,helvetica,sanserif" color="#000000">
-<br>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<!-- This is a generated file. Do not edit. -->
+ <html>
+ <head>
+ <style type="text/css">
+ @import url("./css/tigris.css");
+ @import url("./css/site.css");
+ </style>
+ <meta http-equiv="Content-Type" content="text/html;
charset=iso-8859-1"/>
+
+ <meta name="author" value="Peter Donald">
+ <meta name="email" value="[EMAIL PROTECTED]">
-<p align="justify">
+ <title>LogKit - LogKit - Whitepaper</title>
+ </head>
+
+ <body marginwidth="0" marginheight="0" class="composite">
+
+ <div id="banner">
+ <table border="0" cellspacing="0" cellpadding="8" width="100%">
+ <!-- TOP IMAGE -->
+ <tr>
+ <td> <td align="left">
+ <a href="http://jakarta.apache.org"><img
src="http://jakarta.apache.org/images/jakarta-logo.gif" border="0"/></a>
+ </td>
+ <td align="right">
+ <a href="http://jakarta.apache.org/avalon/logkit"><img
src="./images/header.gif" alt="LogKit" border="0"/></a>
+ </td>
+ </td>
+ <td><div align="right" valign="bottom"><b><font
size="+3">LogKit</font></b></div></td>
+ </tr>
+ </table>
+ </div>
+
+ <table border="0" cellspacing="0" cellpadding="8" width="100%"
id="main">
+ <tr valign="top">
+ <!-- LEFT SIDE NAVIGATION -->
+ <td id="leftcol" width="20%">
+ <div id="navcolumn">
+ <div>
+ <strong>About</strong>
+ <div><small> <a href="./index.html">Overview</a>
+ </small></div>
+ <div><small> <a href="./features.html">Features</a>
+ </small></div>
+ <div><small> <a
href="http://jakarta.apache.org/builds/jakarta-avalon/release/logkit/latest">Download</a>
+ </small></div>
+ <div><small> <a href="./whitepaper.html">Whitepaper</a>
+ </small></div>
+ <div><small> <a href="./changes.html">Changes</a>
+ </small></div>
+ <div><small> <a
href="http://jakarta.apache.org/avalon/logkit/api/index.html">API Docs</a>
+ </small></div>
+ </div>
+ </div>
+ </td>
+ <td><div id="bodycol"><div class="app">
+ <div class="h3">
+ <h3><a name="Abstract">Abstract</a></h3>
+ <p
+ >
Logging is an integral component to any software development
project.
During the development stages it offers a valuable source of
debugging
information for the developer. During deployment it can provide
valuable
operational data that allows administrators to diagnose problems as
they
arise. This whitepaper describes the design and implementation of
LogKit.
- </p>
-
-</font></td>
-</tr>
-</table>
-</div>
-<br>
-<div align="right">
-<table cellspacing="0" cellpadding="2" border="0" width="100%">
-<tr>
-<td bgcolor="bbccdd"><font face="arial,helvetica,sanserif" color="#000000"
size="+1"><b>Introduction</b></font></td>
-</tr>
-<tr>
-<td><font face="arial,helvetica,sanserif" color="#000000">
-<br>
-
-<p align="justify">
+ </p>
+ </div>
+ <div class="h3">
+ <h3><a name="Introduction">Introduction</a></h3>
+ <p
+ >
LogKit, began life as a facade for a more complex logging toolkit.
During
development it was found that existing toolkits were complex and
difficult
to use. A malformed logger configuration file could cause the whole
system
to fail or the logging information to go into the void.
- </p>
-
-<p align="justify">
+ </p>
+ <p
+ >
Over time it was discovered that the facade, while simple to use,
inherited
many of the faults of the underlying logging toolkit. The logging
was slow
and was impossible to dynamically reconfigure.
- </p>
-
-<p align="justify">
+ </p>
+ <p
+ >
At this time the whole system was overhauled. Existing logging
toolkits
were surveyed and user feedback was gathered from both developers
and
administrators. The new toolkit focused on speed, reliability and
dynamic
reconfiguration. It then added, at that time unique features, for
filtering
log events, multiple listeners (aka LogTargets) per category and
delayed
serialization of events.
- </p>
-
-
-</font></td>
-</tr>
-</table>
-</div>
-<br>
-<div align="right">
-<table cellspacing="0" cellpadding="2" border="0" width="100%">
-<tr>
-<td bgcolor="bbccdd"><font face="arial,helvetica,sanserif" color="#000000"
size="+1"><b>Structure and Elements</b></font></td>
-</tr>
-<tr>
-<td><font face="arial,helvetica,sanserif" color="#000000">
-<br>
-
-<p align="justify">
+ </p>
+ </div>
+ <div class="h3">
+ <h3><a name="Structure and Elements">Structure and
Elements</a></h3>
+ <p
+ >
The most basic components of LogKit are the Logger, the LogEvent and
the
LogTarget. The Logger represents the client interface to the logging
system.
The developer interacts with Logger to generate LogEvents. The
LogEvents
are routed to a LogTarget. The LogTarget decides what to do with the
LogEvent,
usually it is recorded to a file, a database or transmitted over the
network.
- </p>
-
-</font></td>
-</tr>
-</table>
-</div>
-<br>
-<div align="right">
-<table cellspacing="0" cellpadding="2" border="0" width="100%">
-<tr>
-<td bgcolor="bbccdd"><font face="arial,helvetica,sanserif" color="#000000"
size="+1"><b>Priorities</b></font></td>
-</tr>
-<tr>
-<td><font face="arial,helvetica,sanserif" color="#000000">
-<br>
-<p align="justify">
+ </p>
+ </div>
+ <div class="h3">
+ <h3><a name="Priorities">Priorities</a></h3>
+ <p
+ >
One of the advantages of a logging toolkit is fine grain control
over which
statements get printed. At some times during development you may
wish to enable
all logging statements and at other times they may wish to disable
debug
@@ -171,213 +158,214 @@
A Priority describes the urgency of a LogEvent. Below is a list of
priorities
that are usable within the LogKit system (extracted from the
constants of class
org.apache.log.Priority).
- </p>
-
-<ul>
+ </p>
+ <ul
+ >
-<li>
+ <li
+ >
-<em>DEBUG:</em>
-<p align="justify"></p>
+ <strong
+ > DEBUG:
+ </strong>
+ <br
+ >
+ </br>
+
Developer oriented messages, usually used during development of
the product.
- </li>
-<li>
+ </li>
+
+
+ <li
+ >
-<em>INFO:</em>
-<p align="justify"></p>
+ <strong
+ > INFO:
+ </strong>
+ <br
+ >
+ </br>
+
Useful information messages such as state changes, client
connection, user login etc.
- </li>
-<li>
+ </li>
+
+
+ <li
+ >
-<em>WARN:</em>
-<p align="justify"></p>
+ <strong
+ > WARN:
+ </strong>
+ <br
+ >
+ </br>
+
A problem or conflict has occurred but it may be recoverable, then
again it could be the start of the system failing.
- </li>
-<li>
+ </li>
+
+
+ <li
+ >
-<em>ERROR:</em>
-<p align="justify"></p>
+ <strong
+ > ERROR:
+ </strong>
+ <br
+ >
+ </br>
+
A problem has occurred but it is not fatal. The system will still
function.
- </li>
-<li>
+ </li>
+
+
+ <li
+ >
-<em>FATAL_ERROR:</em>
-<p align="justify"></p>
+ <strong
+ > FATAL_ERROR:
+ </strong>
+ <br
+ >
+ </br>
+
Something caused whole system to fail. This indicates that an
administrator
should restart the system and try to fix the problem that caused
the failure.
- </li>
-
-</ul>
-
+
+ </li>
+
-<p align="justify">
+ </ul>
+ <p
+ >
The range of priorities is limited by design as past experience has
indicated more levels do not offer any significant advantage to the
user.
- </p>
-
-<p align="justify">
+ </p>
+ <p
+ >
Each logger instance is associated with a Priority. This allows you
to limit
each logger so that it only displays messages greater than a certain
priority.
So if a DEBUG message occurred and the logger's priority was WARN,
the LogEvent
would be suppressed.
- </p>
-
-<p align="justify">
+ </p>
+ <p
+ >
A user can log at a certain priority by calling a method with
matching name and
the message as a string. For instance to log at debug level you
would call
logger.debug("My Message"). Similar methods exist for info(), warn()
and error().
There is also a set of similarly named methods that take both a
message string
and an exception.
- </p>
-
-<p align="justify">
+ </p>
+ <p
+ >
Where performance is critical it is often useful to check if a
priority is
enabled before constructing the message. In many cases the
construction of
the message is an expensive string operation and conversion
operation. In this
case it is useful to know before you create the message whether it
will be
logged. The pattern of the method to check if a priority is enabled
is
- "is<em>Priority</em>Enabled()". An example use case is displayed
below.
- </p>
-
-
-<div align="center">
-<table cellspacing="2" cellpadding="2" border="1">
-<tr>
-<td>
-<pre>
-if( logger.isDebugEnabled() )
+ "is
+ <em
+ > Priority
+ </em>
+ Enabled()". An example use case is displayed
below.
+
+ </p>
+ <div id="source">
+ <pre>if( logger.isDebugEnabled() )
{
//Construct a message (expensive operation)
- final String message = "Var1 value: " + var1 + "\tVar2 value: " + var2 +
- "\tVar3 value: " + var3 + ".";
+ final String message = "Var1 value: " + var1 + "\tVar2
value: " + var2 +
+ "\tVar3 value: " + var3 + ".";
logger.debug( message );
-}
-</pre>
-</td>
-</tr>
-</table>
-</div>
-
-
-</font></td>
-</tr>
-</table>
-</div>
-<br>
-<div align="right">
-<table cellspacing="0" cellpadding="2" border="0" width="100%">
-<tr>
-<td bgcolor="bbccdd"><font face="arial,helvetica,sanserif" color="#000000"
size="+1"><b>Categories</b></font></td>
-</tr>
-<tr>
-<td><font face="arial,helvetica,sanserif" color="#000000">
-<br>
-
-
-<p align="justify">
+}</pre>
+ </div>
+ </div>
+ <div class="h3">
+ <h3><a name="Categories">Categories</a></h3>
+ <p
+ >
In a complex system it is often not enough to suppress logging based
on priority.
For instance you may wish to log the network subsystem with DEBUG
priority while
the simulator subsystem with WARN priority. To accomplish this
LogKit uses a concept
termed Categories. Categories, often called Channels, Subjects or
Facilities, are
a subdivision of the logging namespace.
- </p>
-
-<p align="justify">
+ </p>
+ <p
+ >
Each category is a name, made up of name components separated by a
".". So
a category named "network.interceptor.connected" is made up of three
name
components "network", "interceptor" and "connected", ordered from
left to
right. Every logger is associated with a category at creation.
- </p>
-
-<p align="justify">
+ </p>
+ <p
+ >
LogKit takes it one step further and assumes that the namespace is
hierarchical.
The left-most name component is the most generic category while the
right-most
name component is the most specific. So
"network.interceptor.connected" is a child
category of "network.interceptor", which is in turn a child category
of "network".
There is also a root category "" that is hidden inside the
org.apache.log.Hierarchy
class.
- </p>
-
-<p align="justify">
+ </p>
+ <p
+ >
The main reason for structuring logging namespace in a hierarchical
manner is to
allow inheritance. A logger will inherit it's parent priority if it
has not
been explicitly set. This allows you to set the "network" logger to
have INFO
priority and unless the "network.interceptor" has had it's priority
set it will
inherit the INFO priority.
- </p>
-
-<p align="justify">
+ </p>
+ <p
+ >
Unlike other logging toolkits, there is no performance penalty for
having deep
hierarchies. Each logger caches a Priority to check against. When a
logger
has it's logger set or unset, it updates the cached version of it's
child
loggers.
- </p>
-
-
-</font></td>
-</tr>
-</table>
-</div>
-<br>
-<div align="right">
-<table cellspacing="0" cellpadding="2" border="0" width="100%">
-<tr>
-<td bgcolor="bbccdd"><font face="arial,helvetica,sanserif" color="#000000"
size="+1"><b>Log Targets</b></font></td>
-</tr>
-<tr>
-<td><font face="arial,helvetica,sanserif" color="#000000">
-<br>
-
-<p align="justify">
+ </p>
+ </div>
+ <div class="h3">
+ <h3><a name="Log Targets">Log Targets</a></h3>
+ <p
+ >
In LogKit, LogTargets are the destination of LogEvents. Decoupling
LogEvent
generation from handling allows developers to change destinations of
LogEvents
dynamically or via configuration files. Possible destinations
include writing
to a database, a file, an IRC channel, a syslog server, an instant
messaging
client etc.
- </p>
-
-<p align="justify">
+ </p>
+ <p
+ >
Like Priorities, it is often useful to allow LogTargets to be
inherited between
loggers. Like Priority inheritance, LogTarget inheritance does not
suffer any
runtime performance penalty.
- </p>
-
-<div align="right">
-<table cellspacing="0" cellpadding="2" border="0" width="99%">
-<tr>
-<td bgcolor="ddeeff"><font face="arial,helvetica,sanserif" color="#000000"
size="+0"><b>Filters</b></font></td>
-</tr>
-<tr>
-<td><font face="arial,helvetica,sanserif" color="#000000">
-<br>
-
-
-<p align="justify">
+ </p>
+ <div class="h4">
+ <h4><a name="Filters">Filters</a></h4>
+ <p
+ >
Filters are a special kind of LogTarget. Instead of writing to an
output
destination they are used to filter out LogEvents or modify the
LogEvents
details and pass it on to another LogTarget.
- </p>
-
-<p align="justify">
+ </p>
+ <p
+ >
This can be a useful feature when you assign multiple LogTargets
to a
logger. For instance you may add two LogTargets to a logger, one
which
writes LogEvents to a database and one which writes a message to
the
@@ -385,96 +373,55 @@
the database but only transmit FATAL_ERROR messages to pager. In
this
case you would use a PriorityFilter to filter out non-FATAL_ERROR
messages
for pager log target.
- </p>
-
-
-</font></td>
-</tr>
-</table>
-</div>
-<br>
-
-
-<div align="right">
-<table cellspacing="0" cellpadding="2" border="0" width="99%">
-<tr>
-<td bgcolor="ddeeff"><font face="arial,helvetica,sanserif" color="#000000"
size="+0"><b>AsyncLogTarget</b></font></td>
-</tr>
-<tr>
-<td><font face="arial,helvetica,sanserif" color="#000000">
-<br>
-
-<p align="justify">
+ </p>
+ </div>
+ <div class="h4">
+ <h4><a name="AsyncLogTarget">AsyncLogTarget</a></h4>
+ <p
+ >
AsyncLogTarget is another kind of special LogTarget. It takes a
log event
and copies it into a queue so that another thread can actually
write the
LogEvent to another LogTarget. This is useful if logging to a
particular
LogTarget is a slow operation (such as a MailLogTarget).
- </p>
-
-<p align="justify">
+ </p>
+ <p
+ >
Below is a snippet of code that creates an AsyncLogTarget to write
messages
in another thread.
- </p>
-
-
-<div align="center">
-<table cellspacing="2" cellpadding="2" border="1">
-<tr>
-<td>
-<pre>
-LogTarget mySlowTarget = ...;
+
+ </p>
+ <div id="source">
+ <pre>LogTarget mySlowTarget = ...;
AsyncLogTarget asyncTarget = new AsyncLogTarget( mySlowTarget );
Thread thread = new Thread( asyncTarget );
thread.setPriority( Thread.MIN_PRIORITY );
thread.start();
-logger.setLogTargets( new LogTarget[] { asyncTarget } );
-</pre>
-</td>
-</tr>
-</table>
-</div>
-
-</font></td>
-</tr>
-</table>
-</div>
-<br>
-
-
-</font></td>
-</tr>
-</table>
-</div>
-<br>
-<div align="right">
-<table cellspacing="0" cellpadding="2" border="0" width="100%">
-<tr>
-<td bgcolor="bbccdd"><font face="arial,helvetica,sanserif" color="#000000"
size="+1"><b>Formatters</b></font></td>
-</tr>
-<tr>
-<td><font face="arial,helvetica,sanserif" color="#000000">
-<br>
-
-
-<p align="justify">
+logger.setLogTargets( new LogTarget[] { asyncTarget } );</pre>
+ </div>
+ </div>
+ </div>
+ <div class="h3">
+ <h3><a name="Formatters">Formatters</a></h3>
+ <p
+ >
LogTargets that write to a serial or unstructured store (ie
filesystem or
network based LogTargets) need some method to serialize the LogEvent
before writing to the store. The most common way to serialize the
LogEvent
is to use a Formatter.
- </p>
-
-<p align="justify">
+ </p>
+ <p
+ >
The Formatter interface takes a LogEvent and returns a String
object. The
most commonly use LogEvent is the PatternFormatter. The pattern
formatter
takes a format specifier that has a similar format to c's printf
function.
- </p>
-
-<p align="justify">
+ </p>
+ <p
+ >
The format specifier consists of a string containing raw text
combined with
pattern elements. Each pattern element has the generalized form
"%[+|-]#.#{field:subformat}". The +|- indicates whether the pattern
element
@@ -486,61 +433,39 @@
This parameter must be supplied and correlates to fields of
LogEvent.
'subformat' is currently unused except in the case of "context"
field. This is
further discussed below.
- </p>
-
-<p align="justify">
+ </p>
+ <p
+ >
Following is a number of examples for PatternFormatter's format
specifier
and actual output.
- </p>
-
-
-<div align="center">
-<table cellspacing="2" cellpadding="2" border="1">
-<tr>
-<td>
-<pre>
-format: "%7.7{priority} %5.5{rtime} [%8.8{category}]:
%{message}\n%{throwable}"
+
+ </p>
+ <div id="source">
+ <pre>format: "%7.7{priority} %5.5{rtime} [%8.8{category}]:
%{message}\n%{throwable}"
output: DEBUG 123 [network.]: This is a debug message
-format: "%7.7{priority} %5.5{rtime} [%{category}]: %{message}\n"
+format: "%7.7{priority} %5.5{rtime} [%{category}]: %{message}\n"
output: DEBUG 123 [network.interceptor.connected]: This is a debug
message
output: DEBUG 123 [network]: This is another debug message
-format: "%7.7{priority} %5.5{rtime} [%10.{category}]: %{message}\n"
+format: "%7.7{priority} %5.5{rtime} [%10.{category}]: %{message}\n"
output: DEBUG 123 [network.interceptor.connected]: This is a debug
message
-output: DEBUG 123 [network ]: This is another debug message
-</pre>
-</td>
-</tr>
-</table>
-</div>
-
-
-<p align="justify">
+output: DEBUG 123 [network ]: This is another debug message</pre>
+ </div>
+ <p
+ >
There is also ExtendedPatternFormatter that allows two extra fields,
namely
"method" and "thread". The "method" field attempts to determine the
method that
called the Logger method to generate the LogEvent. The "thread"
field displays
the name of the current thread.
- </p>
-
-
-</font></td>
-</tr>
-</table>
-</div>
-<br>
-<div align="right">
-<table cellspacing="0" cellpadding="2" border="0" width="100%">
-<tr>
-<td bgcolor="bbccdd"><font face="arial,helvetica,sanserif" color="#000000"
size="+1"><b>Context</b></font></td>
-</tr>
-<tr>
-<td><font face="arial,helvetica,sanserif" color="#000000">
-<br>
-
-<p align="justify">
+ </p>
+ </div>
+ <div class="h3">
+ <h3><a name="Context">Context</a></h3>
+ <p
+ >
In many systems you need to include extra information depending in
logs that depends
on information not included in the LogEvent. For instance the
Formatters section described
an ExtendedPatternFormatter that included information such as
calling method and calling
@@ -548,159 +473,115 @@
user executing log statement, the network interface that the client
component is listening
to (ie 127.0.0.1 vs 192.168.1.1), hostname (especially important on
multihomed boxen) or
source of LogEvent (useful when writing a centralized log server).
- </p>
-
-<p align="justify">
+ </p>
+ <p
+ >
There are a number of strategies to deal with application specific
contextual
information. Some logging toolkits encourage extending the Logger,
LogEvent and
LogTargets while others encourage using application specific
LogTargets. The way
that LogKit solves this problem is by using a generic ContexMap
object.
- </p>
-
-<p align="justify">
+ </p>
+ <p
+ >
The ContextMap allows the user to store arbitrary objects using a
string key. These
objects can then be extracted by the LogTargets and used as
appropriate. If you were
using the PatternFormatter you could extract a value from ContextMap
by specify the
"context" field with it's subformat set to the appropriate key. Some
examples are
illustrated below.
- </p>
-
-
-<div align="center">
-<table cellspacing="2" cellpadding="2" border="1">
-<tr>
-<td>
-<pre>
-format: "%7.7{priority} [%{context:hostname}]: %{message}\n"
+
+ </p>
+ <div id="source">
+ <pre>format: "%7.7{priority} [%{context:hostname}]:
%{message}\n"
output: DEBUG [helm.realityforge.org]: This is a debug message
-format: "%7.7{priority} [%{context:interface}]: %{message}\n"
+format: "%7.7{priority} [%{context:interface}]: %{message}\n"
output: DEBUG [127.0.0.1]: This is logging about loopback interface
output: DEBUG [192.168.1.1]: This is logging about internal network
interface
output: DEBUG [203.121.1.2]: This is logging about external network
interface
-format: "%7.7{priority} [%{context:user}]: %{message}\n"
-output: DEBUG [Barney Rubble]: This is a debug message
-</pre>
-</td>
-</tr>
-</table>
-</div>
-
-
-<p align="justify">
-
-<em>Warning:</em> Older versions of LogKit also incorporated a ContextStack
+format: "%7.7{priority} [%{context:user}]: %{message}\n"
+output: DEBUG [Barney Rubble]: This is a debug message</pre>
+ </div>
+ <p
+ >
+
+ <em
+ > Warning:
+ </em>
+ Older versions of LogKit also incorporated a
ContextStack
that offered hierarchical management of context. It was discovered
that this
design encouraged bad practices and thus use of this feature has
been
deprecated in favour of using ContextMap. The ContextStack is still
accessible
- if users do not specify a subformat or specify the subformat
"stack". However
+ if users do not specify a subformat or specify the subformat
"stack". However
it is strongly advised that users do not use this feature as it will
be
removed in a future iteration.
- </p>
-
-<p align="justify">
+ </p>
+ <p
+ >
When using a ContextMap you create the object and populate it using
the
set(key,value) method. After populating the ContextMap you call the
method
makeReadOnly(). This makes it impossible for hostile code to modify
context
in which logging occurs.
- </p>
-
-<p align="justify">
+ </p>
+ <p
+ >
Then you need to associate the ContextMap with a thread by using
ContextMap.bind( myContextMap ). The ContextMap is bound to a thread
using java.lang.InheritableThreadLocal and thus maps are inherited
between
threads as specified by InheritableThreadLocal.
- </p>
-
-<p align="justify">
+ </p>
+ <p
+ >
Below is an example of how a user can create and bind a ContextMap.
- </p>
-
-
-<div align="center">
-<table cellspacing="2" cellpadding="2" border="1">
-<tr>
-<td>
-<pre>
-final ContextMap context = new ContextMap();
-context.set( "user", "Fred Flinstone" );
-context.set( "interface", myInterface );
-context.set( "hostname", "helm.realityforge.org" );
-context.set( "jvmid", myJvmId );
+
+ </p>
+ <div id="source">
+ <pre>final ContextMap context = new ContextMap();
+context.set( "user", "Fred Flinstone" );
+context.set( "interface", myInterface );
+context.set( "hostname", "helm.realityforge.org" );
+context.set( "jvmid", myJvmId );
context.makeReadOnly();
//bind new ContextMap to current thread and subthreads
-ContextMap.bind( context );
-</pre>
-</td>
-</tr>
-</table>
-</div>
-
-
-</font></td>
-</tr>
-</table>
-</div>
-<br>
-<div align="right">
-<table cellspacing="0" cellpadding="2" border="0" width="100%">
-<tr>
-<td bgcolor="bbccdd"><font face="arial,helvetica,sanserif" color="#000000"
size="+1"><b>Examples</b></font></td>
-</tr>
-<tr>
-<td><font face="arial,helvetica,sanserif" color="#000000">
-<br>
-
-
-<p align="justify">
+ContextMap.bind( context );</pre>
+ </div>
+ </div>
+ <div class="h3">
+ <h3><a name="Examples">Examples</a></h3>
+ <p
+ >
One of the best ways to learn how to use a toolkit is to see an
example in action. With that heres some example uses of LogKit. The
first
example is in a simple application while the next example is in a
servlet.
The servlet example demonstrates the usage of filters.
- </p>
-
-
-<div align="center">
-<table cellspacing="2" cellpadding="2" border="1">
-<tr>
-<td>
-<pre>
-Logger logger = Hierarchy.getDefaultHierarchy().getLoggerFor("myCategory");
+
+ </p>
+ <div id="source">
+ <pre>Logger logger =
Hierarchy.getDefaultHierarchy().getLoggerFor("myCategory");
logger.setPriority( Priority.DEBUG );
-logger.debug( "This is a debug message" );
-</pre>
-</td>
-</tr>
-</table>
-</div>
-
-
-<div align="center">
-<table cellspacing="2" cellpadding="2" border="1">
-<tr>
-<td>
-<pre>
-//Create a Log filter that writes to servlet Containers log
+logger.debug( "This is a debug message" );</pre>
+ </div>
+ <div id="source">
+ <pre>//Create a Log filter that writes to servlet Containers log
//If priority greater than ERROR
PriorityFilter filter = new PriorityFilter(Priority.ERROR);
filter.addTarget( new ServletOutputLogTarget(context) );
-String logName = getInitParameter("log-name");
-if( null == logName ) logName = "myservlet.log";
+String logName = getInitParameter("log-name");
+if( null == logName ) logName = "myservlet.log";
-final String path = context.getRealPath("/") + "/WEB-INF/logs/" + logName ;
+final String path = context.getRealPath("/") +
"/WEB-INF/logs/" + logName ;
//Create a logger to write to a file as specified
//with servlet init parameters
-final String pattern = "%7.7{priority} %5.5{time} [%8.8{category}] " +
- "(%{context}): %{message}\\n%{throwable}";
+final String pattern = "%7.7{priority} %5.5{time} [%8.8{category}]
" +
+ "(%{context}): %{message}\\n%{throwable}";
final PatternFormatter formatter = new PatternFormatter( pattern );
final File file = new File( path );
@@ -708,69 +589,47 @@
FileTarget target = new FileTarget( file, true, formatter );
//Create logger
-myLogger = Hierarchy.getDefaultHierarchy().getLoggerFor("myServlet");
+myLogger =
Hierarchy.getDefaultHierarchy().getLoggerFor("myServlet");
//Set log targets of logger
myLogger.setLogTargets( new LogTarget[] { target, filter } );
-String logLevel = getInitParameter("log-priority");
-if( null == logLevel ) logLevel = "DEBUG";
+String logLevel = getInitParameter("log-priority");
+if( null == logLevel ) logLevel = "DEBUG";
//Set log targets parameter based on init parameters
Priority priority = Priority.getPriorityForName( logLevel );
-myLogger.setPriority( priority );
-</pre>
-</td>
-</tr>
-</table>
-</div>
-
-
-</font></td>
-</tr>
-</table>
-</div>
-<br>
-<div align="right">
-<table cellspacing="0" cellpadding="2" border="0" width="100%">
-<tr>
-<td bgcolor="bbccdd"><font face="arial,helvetica,sanserif" color="#000000"
size="+1"><b>Conclusion</b></font></td>
-</tr>
-<tr>
-<td><font face="arial,helvetica,sanserif" color="#000000">
-<br>
-
-
-<p align="justify">
+myLogger.setPriority( priority );</pre>
+ </div>
+ </div>
+ <div class="h3">
+ <h3><a name="Conclusion">Conclusion</a></h3>
+ <p
+ >
LogKit is a friendly, easy to use logging toolkit. It is high
performing and
easily integrated into existing products. By design it does not
specify any
configuration format but instead encourages users to integrate it
into their
existing products. It also is designed to run in a secure
environment by
limiting client access to hierarchies.
- </p>
+
+ </p>
+ </div>
+ </div>
+ <div align="right" id="authors">
+ by <a href="[EMAIL PROTECTED]">Peter Donald</a>
+ </div>
+ </div></td>
+ </tr>
+ </table>
+
+ <!-- FOOTER -->
+ <div id="footer">
+ <table border="0" cellspacing="0" cellpadding="4">
+ <tr>
+ <td>Copyright © 1999-2002, Apache Software Foundation</td>
+ </tr>
+ </table>
+ </div>
-
-</font></td>
-</tr>
-</table>
-</div>
-<br>
-</td>
-</tr>
-</table>
-<br>
-<table cellpadding="0" cellspacing="0" border="0" width="100%">
-<tr>
-<td>
-<hr size="1" noshade="">
-</td>
-</tr>
-<tr>
-<td align="center"><font color="#525D76" size="-1"
face="arial,helvetica,sanserif"><i>
- Copyright ©1999-2002 by the Apache Software Foundation.
- All Rights Reserved.
- </i></font></td>
-</tr>
-</table>
-</body>
-</html>
+ </body>
+ </html>
1.1 jakarta-avalon-site/docs/logkit/css/ns4_only.css
Index: ns4_only.css
===================================================================
/* simple rules suitable for Netscape 4.x only; richer rules are in
tigris.css. see <http://style.tigris.org/> */
/* colors, backgrounds, borders, link indication */
body {
background: #fff;
color: #000;
}
#leftcol a:link, #leftcol a:visited {
color: blue;
}
a:active, a:hover, #leftcol a:active, #leftcol a:hover {
color: #f30;
}
#login a:link, #login a:visited {
color: white;
text-decoration: underline;
}
#banner a:active, #banner a:hover {
color: #f90;
}
#leftcol a, #breadcrumbs a {
text-decoration: none;
}
h2 .lastchild {
color: #777
}
.a td {
background: #ddd;
}
.b td {
background: #efefef;
}
.tabs td, .tabs th {
background-color: #ddd;
}
body .app th {
background-color: #bbb;
}
body .tabs th {
background-color: #888;
color: #fff;
}
body .app .axial th {
background-color: #ddd;
color: black
}
.tabs td {
background-color: #ddd;
}
.alert {
color: #c00;
}
.confirm {
color: green;
}
.info {
color: blue;
}
.selection {
background: #ffc;
}
#login {
color: #fff;
}
#helptext th {
background: #cc9;
}
#helptext td {
background: #ffc;
}
.tabs a {
text-decoration: none;
}
#navcolumn div strong {
color: #555;
}
#banner, #banner td {
background: #036;
color: #fff;
}
body #banner #login a {
color: white;
}
/* font and text properties, exclusive of link indication, alignment,
text-indent */
body, div, p, th, td, li, dl, dd {
font-family: Lucida, Arial, Helvetica, sans-serif;
}
code, pre {
font-family: 'Andale Mono', Courier, monospace;
}
h2, h3, h4 {
font-family: Tahoma, Verdana, Helvetica, Arial, sans-serif;
}
.selection {
font-weight: bold
}
#login .username {
font-weight: bold;
}
/* box properties (exclusive of borders), positioning, alignments, list
types, text-indent */
th, td {
text-align: left;
vertical-align: top
}
.right {
text-align: right;
}
.center {
text-align: center;
}
body .app .axial th {
text-align: right;
}
.app .axial td th {
text-align: left;
}
body td .stb {
margin-top: 1em;
text-indent: 0;
}
body td .mtb {
margin-top: 2em;
text-indent: 0;
}
dd {
margin-bottom: .67em;
}
#footer {
margin: 4px
}
#helptext {
margin-top: 1em
}
#helptext td div {
margin: .5em
}
.courtesylinks {
margin-top: 1em;
padding-top: 1em
}
#navcolumn div {
margin-bottom: .5em;
}
#navcolumn div div {
margin-top: .3em
}
#navcolumn div div {
padding-left: 1em;
}
#banner, #banner td {
vertical-align: middle;
}
body.docs, body.nonav {
margin: 1em
}
1.1 jakarta-avalon-site/docs/logkit/css/print.css
Index: print.css
===================================================================
#banner, #footer, #leftcol, #breadcrumbs, .docs #toc, .docs .courtesylinks
{
display: none;
}
body.docs div.docs {
margin: 0 !important;
border: none !important
}
1.1 jakarta-avalon-site/docs/logkit/css/site.css
Index: site.css
===================================================================
div#banner {
border-top: 1px solid #fff;
border-bottom: 1px solid #aaa;
}
#banner, #banner td {
background: #fff;
color: #036;
}
#source {
background-color: #fff;
color: #000;
border-right: 1px solid #888;
border-left: 1px solid #888;
border-top: 1px solid #888;
border-bottom: 1px solid #888;
margin-right: 7px;
margin-left: 7px;
margin-top: 1em;
}
#source pre {
margin-right: 7px;
margin-left: 7px;
}
1.1 jakarta-avalon-site/docs/logkit/css/tigris.css
Index: tigris.css
===================================================================
/* contains rules unsuitable for Netscape 4.x; simpler rules are in
ns4_only.css. see <http://style.tigris.org/> */
/* colors, backgrounds, borders, link indication */
body {
background: #fff;
color: #000;
}
.app h3, .app h4, .tabs td, .tabs th, .functnbar {
background-image: url(../images/nw_min.gif);
background-repeat: no-repeat;
}
#navcolumn div div, body.docs #toc li li {
background-image: url(../images/strich.gif);
background-repeat: no-repeat;
background-position: .5em .5em;
}
#navcolumn div div.heading {
background-image: none;
}
.app h3, .app h4 {
color: #fff;
}
.app h3 {
background-color: #036;
}
.app h4 {
background-color: #888;
}
.a td {
background: #ddd;
}
.b td {
background: #efefef;
}
table, th, td {
border: none
}
.mtb {
border-top: solid 1px #ddd;
}
div.colbar {
background: #bbb;
}
#banner {
border-top: 1px solid #369;
border-bottom: 1px solid #003;
}
div#helptext th {
border-bottom: 1px solid #996;
border-right: 1px solid #996;
}
div#helptext td {
border-bottom: 1px solid #cc9;
border-right: 1px solid #cc9;
}
.tabs th {
border-right: 1px solid #333;
background-color: #ddd;
color: #fff;
}
.tabs td {
background-color: #999;
border-bottom: 1px solid #fff;
border-right: 1px solid #fff;
}
.tabs {
border-bottom: 6px #ddd solid;
}
.tabs th, .tabs th a:link, .tabs th a:visited {
color: #555;
}
.tabs td, .tabs td a:link, .tabs td a:visited {
color: #fff;
}
.tabs a {
text-decoration: none;
}
#navcolumn {
background: #eee;
border-right: 1px solid #aaa;
border-bottom: 1px solid #aaa;
}
#breadcrumbs {
border-bottom: 1px solid #aaa;
background-color: #ddd
}
#navcolumn, #breadcrumbs {
border-top: 1px solid #fff;
}
#rightcol div.www, #rightcol div.help {
border: 1px solid #ddd;
}
div#navcolumn div.focus {
border-top: 1px solid #aaa;
border-left: 1px solid #aaa;
background-color: #fff;
}
body.docs div.docs {
background: #fff;
border-left: 1px solid #ddd;
border-top: 1px solid #ddd;
}
body.docs {
background: #eee url(../images/help_logo.gif) top right no-repeat !important;
}
.docs h3, .docs h4 {
border-top: solid 1px #000;
}
#alerterrormessage {
background: url(../images/icon_alert.gif) top left no-repeat !important;
}
.functnbar {
background-color: #aaa;
}
.functnbar2, .functnbar3 {
background: #aaa url(../images/sw_min.gif) no-repeat bottom left;
}
.functnbar3 {
background-color: #ddd;
}
.functnbar, .functnbar2, .functnbar3 {
color: #000;
}
.functnbar a, .functnbar2 a, .functnbar3 a {
color: #000;
text-decoration: underline;
}
#topmodule {
background: #ddd;
border-top: 1px solid #fff;
border-bottom: 1px solid #aaa;
border-right: 1px solid #aaa;
}
#topmodule #issueid {
border-right: 1px solid #aaa;
}
a:link, #navcolumn a:visited, .app a:visited, .tasknav a:visited {
color: blue;
}
a:link.selfref, a:visited.selfref {
color: #555 !important;
text-decoration: none;
}
a:active, a:hover, #leftcol a:active, #leftcol a:hover {
color: #f30 !important;
}
#login a:link, #login a:visited {
color: white;
text-decoration: underline;
}
#banner a:active, #banner a:hover {
color: #f90 !important;
}
#leftcol a, #breadcrumbs a {
text-decoration: none;
}
#apphead h2 em {
color: #777;
}
a:link.selfref, a:visited.selfref {
color: #555 !important;
text-decoration: none;
}
.app th {
background-color: #bbb;
}
.axial th {
background-color: #ddd;
color: black
}
.alert {
color: #c00;
}
.confirm {
color: green;
}
.info {
color: blue;
}
.selection {
background: #ffc;
}
#login {
color: #fff;
}
#helptext th {
background: #cc9;
}
#helptext td {
background: #ffc;
}
#navcolumn div strong {
color: #000;
}
#banner, #banner td {
background: #036;
color: #fff;
}
body #banner #login a {
color: #fff;
}
h4 a:link, h4 a:visited {
text-decoration: underline;
color: #fff;
}
/* font and text properties, exclusive of link indication, alignment,
text-indent */
body, th, td, input, select, textarea, h2 small {
font-family: Verdana, Helvetica, Arial, sans-serif;
}
code, pre {
font-family: 'Andale Mono', Courier, monospace;
}
html body, body th, body td, textarea, h2 small, .app h3, .app h4, #rightcol
h3, #bodycol pre, #bodycol code {
font-size: x-small;
voice-family: "\"}\"";
voice-family: inherit;
font-size: small
}
html>body, html>body th, html>body td, html>body input, html>body select,
html>body textarea, html>body h2 small, html>body .app h3, html>body .app h4,
html>body #rightcol h3, html>body #bodycol pre, html>body #bodycol code {
font-size: small
}
small, div#footer td, div#login, div.tabs th, div.tabs td, input, select,
.paginate, .functnbar, .functnbar2, .functnbar3, #breadcrumbs td,
.courtesylinks, #rightcol div.help, .colbar, .tasknav, body.docs div#toc,
#leftcol {
font-size: x-small;
voice-family: "\"}\"";
voice-family: inherit;
font-size: x-small
}
html>body small, html>body div#footer td, html>body div#login, html>body
div.tabs th, html>body div.tabs td, html>body input, html>body select,
html>body .paginate, html>body .functnbar, html>body .functnbar2, html>body
.functnbar3, html>body #breadcrumbs td, html>body .courtesylinks, html>body
#rightcol div.help, html>body .colbar, html>body .tasknav, html>body.docs #toc,
html>body #leftcol {
font-size: x-small
}
#bodycol h2 {
font-family: Tahoma, Verdana, Helvetica, Arial, sans-serif;
font-size: 1.5em;
font-weight: normal;
}
.tabs td, .tabs th, dt, .tasknav .selfref, #login .username, .selection {
font-weight: bold
}
h4 {
font-size: 1em;
}
#apphead h2 em {
font-style: normal;
}
/* box properties (exclusive of borders), positioning, alignments, list
types, text-indent */
#bodycol h2 {
margin-top: .3em;
margin-bottom: .5em;
}
p, ul, ol, dl {
margin-top: .67em;
margin-bottom: .67em;
}
h3, h4 {
margin-bottom: 0;
}
form {
margin-top: 0;
margin-bottom: 0;
}
#bodycol {
padding-left: 12px;
padding-right: 12px;
width: 100%;
voice-family: "\"}\"";
voice-family: inherit;
width: auto;
}
html>body #bodycol {
width: auto;
}
.docs {
line-height: 1.4;
}
.app h3, .app h4 {
padding: 5px;
margin-right: 2px;
margin-left: 2px;
}
.h3 p, .h4 p, .h3 dt, .h4 dt {
margin-right: 7px;
margin-left: 7px;
}
.tasknav {
margin-bottom: 1.33em
}
div.colbar {
padding: 3px;
margin: 2px 2px 0;
}
.tabs {
margin-top: .67em;
margin-right: 2px;
margin-left: 2px;
}
#leftcol {
padding-bottom: .5em;
}
#breadcrumbs td {
vertical-align: middle;
padding: 2px 8px;
}
.tabs td, .tabs th {
padding: 3px 9px;
}
#rightcol div.www, #rightcol div.help {
padding: 0 .5em
}
#navcolumn {
margin: -8px -8px 0 -8px;
padding: 4px;
}
#navcolumn div {
padding-left: 5px
}
div#navcolumn div div {
margin-top: .3em;
margin-bottom: .3em;
}
div#navcolumn div.focus {
margin-top: -.1em;
padding: .2em 4px;
}
body.docs #toc {
position: absolute;
top: 15px;
left: 0px;
width: 120px;
padding: 0 20px 0 0
}
body.docs #toc ul, #toc ol {
margin-left: 0;
padding-left: 0;
}
body.docs #toc li {
margin-top: 7px;
padding-left: 10px;
list-style-type: none;
}
body.docs div.docs {
margin: 61px 0 0 150px;
padding: 1em 2em 1em 1em !important;
}
.docs p+p {
text-indent: 5%;
margin-top: -.67em
}
.docs h3, .docs h4 {
margin-bottom: .1em;
padding-top: .3em;
}
#alerterrormessage {
padding-left: 100px;
}
.functnbar, .functnbar2, .functnbar3 {
padding: 5px;
margin: .67em 2px;
}
#topmodule td {
vertical-align: middle;
padding: 2px 8px
}
body {
padding: 1em;
}
body.composite, body.docs {
margin: 0;
padding: 0;
}
th, td {
text-align: left;
vertical-align: top
}
.right {
text-align: right !important;
}
.center {
text-align: center !important;
}
.axial th {
text-align: right;
}
.app .axial td th {
text-align: left;
}
body td .stb {
margin-top: 1em;
text-indent: 0;
}
body td .mtb {
margin-top: 2em;
text-indent: 0;
}
dd {
margin-bottom: .67em;
}
#footer {
margin: 4px
}
#helptext {
margin-top: 1em
}
#helptext td div {
margin: .5em
}
.courtesylinks {
margin-top: 1em;
padding-top: 1em
}
#navcolumn div {
margin-bottom: .5em;
}
#navcolumn div div {
margin-top: .3em
}
#navcolumn div div {
padding-left: 1em;
}
#banner, #banner td {
vertical-align: middle;
}
1.2 +46 -70 jakarta-avalon-site/docs/logkit/images/header.gif
<<Binary file>>
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>