public class MonolineFormatter extends Formatter
SimpleFormatter
,
this formatter uses only one line per message instead of two. For example messages formatted by
MonolineFormatter
may look like:
By default,
00:01
CONFIG
[MyApplication] Read configuration from “my-application/setup.xml”.
00:03
INFO
[EPSGFactory] Connected to the EPSG database version 6.9 on JavaDB 10.8.
00:12
WARNING
[DefaultTemporalExtent] This operation requires the “sis-temporal” module.
MonolineFormatter
shows only the level and the message. One or two additional
fields can be inserted between the level and the message if the setTimeFormat(String)
or
setSourceFormat(String)
methods are invoked with o non-null argument. Examples:
setTimeFormat("HH:mm:ss")
for formatting the time like 00:00:04"
,
as time elapsed since the MonolineFormatter
creation time.setSourceFormat("logger:long")
for formatting the full logger name
(e.g. "org.apache.sis.storage.netcdf"
).setSourceFormat("class:short")
for formatting the short class name,
without package (e.g. "NetcdfStore"
).logging.properties
jre/lib/logging.properties
file.
For example, user can cut and paste the following properties into logging.properties
:
########################################################################### # Properties for the apache.sis.org's MonolineFormatter. # By default, the monoline formatter display only the level # and the message. Additional fields can be specified here: # # time: If set, writes the time elapsed since the initialization. # The argument specifies the output pattern. For example, the # pattern "HH:mm:ss.SSSS" displays the hours, minutes, seconds # and milliseconds. # # source: If set, writes the source logger name or the source class name. # Valid argument values are "none", "logger:short", "logger:long", # "class:short", "class:long" and "class.method". ########################################################################### org.apache.sis.util.logging.MonolineFormatter.time = HH:mm:ss.SSS org.apache.sis.util.logging.MonolineFormatter.source = class:shortSee
setTimeFormat(String)
and setSourceFormat(String)
for more information about the
above time
and source
properties. Encoding and logging level are configured separately,
typically on the JDK ConsoleHandler
like below:
java.util.logging.ConsoleHandler.encoding = UTF-8 java.util.logging.ConsoleHandler.level = FINE
MonolineFormatter
instance can be safely used by many threads without synchronization
on the part of the caller. Subclasses should make sure that any overridden methods remain safe to call
from multiple threads.SimpleFormatter
,
Handler.setFormatter(Formatter)
Defined in the sis-utility
module
Constructor and Description |
---|
MonolineFormatter(Handler handler)
Constructs a default
MonolineFormatter . |
Modifier and Type | Method and Description |
---|---|
String |
format(LogRecord record)
Formats the given log record and return the formatted string.
|
String |
formatMessage(LogRecord record)
Returns the localized message from the given log record.
|
String |
getHeader()
Returns the string to write on the left side of the first line of every log records, or
null if none. |
String |
getLevelColor(Level level)
Returns the color used for the given level, or
null if none. |
String |
getSourceFormat()
Returns the format for the source, or
null is the source is not shown. |
String |
getTimeFormat()
Returns the format for elapsed time, or
null if the time is not shown. |
static MonolineFormatter |
install()
Installs a
MonolineFormatter for the root logger, or returns the existing instance if any. |
static MonolineFormatter |
install(Logger logger,
Level level)
Installs a
MonolineFormatter for the specified logger, or returns the existing instance if any. |
void |
resetLevelColors(boolean enabled)
Resets the colors setting to its default value.
|
void |
setHeader(String header)
Sets the string to write on the left side of the first line of every log records.
|
void |
setLevelColor(Level level,
String color)
Sets the color to use for the given level, or
null for removing colorization. |
void |
setSourceFormat(String format)
Sets the format for displaying the source, or hides the source field.
|
void |
setTimeFormat(String pattern)
Sets the format for elapsed time, or hides the time field.
|
public MonolineFormatter(Handler handler)
MonolineFormatter
.
handler
- The handler to be used with this formatter, or null
if unknown.Handler.setFormatter(Formatter)
public String getHeader()
null
if none.
This is a string to be shown just before the level.null
if none.public void setHeader(String header)
header
- The string to write on the left side of the first line of every log records,
or null
if none.public String getTimeFormat()
null
if the time is not shown.
This method returns the pattern specified by the last call to the
setTimeFormat(String)
method, or the patten specified by the
org.apache.sis.util.logging.MonolineFormatter.time
property in the
jre/lib/logging.properties
file.null
if elapsed time is not formatted.public void setTimeFormat(String pattern) throws IllegalArgumentException
SimpleDateFormat
, but for the time part only (no date).
"HH:mm:ss.SSS"
pattern will display the elapsed time in hours, minutes, seconds
and milliseconds.pattern
- the time pattern, or null
to disable time formatting.IllegalArgumentException
- if the given pattern is invalid.public String getSourceFormat()
null
is the source is not shown.
This method returns the source format specified by the last call to the
setSourceFormat(String)
method, or the format specified by the
org.apache.sis.util.logging.MonolineFormatter.source
property in the
jre/lib/logging.properties
file.null
if source is not formatted.public void setSourceFormat(String format) throws IllegalArgumentException
null
for hiding the source field."class:long"
for the source class name"logger:long"
for the logger name"class:short"
for the source class name without the package part."logger:short"
for the logger name without the package part."class.method"
for the short class name followed by the
source method nameformat
- the format for displaying the source, or null
if the source shall not be formatted.IllegalArgumentException
- if the given argument is not one of the recognized format names.public String getLevelColor(Level level)
null
if none.
The current set of supported colors are "red"
, "green"
, "yellow"
, "blue"
,
"magenta"
, "cyan"
and "gray"
. This set may be extended in any future SIS version.level
- the level for which to get the color.null
if none.public void setLevelColor(Level level, String color) throws IllegalArgumentException
null
for removing colorization.
This method should be invoked only if this formatter is associated to a Handler
writing to a terminal supporting ANSI escape codes
(a.k.a. ECMA-48, ISO/IEC 6429 and X3.64 standards).
The given color
argument shall be one of the values documented in the
getLevelColor(Level)
method.
level
- the level for which to set a new color.color
- the case-insensitive new color, or null
if none.IllegalArgumentException
- if the given color is not one of the recognized values.public void resetLevelColors(boolean enabled)
enabled
is true
, then this method defines a default set of colors.enabled
is false
, then this method resets the formatting to plain text.enabled
- true
for defining a default set of colors, or false
for removing all colors.public String format(LogRecord record)
public String formatMessage(LogRecord record)
MessageFormat
syntax, then the message is formatted
by MessageFormat
.formatMessage
in class Formatter
record
- The log record from which to get a localized message.@Configuration public static MonolineFormatter install() throws SecurityException
MonolineFormatter
for the root logger, or returns the existing instance if any.
This method performs the following choices:
ConsoleHandler
is associated to the root logger, then:
MonolineFormatter
, then the existing formatter is returned.ConsoleHandler
formatter is replaced by a new MonolineFormatter
instance,
and that new instance is returned. We perform this replacement in order to avoid sending twice the same
records to the console.ConsoleHandler
using a new MonolineFormatter
is created and added to the
root logger.ConsoleHandler
instances,
and does not check if any child logger has a ConsoleHandler
.MonolineFormatter
. The formatter output can be configured
using the setTimeFormat(String)
and setSourceFormat(String)
methods.SecurityException
- if this method does not have the permission to install the formatter.@Debug @Configuration public static MonolineFormatter install(Logger logger, Level level) throws SecurityException
MonolineFormatter
for the specified logger, or returns the existing instance if any.
This method performs the following steps:
ConsoleHandler
is associated to the given logger, then:
MonolineFormatter
, then the existing formatter is returned.ConsoleHandler
formatter is replaced by a new MonolineFormatter
instance,
and that new instance is returned. We perform this replacement in order to avoid sending twice the same
records to the console.Logger.setUseParentHandlers(boolean)
flag is set to false
for avoiding duplicated
loggings if a ConsoleHandler
instance exists in the parent handlers.ConsoleHandler
instances are added to the given logger in
order to preserve similar behavior as before the call to setUseParentHandlers(false)
.ConsoleHandler
using a new MonolineFormatter
is created and added to the
given logger.ConsoleHandler
instances,
and does not check if any child logger has a ConsoleHandler
.ConsoleHandler
using the MonolineFormatter
will be set to that level.
This is mostly a convenience for temporary increase of logging verbosity for debugging purpose.
This functionality should not be used in production environment, since it overwrite user's level setting.logger
- the base logger to apply the change on.level
- the desired level, or null
if no level should be set.MonolineFormatter
. The formatter output can be configured
using the setTimeFormat(String)
and setSourceFormat(String)
methods.SecurityException
- if this method does not have the permission to install the formatter.Copyright © 2010–2017 The Apache Software Foundation. All rights reserved.