Java Server Faces St. Louis JavaSIG June 8, 2006 Jay Meyer, Harpoon Technologies.
The Java Logging API and Lumberjackjava.ociweb.com/javasig/knowledgebase/2001Dec/Lumberjack.pdf ·...
Transcript of The Java Logging API and Lumberjackjava.ociweb.com/javasig/knowledgebase/2001Dec/Lumberjack.pdf ·...
![Page 1: The Java Logging API and Lumberjackjava.ociweb.com/javasig/knowledgebase/2001Dec/Lumberjack.pdf · • Does not discuss log4j – Another open source logging library • Does not](https://reader034.fdocuments.net/reader034/viewer/2022042305/5ed04ed0713d0427814a1534/html5/thumbnails/1.jpg)
The Java Logging APIand Lumberjack
![Page 2: The Java Logging API and Lumberjackjava.ociweb.com/javasig/knowledgebase/2001Dec/Lumberjack.pdf · • Does not discuss log4j – Another open source logging library • Does not](https://reader034.fdocuments.net/reader034/viewer/2022042305/5ed04ed0713d0427814a1534/html5/thumbnails/2.jpg)
Copyright © 2001 Brian R. Gilstrap
Please
• Turn off audible ringing of cell phones/pagers• Take calls/pages outside
![Page 3: The Java Logging API and Lumberjackjava.ociweb.com/javasig/knowledgebase/2001Dec/Lumberjack.pdf · • Does not discuss log4j – Another open source logging library • Does not](https://reader034.fdocuments.net/reader034/viewer/2022042305/5ed04ed0713d0427814a1534/html5/thumbnails/3.jpg)
Copyright © 2001 Brian R. Gilstrap
About this talk
• Discusses the Java Logging API• Discusses Lumberjack• Does not discuss log4j
– Another open source logging library
• Does not compare log4j to the Java Logging API– I don't know log4j
• Can't tell you which is better for your situation
– The two API's seem pretty similar
Please don't try to engage me in an argument about which is better,log4j or Java Logging :-)
![Page 4: The Java Logging API and Lumberjackjava.ociweb.com/javasig/knowledgebase/2001Dec/Lumberjack.pdf · • Does not discuss log4j – Another open source logging library • Does not](https://reader034.fdocuments.net/reader034/viewer/2022042305/5ed04ed0713d0427814a1534/html5/thumbnails/4.jpg)
Copyright © 2001 Brian R. Gilstrap
Overview - what is Java Logging?
• First introduced in Java Specification Request (JSR) 47– Title: “Logging API Specification”– Description: Define standard logging APIs for the error and trace logging.
• Included in JDK 1.4 (currently in late beta)• Free implementation for JDK 1.2/1.3 available
– Called Lumberjack– Available from http://javalogging.sourceforge.net
• Designed for messages related to– Program debugging– Error reporting– General diagnostics
![Page 5: The Java Logging API and Lumberjackjava.ociweb.com/javasig/knowledgebase/2001Dec/Lumberjack.pdf · • Does not discuss log4j – Another open source logging library • Does not](https://reader034.fdocuments.net/reader034/viewer/2022042305/5ed04ed0713d0427814a1534/html5/thumbnails/5.jpg)
Copyright © 2001 Brian R. Gilstrap
Overview (cont)
• A Java Class Library Designed to be:* Simple to use* Fast
– Leave logging code in production executable* Configurable
– Suppress generation of records that are not of interest* Flexible
– Provide a number of common output formats* Extensible* Usable out-of-the-box
– Default configuration - can be overridden– Default set of handlers
![Page 6: The Java Logging API and Lumberjackjava.ociweb.com/javasig/knowledgebase/2001Dec/Lumberjack.pdf · • Does not discuss log4j – Another open source logging library • Does not](https://reader034.fdocuments.net/reader034/viewer/2022042305/5ed04ed0713d0427814a1534/html5/thumbnails/6.jpg)
Copyright © 2001 Brian R. Gilstrap
Overview (cont)
• Dynamically configurable at runtime:– Change what gets logged
• Levels• Filters
– Change where log records are output• Handlers
– Change output format• Formatters
• Extensible classes/interfaces include:– Level– Filter– Handler– Formatter– LogManager
![Page 7: The Java Logging API and Lumberjackjava.ociweb.com/javasig/knowledgebase/2001Dec/Lumberjack.pdf · • Does not discuss log4j – Another open source logging library • Does not](https://reader034.fdocuments.net/reader034/viewer/2022042305/5ed04ed0713d0427814a1534/html5/thumbnails/7.jpg)
Copyright © 2001 Brian R. Gilstrap
Basic Architecture
Logger Handler
Filter Filter Formatter
Outside WorldApplication
![Page 8: The Java Logging API and Lumberjackjava.ociweb.com/javasig/knowledgebase/2001Dec/Lumberjack.pdf · • Does not discuss log4j – Another open source logging library • Does not](https://reader034.fdocuments.net/reader034/viewer/2022042305/5ed04ed0713d0427814a1534/html5/thumbnails/8.jpg)
Copyright © 2001 Brian R. Gilstrap
Level
• Indicates the importance of a record• Used to perform a quick filter to weed out
irrelevant messages• Standard levels:
– SEVERE (most important)– WARNING– INFO– CONFIG– FINE– FINER– FINEST (least important)
![Page 9: The Java Logging API and Lumberjackjava.ociweb.com/javasig/knowledgebase/2001Dec/Lumberjack.pdf · • Does not discuss log4j – Another open source logging library • Does not](https://reader034.fdocuments.net/reader034/viewer/2022042305/5ed04ed0713d0427814a1534/html5/thumbnails/9.jpg)
Copyright © 2001 Brian R. Gilstrap
Logger
• Used to generate logging messages• Do preliminary filtering of messages
– Only those of high enough importance actually logged• Can use a Filter to further filter records• Can have Handlers attached to handle records• Generally have a name
– Can have anonymous loggers, but not generally used.• If record is not filtered, forwards record to parent
Loggers' Handlers– Can be turned off
Logger Handler
Filter Filter Formatter
Outside WorldApplication
![Page 10: The Java Logging API and Lumberjackjava.ociweb.com/javasig/knowledgebase/2001Dec/Lumberjack.pdf · • Does not discuss log4j – Another open source logging library • Does not](https://reader034.fdocuments.net/reader034/viewer/2022042305/5ed04ed0713d0427814a1534/html5/thumbnails/10.jpg)
Copyright © 2001 Brian R. Gilstrap
Logger (cont)
• Created or retrieved via a static method:
public static Logger getLogger( String aName );
Logger awtLogger = Logger.getLogger( "java.awt" );
• Assures only one Logger with a given name in a VM.– Two pieces of code that ask for a Logger with the same
name will share the same Logger object.
![Page 11: The Java Logging API and Lumberjackjava.ociweb.com/javasig/knowledgebase/2001Dec/Lumberjack.pdf · • Does not discuss log4j – Another open source logging library • Does not](https://reader034.fdocuments.net/reader034/viewer/2022042305/5ed04ed0713d0427814a1534/html5/thumbnails/11.jpg)
Copyright © 2001 Brian R. Gilstrap
Logger Methods
• General logging methods– boolean isLoggable( Level aLevel )
• Perform filtering check– void log( Level l, …
• No class and method names specified– void logp( Level l,
String sourceClass,String sourceMethod, …
• Class name and method name– void logrb( Level l,
String sourceClass,String sourceMethod,String rsrcBundle, …
• Class name, method name, and resource bundle (internationalization)
…, String aMessage )…, String aMessage, Object param )…, String aMessage, Object[] params )
![Page 12: The Java Logging API and Lumberjackjava.ociweb.com/javasig/knowledgebase/2001Dec/Lumberjack.pdf · • Does not discuss log4j – Another open source logging library • Does not](https://reader034.fdocuments.net/reader034/viewer/2022042305/5ed04ed0713d0427814a1534/html5/thumbnails/12.jpg)
Copyright © 2001 Brian R. Gilstrap
Logger Methods (cont)
• Convenience methods– entering(...) (message == "ENTRY"; Level == FINER)
– exiting(...) (message == "RETURN"; Level == FINER)
– fine(…)– finer(…)– finest(…)– info(…)– severe(…)– warning(…)
– caught( Level l, Throwable t );– throwing( Level l, Throwable t );
( String aMessage )( String aMessage, Object param )( String aMessage, Object[] params )
( String aMessage, Object param )( String aMessage, Object[] params )
![Page 13: The Java Logging API and Lumberjackjava.ociweb.com/javasig/knowledgebase/2001Dec/Lumberjack.pdf · • Does not discuss log4j – Another open source logging library • Does not](https://reader034.fdocuments.net/reader034/viewer/2022042305/5ed04ed0713d0427814a1534/html5/thumbnails/13.jpg)
Copyright © 2001 Brian R. Gilstrap
Logger Methods (cont)
• Configuration– public Level getLevel();
– public setLevel( Level aLevel );
– public Filter getFilter()– public setFilter( Filter aFilter );
– public Handler[] getHandlers();
– public addHandler( Handler aHandler );
– public removeHandler( Handler aHandler );
– public boolean getUseParentHandlers();– public setUseParentHandlers( booleanuseParentHandlers );
![Page 14: The Java Logging API and Lumberjackjava.ociweb.com/javasig/knowledgebase/2001Dec/Lumberjack.pdf · • Does not discuss log4j – Another open source logging library • Does not](https://reader034.fdocuments.net/reader034/viewer/2022042305/5ed04ed0713d0427814a1534/html5/thumbnails/14.jpg)
Copyright © 2001 Brian R. Gilstrap
A Simple Example
public class HelloWorld {
private static Logger theLogger =
Logger.getLogger( HelloWorld.class.getName() );
public static void main( String[] args ) {
HelloWorld hello = new HelloWorld( "Hello Everybody!" );
hello.sayHello();
}
private String theMessage;
public HelloWorld( String message ) {
theMessage = message;
}
public void sayHello() {
theLogger.info( HelloWorld.class.getName(), "sayHello" theMessage );
}
}
![Page 15: The Java Logging API and Lumberjackjava.ociweb.com/javasig/knowledgebase/2001Dec/Lumberjack.pdf · • Does not discuss log4j – Another open source logging library • Does not](https://reader034.fdocuments.net/reader034/viewer/2022042305/5ed04ed0713d0427814a1534/html5/thumbnails/15.jpg)
Copyright © 2001 Brian R. Gilstrap
Logger Hierarchy
• Organized by name• Pieces of the names are separated by dots ('.')• Follow the package naming of the Java
Classes–e.g. java.util.logging…
• Root Logger– Name is the empty string– Root of Logger tree
• Names can be for packagesand not just classes– java.util
""
net java
Sourceforge.javalogging util
installer testhello
Root Logger
![Page 16: The Java Logging API and Lumberjackjava.ociweb.com/javasig/knowledgebase/2001Dec/Lumberjack.pdf · • Does not discuss log4j – Another open source logging library • Does not](https://reader034.fdocuments.net/reader034/viewer/2022042305/5ed04ed0713d0427814a1534/html5/thumbnails/16.jpg)
Copyright © 2001 Brian R. Gilstrap
Logger Hierarchy (cont)
• Loggers with no Level inherit from immediate parent.
• net.sourceforge.javalogging.installer.Installer would inherit from:– net.sourceforge.javalogging.installer
– net.sourceforge.javalogging– net.sourceforge– net– "" (Root Logger)
![Page 17: The Java Logging API and Lumberjackjava.ociweb.com/javasig/knowledgebase/2001Dec/Lumberjack.pdf · • Does not discuss log4j – Another open source logging library • Does not](https://reader034.fdocuments.net/reader034/viewer/2022042305/5ed04ed0713d0427814a1534/html5/thumbnails/17.jpg)
Copyright © 2001 Brian R. Gilstrap
Logger Hierarchy (cont)
• Examples:
net.sourceforge.javalogging.installer.Installer == null
net.sourceforge.javalogging == INFO
net.sourceforge == WARNING
Effective level is INFO
net.sourceforge.javalogging.installer.Installer == null
net.sourceforge.javalogging == null
net.sourceforge == WARNING
Effective level is WARNING
Effective level is WARNING
![Page 18: The Java Logging API and Lumberjackjava.ociweb.com/javasig/knowledgebase/2001Dec/Lumberjack.pdf · • Does not discuss log4j – Another open source logging library • Does not](https://reader034.fdocuments.net/reader034/viewer/2022042305/5ed04ed0713d0427814a1534/html5/thumbnails/18.jpg)
Copyright © 2001 Brian R. Gilstrap
Logger Hierarchy (cont)
• Loggers forward records to parents' Handlers• No further Logger checks are made
– Record goes directly to the Handlers of each parent in the chain• Filters attached to a Handler may still filter record
Net.sourceforge.javalogging.installer.Installer
net.sourceforge
net
Handler
Handler
Call to Logger
1
FilterHandler
10
Passes Level check
Outside world
Outside world
No level check
No level checkFilter does not pass8
7
54
6
23
9
![Page 19: The Java Logging API and Lumberjackjava.ociweb.com/javasig/knowledgebase/2001Dec/Lumberjack.pdf · • Does not discuss log4j – Another open source logging library • Does not](https://reader034.fdocuments.net/reader034/viewer/2022042305/5ed04ed0713d0427814a1534/html5/thumbnails/19.jpg)
Copyright © 2001 Brian R. Gilstrap
Anonymous loggers
• Have no name• Their parent is the Root Logger
– By default their messages go to any handlers attached to the Root Logger
• Do not affect other Loggers• Generally only used by things like
applets
![Page 20: The Java Logging API and Lumberjackjava.ociweb.com/javasig/knowledgebase/2001Dec/Lumberjack.pdf · • Does not discuss log4j – Another open source logging library • Does not](https://reader034.fdocuments.net/reader034/viewer/2022042305/5ed04ed0713d0427814a1534/html5/thumbnails/20.jpg)
Copyright © 2001 Brian R. Gilstrap
The "global" logger
• Static field of the Logger class– public static final Logger global = Logger.getLogger( "global" );
• Has name “global”• Root Logger is its parent• Intended for "casual" use of the Logging API.
![Page 21: The Java Logging API and Lumberjackjava.ociweb.com/javasig/knowledgebase/2001Dec/Lumberjack.pdf · • Does not discuss log4j – Another open source logging library • Does not](https://reader034.fdocuments.net/reader034/viewer/2022042305/5ed04ed0713d0427814a1534/html5/thumbnails/21.jpg)
Copyright © 2001 Brian R. Gilstrap
LogRecord
• Contains the message plus some additional information
• Not generated until Logger level test is passed–Must be >= Logger Level
• Can be created by programmer directly
![Page 22: The Java Logging API and Lumberjackjava.ociweb.com/javasig/knowledgebase/2001Dec/Lumberjack.pdf · • Does not discuss log4j – Another open source logging library • Does not](https://reader034.fdocuments.net/reader034/viewer/2022042305/5ed04ed0713d0427814a1534/html5/thumbnails/22.jpg)
Copyright © 2001 Brian R. Gilstrap
LogRecord - Highlights
• Level - level of message• Logger name - name of logger that created the record• Message - the message passed to the logger• Millis - when record was generated (in milliseconds)• Parameters - any parameters specified to the Logger• Seq # - a unique sequence number for the record• Source class name - name of class whose code called Logger
– Guessed if not specified– Guess is not always right
• Source method name - name of method which called the Logger– Guessed if not specified– Guess is not always right
• Thrown - any Throwable (exception) that was provided
![Page 23: The Java Logging API and Lumberjackjava.ociweb.com/javasig/knowledgebase/2001Dec/Lumberjack.pdf · • Does not discuss log4j – Another open source logging library • Does not](https://reader034.fdocuments.net/reader034/viewer/2022042305/5ed04ed0713d0427814a1534/html5/thumbnails/23.jpg)
Copyright © 2001 Brian R. Gilstrap
LogManager
• Singleton– LogManager.getLogManager();
• Used to bootstrap logging• Keeps track of all named Loggers• Reads a configuration file when created
– JRE lib/logging.properties– Change file read by setting java.util.logging.config.file property
• Can be sub-classed for special-purposes– EJB Containers– Custom behavior– Etc.
![Page 24: The Java Logging API and Lumberjackjava.ociweb.com/javasig/knowledgebase/2001Dec/Lumberjack.pdf · • Does not discuss log4j – Another open source logging library • Does not](https://reader034.fdocuments.net/reader034/viewer/2022042305/5ed04ed0713d0427814a1534/html5/thumbnails/24.jpg)
Copyright © 2001 Brian R. Gilstrap
logging.properties
• Read by LogManager• System Properties are defaults
– Useful for setting logging properties using java -D...• Values retrieved via LogManager's getProperty() method
• Java Properties file.• Lives in $JAVA_HOME/lib/logging.properties
– JRE lib directory
![Page 25: The Java Logging API and Lumberjackjava.ociweb.com/javasig/knowledgebase/2001Dec/Lumberjack.pdf · • Does not discuss log4j – Another open source logging library • Does not](https://reader034.fdocuments.net/reader034/viewer/2022042305/5ed04ed0713d0427814a1534/html5/thumbnails/25.jpg)
Copyright © 2001 Brian R. Gilstrap
logging.properties contents
• *.level - any property ending in '.level' is assumed to specify a logging Level for some Logger– net.sourceforge.javalogging.installer.Installer=FINER– java.util.level=ERROR– ".level" - used to specify the Level for the Root Logger– etc.
• "handlers" - defines a whitespace separated list of class names– Classes to load and register as Handlers on the root Logger– Must extend Handler
• Properties for specific logging classes (more later)
![Page 26: The Java Logging API and Lumberjackjava.ociweb.com/javasig/knowledgebase/2001Dec/Lumberjack.pdf · • Does not discuss log4j – Another open source logging library • Does not](https://reader034.fdocuments.net/reader034/viewer/2022042305/5ed04ed0713d0427814a1534/html5/thumbnails/26.jpg)
Copyright © 2001 Brian R. Gilstrap
logging.properties contents (cont)
• "config" - defines a whitespace separated list of class names– Intended to allow arbitrary configuration code to be run.– One new instance will be created for each class named
• using default constructor (no args)• constructor must be public
– Constructor may execute arbitrary code• update the logging configuration
– setting logger levels– adding handlers– adding filters– etc.
• perform other initialization
• All Handlers and Config classes must be on the bootstrapclasspath.
![Page 27: The Java Logging API and Lumberjackjava.ociweb.com/javasig/knowledgebase/2001Dec/Lumberjack.pdf · • Does not discuss log4j – Another open source logging library • Does not](https://reader034.fdocuments.net/reader034/viewer/2022042305/5ed04ed0713d0427814a1534/html5/thumbnails/27.jpg)
Copyright © 2001 Brian R. Gilstrap
Handlers
• Process LogRecords• Can do anything with the record
– Typically send it outside the program– Can do other things (e.g. MemoryHandler)
• Have their own Level– LogRecords with too low a level won't be output
• Can have a Filter– After Level test, must also pass Filter to be output
Logger Handler
Filter Filter Formatter
Outside WorldApplication
![Page 28: The Java Logging API and Lumberjackjava.ociweb.com/javasig/knowledgebase/2001Dec/Lumberjack.pdf · • Does not discuss log4j – Another open source logging library • Does not](https://reader034.fdocuments.net/reader034/viewer/2022042305/5ed04ed0713d0427814a1534/html5/thumbnails/28.jpg)
Copyright © 2001 Brian R. Gilstrap
Handlers (cont)
• Handlers get properties from LogManager– LogManager gets them from logging.properties
• Can have more than one Handler attached to the same Logger
Logger
Handler
Application Handler
Handler
![Page 29: The Java Logging API and Lumberjackjava.ociweb.com/javasig/knowledgebase/2001Dec/Lumberjack.pdf · • Does not discuss log4j – Another open source logging library • Does not](https://reader034.fdocuments.net/reader034/viewer/2022042305/5ed04ed0713d0427814a1534/html5/thumbnails/29.jpg)
Copyright © 2001 Brian R. Gilstrap
Handlers (cont)
• Each Handler is asked to handle the LogRecord• Order in which Handlers are called is not specified
– Don't assume a particular order
Logger
Handler
Application Handler
Handler
![Page 30: The Java Logging API and Lumberjackjava.ociweb.com/javasig/knowledgebase/2001Dec/Lumberjack.pdf · • Does not discuss log4j – Another open source logging library • Does not](https://reader034.fdocuments.net/reader034/viewer/2022042305/5ed04ed0713d0427814a1534/html5/thumbnails/30.jpg)
Copyright © 2001 Brian R. Gilstrap
java.util.logging.ConsoleHandler
• Sends output to standard error
• java.util.logging.ConsoleHandler.level– Level for Handler (default: Level.INFO)
• java.util.logging.ConsoleHandler.filter– Name of Filter (default: no Filter)
• java.util.logging.ConsoleHandler.formatter– Name of Formatter (default: SimpleFormatter)
• java.util.logging.ConsoleHandler.encoding – Character set encoding (default: default platform encoding)
![Page 31: The Java Logging API and Lumberjackjava.ociweb.com/javasig/knowledgebase/2001Dec/Lumberjack.pdf · • Does not discuss log4j – Another open source logging library • Does not](https://reader034.fdocuments.net/reader034/viewer/2022042305/5ed04ed0713d0427814a1534/html5/thumbnails/31.jpg)
Copyright © 2001 Brian R. Gilstrap
java.util.logging.FileHandler
• Sends output to a file or cycles through a collection of files• java.util.logging.FileHandler.level
– Level for Handler (default: Level.ALL)
• java.util.logging.FileHandler.filter – Name of Filter (default: no Filter)
• java.util.logging.FileHandler.formatter – Name of Formatter (default: XMLFormatter)
• java.util.logging.FileHandler.encoding– Character set encoding (default: default platform encoding)
• java.util.logging.FileHandler.limit – Maximum file size (bytes) (default: 0 => no limit).
![Page 32: The Java Logging API and Lumberjackjava.ociweb.com/javasig/knowledgebase/2001Dec/Lumberjack.pdf · • Does not discuss log4j – Another open source logging library • Does not](https://reader034.fdocuments.net/reader034/viewer/2022042305/5ed04ed0713d0427814a1534/html5/thumbnails/32.jpg)
Copyright © 2001 Brian R. Gilstrap
FileHandler Properties (cont)
• java.util.logging.FileHandler.count– # output files (default: 1)
• java.util.logging.FileHandler.append– Append onto existing files (default: false)
• java.util.logging.FileHandler.pattern– Pattern for generating the output file name (default:
"%h/java%u.log")
![Page 33: The Java Logging API and Lumberjackjava.ociweb.com/javasig/knowledgebase/2001Dec/Lumberjack.pdf · • Does not discuss log4j – Another open source logging library • Does not](https://reader034.fdocuments.net/reader034/viewer/2022042305/5ed04ed0713d0427814a1534/html5/thumbnails/33.jpg)
Copyright © 2001 Brian R. Gilstrap
java.util.logging.FileHandler.pattern
• Supports several special components replaced at runtime"/" - Replaced by the local pathname separator"%t" - System temporary directory
• /tmp• C:\temp• etc.
"%h" - Value of the "user.home" system property"%g" - Generation number to distinguish rotated logs
• Starts with 0• If not specified and file count > 1, ".%g" is added to pattern
automatically"%u" - Unique number to resolve conflicts between multiple
Java programs"%%" - Literal percent sign "%"
![Page 34: The Java Logging API and Lumberjackjava.ociweb.com/javasig/knowledgebase/2001Dec/Lumberjack.pdf · • Does not discuss log4j – Another open source logging library • Does not](https://reader034.fdocuments.net/reader034/viewer/2022042305/5ed04ed0713d0427814a1534/html5/thumbnails/34.jpg)
Copyright © 2001 Brian R. Gilstrap
java.util.logging.SocketHandler• Sends output through a socket• java.util.logging.SocketHandler.level
– Level for Handler (default: Level.ALL)
• java.util.logging.SocketHandler.host – Host to send to (default: no default)
• java.util.logging.SocketHandler.port – TCP port to use (default: no default)
• java.util.logging.SocketHandler.filter – Name of Filter (default: no Filter)
• java.util.logging.SocketHandler.formatter – Name of Formatter (XMLFormatter)
• java.util.logging.SocketHandler.encoding – Character set encoding (default: default platform encoding)
![Page 35: The Java Logging API and Lumberjackjava.ociweb.com/javasig/knowledgebase/2001Dec/Lumberjack.pdf · • Does not discuss log4j – Another open source logging library • Does not](https://reader034.fdocuments.net/reader034/viewer/2022042305/5ed04ed0713d0427814a1534/html5/thumbnails/35.jpg)
Copyright © 2001 Brian R. Gilstrap
java.util.logging.MemoryHandler
• Circular ("ring") buffer of LogRecords– Holds N most recent records until triggered to push them
to another handler– When buffer filled, new records cause oldest record to be discarded
• Doesn't format its own records• Has a level called the "push level"• Forwards records to another handler whenever push is called
– An incoming LogRecord's Level meets the push level• default push level is Level.SEVERE
– push is called explicitly.– A subclass overrides log method and calls push on some condition.
Logger Handler Outside WorldMemoryHandler
LogRecords
![Page 36: The Java Logging API and Lumberjackjava.ociweb.com/javasig/knowledgebase/2001Dec/Lumberjack.pdf · • Does not discuss log4j – Another open source logging library • Does not](https://reader034.fdocuments.net/reader034/viewer/2022042305/5ed04ed0713d0427814a1534/html5/thumbnails/36.jpg)
Copyright © 2001 Brian R. Gilstrap
java.util.logging.MemoryHandler (cont)
• java.util.logging.MemoryHandler.level – Level for Handler (default: Level.ALL)
• java.util.logging.MemoryHandler.filter – Name of Filter (default: no Filter)
• java.util.logging.MemoryHandler.size– Buffer size (in records) (default: 1000)
• java.util.logging.MemoryHandler.push– PushLevel (default: level.SEVERE)
• java.util.logging.MemoryHandler.target– Target Handler class (default: no default)
![Page 37: The Java Logging API and Lumberjackjava.ociweb.com/javasig/knowledgebase/2001Dec/Lumberjack.pdf · • Does not discuss log4j – Another open source logging library • Does not](https://reader034.fdocuments.net/reader034/viewer/2022042305/5ed04ed0713d0427814a1534/html5/thumbnails/37.jpg)
Copyright © 2001 Brian R. Gilstrap
Formatters
• Format LogRecords for output• Supports notion of a head and tail
– Head gets printed at the start of the file– Tail gets printed at the end of the file– Can be null
• Can be attached to any Handler• Two Standard formatters
– SimpleFormatter– XMLFormatter
Logger Handler
Filter Filter Formatter
Outside WorldApplication
![Page 38: The Java Logging API and Lumberjackjava.ociweb.com/javasig/knowledgebase/2001Dec/Lumberjack.pdf · • Does not discuss log4j – Another open source logging library • Does not](https://reader034.fdocuments.net/reader034/viewer/2022042305/5ed04ed0713d0427814a1534/html5/thumbnails/38.jpg)
Copyright © 2001 Brian R. Gilstrap
java.util.logging.SimpleFormatter
• Prints a brief textual representation of a LogRecord• Has no head or tail
Nov 27, 2001 02:26:04 PM net.sourceforge.javalogging.test.HelloWorld sayHello INFO: Hello Everybody!
![Page 39: The Java Logging API and Lumberjackjava.ociweb.com/javasig/knowledgebase/2001Dec/Lumberjack.pdf · • Does not discuss log4j – Another open source logging library • Does not](https://reader034.fdocuments.net/reader034/viewer/2022042305/5ed04ed0713d0427814a1534/html5/thumbnails/39.jpg)
Copyright © 2001 Brian R. Gilstrap
java.util.logging.XMLFormatter
• Creates an XML document for a set of records• Has a head
<?xml version="1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE log SYSTEM "logger.dtd"><log>
• Has a tail</log>
• Each LogRecord produces a <record> element
![Page 40: The Java Logging API and Lumberjackjava.ociweb.com/javasig/knowledgebase/2001Dec/Lumberjack.pdf · • Does not discuss log4j – Another open source logging library • Does not](https://reader034.fdocuments.net/reader034/viewer/2022042305/5ed04ed0713d0427814a1534/html5/thumbnails/40.jpg)
Copyright © 2001 Brian R. Gilstrap
java.util.logging.XMLFormatter Output
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE log SYSTEM "logger.dtd">
<log>
<record>
<date>2001-11-27T12:38:52</date>
<millis>1006886332546</millis>
<sequence>3244</sequence>
<logger>com.foo</logger>
<level>INFO</level>
<class>com.foo.TestXMLFormatter</class>
<method>writeARecord</method>
<thread>15</thread>
<message>Hello world!</message>
</record>
</log>
![Page 41: The Java Logging API and Lumberjackjava.ociweb.com/javasig/knowledgebase/2001Dec/Lumberjack.pdf · • Does not discuss log4j – Another open source logging library • Does not](https://reader034.fdocuments.net/reader034/viewer/2022042305/5ed04ed0713d0427814a1534/html5/thumbnails/41.jpg)
Copyright © 2001 Brian R. Gilstrap
java.util.logging.Filter
• Interface– One method– boolean isLoggable(LogRecord record)
• Returns true if the LogRecord should be logged/handled.• Can be attached to Loggers and Handlers• No pre-built filters
Logger Handler
Filter Filter Formatter
Outside WorldApplication
![Page 42: The Java Logging API and Lumberjackjava.ociweb.com/javasig/knowledgebase/2001Dec/Lumberjack.pdf · • Does not discuss log4j – Another open source logging library • Does not](https://reader034.fdocuments.net/reader034/viewer/2022042305/5ed04ed0713d0427814a1534/html5/thumbnails/42.jpg)
Copyright © 2001 Brian R. Gilstrap
java.util.logging.ErrorManager
• Won't use unless you are implementing a Handler• Used by Handlers to report problems
– public void error( String msg, Exception ex,int code );
– Default behavior is to write a message to standard error• Has some predefined codes to indicate the nature of
the problem– CLOSE_FAILURE– FLUSH_FAILURE– FORMAT_FAILURE– GENERIC_FAILURE– OPEN_FAILURE– WRITE_FAILURE
![Page 43: The Java Logging API and Lumberjackjava.ociweb.com/javasig/knowledgebase/2001Dec/Lumberjack.pdf · • Does not discuss log4j – Another open source logging library • Does not](https://reader034.fdocuments.net/reader034/viewer/2022042305/5ed04ed0713d0427814a1534/html5/thumbnails/43.jpg)
Copyright © 2001 Brian R. Gilstrap
Extending the Framework
• Custom Levels– For new levels of importance– Need to take care to fit into existing Levels– Done as part of ESI Event Logging tie-in
• Custom Filters - allow for other criteria– Time of day, day of week, etc.– Contents of message– Any field of LogRecord– Etc.
• Custom Handlers• Custom Formatters• Custom LogManager
![Page 44: The Java Logging API and Lumberjackjava.ociweb.com/javasig/knowledgebase/2001Dec/Lumberjack.pdf · • Does not discuss log4j – Another open source logging library • Does not](https://reader034.fdocuments.net/reader034/viewer/2022042305/5ed04ed0713d0427814a1534/html5/thumbnails/44.jpg)
Copyright © 2001 Brian R. Gilstrap
Lumberjack
• Open Source (LGPL) implementation of Java Logging API
• Home Page: javalogging.sourceforge.net• Written by Brian Gilstrap
– Contributors welcome– Bug reports welcome
![Page 45: The Java Logging API and Lumberjackjava.ociweb.com/javasig/knowledgebase/2001Dec/Lumberjack.pdf · • Does not discuss log4j – Another open source logging library • Does not](https://reader034.fdocuments.net/reader034/viewer/2022042305/5ed04ed0713d0427814a1534/html5/thumbnails/45.jpg)
Copyright © 2001 Brian R. Gilstrap
Using Lumberjack with JDK 1.2/1.3
• Provides logging API for JDK 1.2 & 1.3• Get Lumberjack
– Download from javalogging.sourceforge.net– Unpack JAR– Run installer
![Page 46: The Java Logging API and Lumberjackjava.ociweb.com/javasig/knowledgebase/2001Dec/Lumberjack.pdf · • Does not discuss log4j – Another open source logging library • Does not](https://reader034.fdocuments.net/reader034/viewer/2022042305/5ed04ed0713d0427814a1534/html5/thumbnails/46.jpg)
Copyright © 2001 Brian R. Gilstrap
Installing Lumberjack– java -jar logging.jar– Brings up a GUI that installs Lumberjack
– Checks to make sure it's compatible with your JRE• Won't install on top of 1.4's implementation• Won't install into a JDK < 1.2
![Page 47: The Java Logging API and Lumberjackjava.ociweb.com/javasig/knowledgebase/2001Dec/Lumberjack.pdf · • Does not discuss log4j – Another open source logging library • Does not](https://reader034.fdocuments.net/reader034/viewer/2022042305/5ed04ed0713d0427814a1534/html5/thumbnails/47.jpg)
Copyright © 2001 Brian R. Gilstrap
Installing Lumberjack (cont)– Asks if you want to overwrite any existing installation
– Even if you overwrite, also asks if you want to overwrite any existing logging.properties
– Requires that you have permission to alter the JRE directories
![Page 48: The Java Logging API and Lumberjackjava.ociweb.com/javasig/knowledgebase/2001Dec/Lumberjack.pdf · • Does not discuss log4j – Another open source logging library • Does not](https://reader034.fdocuments.net/reader034/viewer/2022042305/5ed04ed0713d0427814a1534/html5/thumbnails/48.jpg)
Copyright © 2001 Brian R. Gilstrap
Using Lumberjack without installing(no permissions or on MacOS X)
• Put logging.jar on your bootstrap classpath-Xbootclasspath/a:$HOME/Library/logging.jar
• Put logging.properties into JRE lib/System/Library/Frameworks/JavaVM.framework/Home/lib
• This is ugly– I'm working to make the GUI work on MacOS X too– Can't give you permissions to alter JRE directories :-)
![Page 49: The Java Logging API and Lumberjackjava.ociweb.com/javasig/knowledgebase/2001Dec/Lumberjack.pdf · • Does not discuss log4j – Another open source logging library • Does not](https://reader034.fdocuments.net/reader034/viewer/2022042305/5ed04ed0713d0427814a1534/html5/thumbnails/49.jpg)
Copyright © 2001 Brian R. Gilstrap
A Few Statistics
• java.util.logging – 16 Source files– 2924 lines of code– 20 Classes (including nested classes)
• net.sourceforge.javalogging.installer– 2 Source files– 242 lines of Code– 5 Classes (including nested classes)
• logging.jar– 50163 bytes– 18 Source files– 3166 lines of Code
![Page 50: The Java Logging API and Lumberjackjava.ociweb.com/javasig/knowledgebase/2001Dec/Lumberjack.pdf · • Does not discuss log4j – Another open source logging library • Does not](https://reader034.fdocuments.net/reader034/viewer/2022042305/5ed04ed0713d0427814a1534/html5/thumbnails/50.jpg)
Copyright © 2001 Brian R. Gilstrap
The Dodgy Bitsareas where Lumberjack is currently weak or non-comformant
• Resource Bundles (fixable)
– Doesn't implement latest spec: search order to find resource bundles– Any resource bundle guru's want to vett the code?
• FileHandler (fixable)
– Has a number of open bugs
• Source class and method guessing (not fixable?)
– Slow (requires parsing stack trace generated from a Throwable)– 1.4 has a StackFrame API that should make it much faster (need to
measure)
• Serialization of LogRecord exception (not fixable?)
– 1.4 Serialization of a Throwable includes any stack trace– 1.3 & prior do not– Can't do RMI between 1.4 & earlier systems involving LogRecords
![Page 51: The Java Logging API and Lumberjackjava.ociweb.com/javasig/knowledgebase/2001Dec/Lumberjack.pdf · • Does not discuss log4j – Another open source logging library • Does not](https://reader034.fdocuments.net/reader034/viewer/2022042305/5ed04ed0713d0427814a1534/html5/thumbnails/51.jpg)
Copyright © 2001 Brian R. Gilstrap
References
• JSR 47 (the Logging API specification)– http://jcp.org/jsr/detail/47.jsp
• JDK 1.4 beta 3 documentation of Logging– http://java.sun.com/j2se/1.4/docs/guide/util/logging/index.ht
ml– http://java.sun.com/j2se/1.4/docs/guide/util/logging/overview
.html– http://java.sun.com/j2se/1.4/docs/api/java/util/logging/packag
e-summary.html• Project page for Lumberjack
– http://javalogging.sourceforge.net/• Article on the Logging API
– http://www.ociweb.com/jnb/jnbJun2001.html
![Page 52: The Java Logging API and Lumberjackjava.ociweb.com/javasig/knowledgebase/2001Dec/Lumberjack.pdf · • Does not discuss log4j – Another open source logging library • Does not](https://reader034.fdocuments.net/reader034/viewer/2022042305/5ed04ed0713d0427814a1534/html5/thumbnails/52.jpg)
Copyright © 2001 Brian R. Gilstrap
Thanks
Please use Lumberjack, that's why I wrote it :-)