type=page
status=published
title=Administering the Logging Service
next=monitoring.html
prev=webapps.html
~~~~~~

= Administering the Logging Service

[[GSADG00010]][[abluj]]


[[administering-the-logging-service]]
== 7 Administering the Logging Service

This chapter provides instructions on how to configure logging and how
to view log information in the {productName} 7 environment.

The following topics are addressed here:

* link:#abluk[About Logging]
* link:#gklmn[Configuring the Logging Service]
* link:#gkobx[Viewing Log Records]
* link:#CEGGHGIJ[Listing Loggers]

Instructions for accomplishing these tasks and editing logging service
properties in the Administration Console are available from the
Administration Console online help.

[[abluk]][[GSADG00554]][[about-logging]]

=== About Logging

Logging is the process by which {productName}
captures information about events that occur, such as configuration
errors, security failures, or server malfunction. This data is recorded
in log files and is usually the first source of information when
problems occur. Analyzing the log files can help you to follow events
that occur in the server runtime and determine the overall health of the
server.

Although application components can use the Apache Commons Logging
Library to record messages, the platform standard JSR 47 Logging API is
recommended for better log configuration. For more information about JSR 47,
see `http://jcp.org/en/jsr/detail?id=47`.

The following topics are addressed here:

* link:#ablul[Log Files]
* link:#gkres[Logger Namespaces]
* link:#gkjft[Logging Targets]
* link:#gkkit[Logging Properties]

[[ablul]][[GSADG00719]][[log-files]]

==== Log Files

{productName} log records are captured in the
server log file, which captures information about the operation of a server instance
running in the domain. Each instance, managed server
instance (that is, each cluster member), and the domain administration
server (DAS) has an individual server log file.

The following topics are addressed here:

* link:#gkmep[Log File Names and Locations]
* link:#gkmex[Log Records]
* link:#gkmdz[Log Rotation]

[[gkmep]][[GSADG00644]][[log-file-names-and-locations]]

===== Log File Names and Locations

In an {productName} domain, log files have the
following name and location by default:

[width="100%",cols="27%,73%",options="header",]
|===
|Instance |Default Log File Name and Location
|DAS |domain-dir``/logs/server.log``
|Each server instance |instance-dir``/logs/server.log``
|Cluster instance |instance-dir``/logs/server.log``
|===


For example, in a domain hosted on a given machine that includes a
cluster with two managed servers (`ClusterServer1` and `ClusterServer1`)
and a standalone instance (`StandaloneServer`), the log files might be
arranged in the following directory structure. In this directory
structure, the `server.log` file for the DAS is located in
domain-dir``/logs``.

[source]
----
as-install-parent directory
  glassfish/
    domains/
      domain-dir/
        logs/
          server.log
    nodes/
      hostname/
        ClusterServer1/
          logs/
            server.log
        ClusterServer2/
          logs/
            server.log
        StandaloneServer/
          logs/
            server.log
----

You can change the default name or location of a log file by modifying
the logging properties file for the corresponding instance, described in
link:#gkmak[To Change the Name and Location of the Log File].

[[gkmex]][[GSADG00645]][[log-records]]

===== Log Records

{productName} writes log records in either the
Oracle Diagnostics Logging (ODL) format or the Uniform Log Formatter
(ULF) format. The default format is ODL. For information about changing
the format, see link:#CEGDJEBG[Setting the Log File Format].

A custom formatter can also be used by specifying the fully qualified
name of a class that extends the `java.util.logging.Formatter` class.
The custom formatter class can be packaged in a JAR file and placed in
the domain-dir``/lib/ext`` directory, or implemented as a Hundred-Kilobyte
Kernel (HK2) service and the JAR containing the formatter implementation
placed in the as-install``/modules`` directory.

Log records formatted in the ODL format are displayed as follows:

[source]
----
[yyyy-mm-ddThh:mm:ss.SSS-Z][ProductName-Version][Log Level]
[Message ID][LoggerName][Key Value Pairs][[Message]]
----

* `[` and `]` mark the beginning and end of fields in the record. Some
fields may be empty.
* yyyy-mm-dd`T`hh:mm:ss.SSSS-Z represents the date and time that the
record was created. For example: `2013-04-12T08:08:30.154-0700`
* ProductName-Version represents the current version of {productName}. For example: `glassfish`
* Log Level represents the log level. You can set any of the following
values: `EMERGENCY`, `ALERT`, `SEVERE`, `WARNING`, `INFO`, `CONFIG`,
`FINE`, `FINER`, and `FINEST`. The default is `INFO`.
* Message ID consists of a module code that indicates the origin of the
message and the message number. For example: `AS-WEB-GLUE-00172`
* LoggerName represents a hierarchical logger namespace that identifies
the source of the log module. For example: `jakarta.enterprise.web`
* Key Value Pairs represents pairs of key names and values. For example:
`timeMillis: 1365779310154`
* Message represents the text of the log message. For multiline
messages, `[[` marks the end of the first line, and `]]` marks the end
of the message. Multiline messages start on a new line after the message
header and are indented.

The following is an example of a log record formatted in the ODL format:

[source]
----
[2021-04-12T08:08:30.154-0700] [glassfish 7.0] [INFO] [AS-WEB-GLUE-00172] [jakarta.enterprise.web] [tid: _ThreadID=217 _ThreadName=admin-listener(21)]
[timeMillis: 1365779310154] [levelValue: 800] [[
  Loading application [payroll] at [/payroll]]]
----

Log records formatted in the ULF format are displayed as follows:

[source]
----
[#|yyyy-mm-ddThh:mm:ss.SSS-Z|Log Level|ProductName-Version|LoggerName|Key Value Pairs|Message|#]
----

* `[#` and `#]` mark the beginning and end of the record.
* The vertical bar (`|`) separates the fields of the record.
* yyyy-mm-dd`T`hh:mm:ss.SSSS-Z represents the date and time that the
record was created. For example: `2013-04-18T09:27:44.315-0700`
* Log Level represents the log level. You can set any of the following
values: `EMERGENCY`, `ALERT`, `SEVERE`, `WARNING`, `INFO`, `CONFIG`,
`FINE`, `FINER`, and `FINEST`. The default is `INFO`.
* ProductName-Version represents the current version of {productName}. For example: `glassfish`
* LoggerName represents a hierarchical logger namespace that identifies
the source of the log module. For example: `jakarta.enterprise.web.core`
* Key Value Pairs represents pairs of key names and values and can
include a message ID. For example: `_MessageID=AS-WEB-CORE-00306`.
+
Message IDs are included for all {productName}
`EMERGENCY`, `ALERT`, `SEVERE`, and `WARNING` messages, and for many
`INFO` messages.
* Message represents the text of the log message. Multiline messages
start on a new line after the message header and are indented.

The following is an example of a log record formatted in the ULF format:

[source]
----
[#|2013-04-18T09:27:44.315-0700|INFO|glassfish 7.0|jakarta.enterprise.web.core|
_ThreadID=15;_ThreadName=RunLevelControllerThread-1366302462682;_TimeMillis=1366302464315;_LevelValue=800;_MessageID=AS-WEB-CORE-00306;|
  Setting JAAS app name glassfish-web|#]
----

The Administration Console presents log records in a more readable
display. For information about viewing log records using the
Administration Console, see link:#gkobx[Viewing Log Records].

[[gkmdz]][[GSADG00646]][[log-rotation]]

===== Log Rotation

By default, when a log file grows to 2 MB, {productName} renames (rotates) the file to incorporate a timestamp and
creates a new log file. The log file is renamed as `server.log_`date,
where date is the date and time that the file was rotated.

You can configure the logging service to change the default settings for
log file rotation, as explained in link:#gklni[Setting Log File
Rotation].

[[gkres]][[GSADG00720]][[logger-namespaces]]

==== Logger Namespaces

{productName} provides a logger for each of its
modules. The following list is an example of the logger namespaces in a
server instance as they appear when using the `list-log-levels`
subcommand.

[source]
----
java.util.logging.ConsoleHandler     <FINEST>
jakarta.enterprise.resource.corba     <INFO>
jakarta.enterprise.resource.javamail  <INFO>
jakarta.enterprise.resource.jdo       <INFO>
jakarta.enterprise.resource.jms       <INFO>
jakarta.enterprise.resource.jta       <INFO>
jakarta.enterprise.resource.resourceadapter     <INFO>
jakarta.enterprise.resource.sqltrace  <INFO>
jakarta.enterprise.resource.webcontainer.jsf.application  <INFO>
jakarta.enterprise.resource.webcontainer.jsf.config       <INFO>
jakarta.enterprise.resource.webcontainer.jsf.context      <INFO>
jakarta.enterprise.resource.webcontainer.jsf.facelets     <INFO>
jakarta.enterprise.resource.webcontainer.jsf.lifecycle    <INFO>
jakarta.enterprise.resource.webcontainer.jsf.managedbean  <INFO>
jakarta.enterprise.resource.webcontainer.jsf.renderkit    <INFO>
jakarta.enterprise.resource.webcontainer.jsf.resource     <INFO>
jakarta.enterprise.resource.webcontainer.jsf.taglib       <INFO>
jakarta.enterprise.resource.webcontainer.jsf.timing       <INFO>
jakarta.enterprise.system.container.cmp         <INFO>
jakarta.enterprise.system.container.ejb         <INFO>
jakarta.enterprise.system.container.ejb.mdb     <INFO>
jakarta.enterprise.system.container.web         <INFO>
jakarta.enterprise.system.core.classloading     <INFO>
jakarta.enterprise.system.core.config   <INFO>
jakarta.enterprise.system.core.naming   <INFO>
jakarta.enterprise.system.core.security <INFO>
jakarta.enterprise.system.core.selfmanagement   <INFO>
jakarta.enterprise.system.core.transaction      <INFO>
jakarta.enterprise.system     <INFO>
jakarta.enterprise.system.tools.admin   <INFO>
jakarta.enterprise.system.tools.backup  <INFO>
jakarta.enterprise.system.tools.deployment      <INFO>
jakarta.enterprise.system.util          <INFO>
jakarta.enterprise.system.webservices.registry  <INFO>
jakarta.enterprise.system.webservices.rpc       <INFO>
jakarta.enterprise.system.webservices.saaj      <INFO>
javax     <INFO>
org.apache.catalina    <INFO>
org.apache.coyote      <INFO>
org.glassfish.wasp      <INFO>
org.jvnet.hk2.osgiadapter   <INFO>
----

For information about how to display logger namespaces and log levels,
see link:#gjirr[To List Log Levels]. For information about how to
display a list of loggers and logger details, see link:#CEGGICGF[To List
Loggers].

[[gkjft]][[GSADG00721]][[logging-targets]]

==== Logging Targets

Each instance in an {productName} domain has a
dedicated log file, and each instance and cluster has its own logging
properties file. To configure logging for an instance or a cluster,
{productName} allows you target specific log
files or logging properties files when you do the following:

* Set global or module-specific log levels
* Rotate log files or compress them into a ZIP archive
* Change logging property attributes
* List log levels or log attributes

The following subcommands optionally accept a target specification. A
target can be a configuration name, server name, cluster name, or
instance name, and is specified as either an operand or as a value
passed using the `--target` option. If no target is specified when using
any of these subcommands, the default target is the DAS.

[width="100%",cols="27%,47%,26%",options="header",]
|===
|Subcommand |Description |Target Specification
|link:reference-manual/collect-log-files.html#GSRFM00007[`collect-log-files`] |Collects all available log files
into a ZIP archive. |`--target``=`target-name

|link:reference-manual/list-log-attributes.html#GSRFM00182[`list-log-attributes`] |Lists logging attributes in
the logging properties file. |target-name operand

|link:reference-manual/list-log-levels.html#GSRFM00183[`list-log-levels`] |Lists the loggers in the logging
properties file and their log levels. |target-name operand

|link:reference-manual/rotate-log.html#GSRFM00224[`rotate-log`] |Rotates the log file by renaming it and
creating a new log file to store new messages. |`--target``=`target-name

|link:reference-manual/set-log-attributes.html#GSRFM00227[`set-log-attributes`] |Sets the specified logging
attributes in the logging properties file. |`--target``=`target-name

|link:reference-manual/set-log-file-format.html#GSRFM879[`set-log-file-format`] |Sets the log file formatter.
|`--target``=`target-name

|link:reference-manual/set-log-levels.html#GSRFM00228[`set-log-levels`] |Sets the log level for one or more
loggers listed in the logging properties file. |`--target``=`target-name
|===


[[gkkit]][[GSADG00722]][[logging-properties]]

==== Logging Properties

The DAS as well as each configuration, instance, and cluster has its own
set of logging properties that are maintained in individual
configuration files. A logging properties file is named
`logging.properies` and includes the following information:

* Log file name and location
* Logger names and levels
* Properties for custom handlers
* Log rotation and logger format properties

By default in an {productName} domain, logging
properties files are created in the following locations:

[width="100%",cols="18%,82%",options="header",]
|===
|Target |Default Location of Logging Properties File
|DAS |domain-dir``/config```/logging.properties`

|A configuration |domain-dir`/config/`config-name`/logging.properties`,
where config-name represents the name of a configuration that is shared
by one or more instances or clusters.

|An instance
|domain-dir``/config```/`instance-name`-config/logging.properties`, where
instance-name represents the name of the instance.

|A cluster
|domain-dir`/config/`cluster-name`-config/logging.properties`, where
cluster-name represents the name of the cluster.
|===


For information about configuring logging properties, see
link:#gklmn[Configuring the Logging Service].

[[gklmn]][[GSADG00555]][[configuring-the-logging-service]]

=== Configuring the Logging Service

This section contains the following topics:

* link:#gklmx[Changing the Name and Location of Logging Service Files]
* link:#gklml[Setting Log Levels]
* link:#CEGDJEBG[Setting the Log File Format]
* link:#gklni[Setting Log File Rotation]
* link:#gklnk[Adding a Custom Logging Handler]

[[gklmx]][[GSADG00723]][[changing-the-name-and-location-of-logging-service-files]]

==== Changing the Name and Location of Logging Service Files

This section explains how to change the name and location of the
following logging service files:

* Log file
* Logging properties file

[[gkmak]][[GSADG00375]][[to-change-the-name-and-location-of-the-log-file]]

===== To Change the Name and Location of the Log File

To change the name and location of the log file, first use the
`list-log-attributes` subcommand to obtain the current log attribute
setting for the log file name and location. Then use the
`set-log-attributes` subcommand to specify the new name or location. The
default target for these two subcommands is the DAS. However, you can
optionally specify one of the following targets:

* Configuration name — to target all instances or clusters that share a specific configuration name.
* Server name — to target only a specific server.
* Instance name — to target only a specific instance.
* Cluster name — to target only a specific cluster.

1. Ensure that the target server or cluster is running.
Remote subcommands require a running server.

2. Use the link:reference-manual/list-log-attributes.html#GSRFM00182[`list-log-attributes`]
subcommand in remote mode to obtain the current log attribute settings.
The name and location of the log file is set with the
`com.sun.enterprise.server.logging.GFFileHandler.file` attribute of the
logging properties file.
Optionally you can target a configuration, server, instance, or cluster.
If you do not specify a target, the log attribute settings for the DAS are displayed.

3. Use the link:reference-manual/set-log-attributes.html#GSRFM00227[`set-log-attributes`]
subcommand in remote mode to define a custom name or location of the log file.
If you do not specify a target, the log file for the DAS is targeted by default.
If you target a cluster, the name of the cluster log file for
each member instance can be changed (the server log file name cannot).

[[GSADG00174]][[gkmal]]
Example 7-1 Changing the Name and Location of a Cluster's Log File

This example changes the name of the cluster log file for `Cluster1` to
`cluster1.log`. `Cluster1` has two server instances: `ClusterServer1` and `ClusterServer2`.

[source]
----
asadmin> list-log-attributes Cluster1
com.sun.enterprise.server.logging.GFFileHandler.alarms <false>
com.sun.enterprise.server.logging.GFFileHandler.file
<${com.sun.aas.instanceRoot}/logs/server.log>
com.sun.enterprise.server.logging.GFFileHandler.flushFrequency  <1>
.
.
.
log4j.logger.org.hibernate.validator.util.Version <warn>
Command list-log-attributes executed successfully.
asadmin> set-log-attributes --target Cluster1
com.sun.enterprise.server.logging.GFFileHandler.file=
${com.sun.aas.instanceRoot}/logs/cluster1.log
com.sun.enterprise.server.logging.GFFileHandler.file
logging attribute set with value ${com.sun.aas.instanceRoot}/logs/cluster1.log
These logging attributes are set for Cluster1.
ClusterServer1 :
com.sun.enterprise.server.logging.GFFileHandler.file
logging attribute set with value ${com.sun.aas.instanceRoot}/logs/cluster1.log
These logging attributes are set for Cluster1.

ClusterServer2 :
com.sun.enterprise.server.logging.GFFileHandler.file
logging attribute set with value ${com.sun.aas.instanceRoot}/logs/cluster1.log
These logging attributes are set for Cluster1.

Command set-log-attributes executed successfully.
----

[[GSADG864]]

See Also

You can view the full syntax and options of these subcommands by typing
`asadmin help list-log-levels` and `asadmin help set-log-attributes` at
the command line.

[[gkmcz]][[GSADG00376]][[to-change-the-name-and-location-of-the-logging-properties-file]]

===== To Change the Name and Location of the Logging Properties File

You can set the name and location of the logging properties file by
setting the `java.util.logging.config.file` system property. By setting
this system property, you can have a single logging properties file that
is used by all instances running on the same host.

[NOTE]
====
Setting the `java.util.logging.config.file` system property causes all
other {productName} logging properties files on
the host to be overridden.
====


1. Set the `java.util.logging.config.file` system property.
For example, you can use the following `java` command:
+
[source]
----
java -Djava.util.logging.config.file=properties_file
----
Alternatively, you can use the Administration Console to set this system property.

2. To apply your change, restart {productName}.

[[GSADG00175]][[gkmgz]]
Example 7-2 Setting the `java.util.logging.config.file` System Property

The following example changes the location of the logging properties
file to `/space/mylogging/logging.properties`:
[source]
----
java -Djava.util.logging.config.file=/space/mylogging/logging.properties
----

[[gklml]][[GSADG00724]][[setting-log-levels]]

==== Setting Log Levels

The log level determines the granularity of the message that is logged,
from error only (`EMERGENCY`) to detailed debug (`FINEST`). The
following values apply: `EMERGENCY`, `ALERT`, `SEVERE`, `WARNING`,
`INFO`, `CONFIG`, `FINE`, `FINER`, and `FINEST`. These log levels are
hierarchically inclusive, which means that if you set a particular log
level, such as INFO, the messages that have log levels above that level
(`EMERGENCY`, `ALERT`, `SEVERE`, and `WARNING`,) are also included. If
you set the log level to the lowest level, `FINEST`, your output
includes all the messages in the file. The default setting is `INFO`.

You can list current log levels of all loggers specified in the
`logging properties` file. In some cases, loggers that have not been
created by the respective containers will also appear in the list.

You can set log levels that are global or logger-specific. When you set
a global log level, the log level goes into effect for all loggers. If
you set the log level for a specific logger that is different from the
global log level, the logger-specific setting takes precedence. In
addition, when setting log levels, you can target a configuration,
server, instance, or cluster.

Because setting log levels is a dynamic operation, you do not need to
restart {productName} for changes to take effect.

Setting either global or logger-specific log levels is done by using the
`set-log-levels` subcommand. Listing log levels is done by using the
`list-log-levels` subcommand.

The following topics are addressed here:

* link:#gjirr[To List Log Levels]
* link:#ghmep[To Set the Global Log Level]
* link:#ghmdu[To Set Module Log Levels]

[[gjirr]][[GSADG00377]][[to-list-log-levels]]

===== To List Log Levels

{productName} provides the means to list all
loggers and their log levels. Listing the loggers provides a convenient
means to view current loggers and log levels either prior to or after
making log level changes.

Use the `list-log-levels` subcommand in remote mode to list the modules
and their current log levels. The default target for this subcommand is
the DAS. However, you can optionally specify one of the following
targets:

* Configuration name — to target all instances or clusters that share a specific configuration name.
* Server name — to target a specific server.
* Instance name — to target a specific instance.
* Cluster name — to target a specific cluster.

1. Ensure that the DAS is running. Remote subcommands require a running server.
2. List the existing module loggers and log levels by using the
link:reference-manual/list-log-levels.html#GSRFM00183[`list-log-levels`] subcommand.

[[GSADG00176]][[gjiti]]
Example 7-3 Listing Logger Levels for Modules

This example shows a partial list of the existing loggers and their log
levels in the DAS.

[source]
----
asadmin> list-log-levels
jakarta.enterprise.system.container.cmp <INFO>
jakarta.enterprise.system.tools.admin <INFO>
java.util.logging.ConsoleHandler <FINEST>
jakarta.enterprise.system.container.web <INFO>
jakarta.enterprise.system.util <INFO>
jakarta.enterprise.resource.webcontainer.jsf.timing <INFO>
javax <INFO>
jakarta.enterprise.resource.corba <INFO>
...
Command list-log-levels executed successfully.
----

[[GSADG00177]][[gkkot]]
Example 7-4 Listing Log Levels for an Instance

This example shows a partial list of the loggers and log levels for the
instance `MyServer2`.

[source]
----
asadmin> list-log-levels MyServer2
java.util.logging.ConsoleHandler <FINEST>
jakarta.enterprise.resource.corba  <INFO>
jakarta.enterprise.resource.javamail   <INFO>
jakarta.enterprise.resource.jdo <INFO>
jakarta.enterprise.resource.jms <INFO>
jakarta.enterprise.resource.jta <INFO>
jakarta.enterprise.resource.resourceadapter <INFO>
jakarta.enterprise.resource.sqltrace <FINE>
...
Command list-log-levels executed successfully.
----

[[GSADG865]]

See Also

You can view the full syntax and options of the subcommand by typing
`asadmin help list-log-levels` at the command line.

[[ghmep]][[GSADG00378]][[to-set-the-global-log-level]]

===== To Set the Global Log Level

The global log level specifies the events that are logged across all
loggers. The default level for messages output to the console is `INFO`
(which also includes `EMERGENCY`, `ALERT`, `SEVERE`, and `WARNING`
messages).

Use the `set-log-levels` subcommand in remote mode to set the global log
level. The default target for this subcommand is the DAS. However, you
can optionally specify one of the following targets using the `--target`
option:

* Configuration name — to target all instances or clusters that share a specific configuration name.
* Server name — to target a specific server.
* Instance name — to target a specific instance.
* Cluster name — to target a specific cluster.

1. Ensure that the target server or cluster is running.
2. Set the global log level by using the
link:reference-manual/set-log-levels.html#GSRFM00228[`set-log-levels`] subcommand, specifying the log level
of the `java.util.logging.ConsoleHandler` logger.
The `ConsoleHandler` has a separate log level setting that limits the
messages that are displayed. For example:
+
[source]
----
java.util.logging.ConsoleHandler <FINEST>
----

[[GSADG00178]][[ghmfi]]
Example 7-5 Changing the Global Log Level for All Module Loggers

By setting the log level of the `ConsoleHandler`, you set the global log
level for all loggers. This example sets the global log level in the DAS
to `INFO`:

[source]
----
asadmin> set-log-levels java.util.logging.ConsoleHandler=INFO
java.util.logging.ConsoleHandler package set with log level INFO.
These logging levels are set for server.

Command set-log-levels executed successfully.
----

[[GSADG866]]

See Also

You can view the full syntax and options of the subcommand by typing
`asadmin help set-log-levels` at the command line.

[[ghmdu]][[GSADG00379]][[to-set-module-log-levels]]

===== To Set Module Log Levels

A module log level specifies the events that are logged for a particular
logger. The default level for messages output to the console is `INFO`
(which also includes `EMERGENCY`, `ALERT`, `SEVERE`, and `WARNING`
messages). The global log level is overridden by a module-specific log level.

By default, the module log level is set to `FINE`. The lines for the
loggers in the logging properties file might look like this (the modules
are indicated in bold):

[source]
----
jakarta.enterprise.system.tools.level=FINE
jakarta.enterprise.system.container.ejb.level=FINE
jakarta.enterprise.system.core.security.level=FINE
jakarta.enterprise.system.tools.admin.level=FINE
jakarta.enterprise.level=FINE
jakarta.enterprise.system.container.web.level=FINE
----

Because setting log levels is a dynamic operation, you do not need to
restart {productName} for changes to take effect.

1. Ensure that the target server or cluster is running. Remote subcommands require a running server.

2. List the existing module loggers and their log levels by using the
link:reference-manual/list-log-levels.html#GSRFM00183[`list-log-levels`] subcommand.

3. Set the log level for a module by using the
link:reference-manual/set-log-levels.html#GSRFM00228[`set-log-levels`] subcommand.
Your choices are `EMERGENCY`, `ALERT`, `SEVERE`, `WARNING`, `INFO`,
`CONFIG`, `FINE`, `FINER`, and `FINEST`.

[[GSADG00179]][[ghmev]]
Example 7-6 Setting the Log Level for a Module Logger

This example sets the log level for the web container logger to WARNING
on the target instance `ManagedServer1`:

[source]
----
asadmin> set-log-levels --target ManagedServer1
jakarta.enterprise.system.container.web=WARNING
jakarta.enterprise.system.container.web package set with log level WARNING.
These logging levels are set for ManagedServer1.
ManagedServer1 :
jakarta.enterprise.system.container.web package set with log level WARNING.
These logging levels are set for ManagedServer1.

Command set-log-levels executed successfully.
----

[[GSADG00180]][[gjkat]]
Example 7-7 Setting Log Levels for Multiple Loggers

The following example sets the log level for security and web container
loggers in the DAS.

[source]
----
asadmin> set-log-levels jakarta.enterprise.system.core.security=FINE:
jakarta.enterprise.system.container.web=WARNING
jakarta.enterprise.system.container.web package set with log level WARNING.
jakarta.enterprise.system.core.security package set with log level FINE.
These logging levels are set for server.

Command set-log-levels executed successfully.
----

[[GSADG867]]

See Also

You can view the full syntax and options of the subcommand by typing
`asadmin help set-log-levels` at the command line.

[[CEGDJEBG]][[GSADG1062]][[setting-the-log-file-format]]

==== Setting the Log File Format

You can set the format for log records in log files. The following
topics are addressed here:

* link:#CEGFFJDG[To Set the Log File Format]
* link:#CEGGBJCC[To Exclude Fields in Log Records]
* link:#CEGBBEAH[To Set Multiline Mode]

[[CEGFFJDG]][[GSADG1063]][[to-set-the-log-file-format]]

===== To Set the Log File Format

Use the `set-log-file-format` subcommand in remote mode to set the
formatter used by {productName} to format log
records in log files. You can also use the `set-log-attributes`
subcommand. Log formats for all server instances in a cluster will be
the same. For information about log formats, see link:#gkmex[Log
Records].


[NOTE]
====
Changing the log format forces log rotation to avoid mixed format in the
same file.
====


1. Ensure that the target server or cluster is running. Remote commands require a running server.
2. Set the formatter by using the
link:reference-manual/redeploy.html#GSRFM00217[`set-log-file-format`] subcommand.
3. To apply your change, restart {productName}.

[[GSADG1064]][[sthref23]]
Example 7-8 Setting the Log File Format using `set-log-file-format`

This example sets the log file format to `ULF` for standalone instance
`ManagedServer1` using the `set-log-file-format` subcommand.

[source]
----
asadmin> set-log-file-format --target ManagedServer1 ulf
The log file formatter is set to com.sun.enterprise.server.logging.UniformLogFormatter for instance ManagedServer1.
Command set-log-file-format executed successfully.
----

[[GSADG1065]][[sthref24]]
Example 7-9 Setting the Log File Format using `set-log-attributes`

This example sets the log file format to `ULF` for standalone instance
`ManagedServer1` using the `set-log-attributes` subcommand.

[source]
----
asadmin> set-log-attributes --target ManagedServer1 com.sun.enterprise.server.logging.GFFileHandler.formatter=ulf
com.sun.enterprise.server.logging.GFFileHandler.formatter logging attribute value set to ulf.
The logging attributes are saved successfully for ManagedServer1-config.
Command set-log-attributes executed successfully.
----

[[GSADG1066]]

See Also

You can view the full syntax and options of the `set-log-file-format`
subcommand by typing `asadmin help set-log-file-format` at the command
line. You can view the full syntax and options of the
`set-log-attributes` subcommand by typing
`asadmin help set-log-attributes` at the command line.

[[CEGGBJCC]][[GSADG1067]][[to-exclude-fields-in-log-records]]

===== To Exclude Fields in Log Records

Use the `set-log-attributes` subcommand in remote mode to exclude
specific name-value fields from log records. If the `excludeFields`
attribute is not specified, all name-value fields are included. The
following fields can be excluded:

* `tid`
* `userId`
* `ecid`
* `timeMillis`
* `levelVal`

1. Ensure that the target server or cluster is running. Remote commands require a running server.

2. Exclude fields by using the link:reference-manual/set-log-attributes.html#GSRFM00227[`set-log-attributes`]
subcommand, specifying the following attribute and the fields to exclude:
+
[source]
----
com.sun.enterprise.server.logging.GFFileHandler.excludeFields=fields
----
where `fields` is a comma-separated list of the name-value fields to
exclude from the log file.

3. To apply your change, restart {productName}.

[[GSADG1068]][[sthref25]]
Example 7-10 Excluding Fields in Log Records

This example excludes the `userId` and `levelVal` name-value fields in
log records for standalone instance `ManagedServer1`:

[source]
----
asadmin> set-log-attributes --target ManagedServer1
com.sun.enterprise.server.logging.GFFileHandler.excludeFields=userId,levelVal
com.sun.enterprise.server.logging.GFFileHandler.excludeFields logging attribute value set to userId,levelVal.
The logging attributes are saved successfully for ManagedServer1-config.

Command set-log-attributes executed successfully.
----

[[GSADG1069]]

See Also

You can view the full syntax and options of the subcommand by typing
`asadmin help set-log-attributes` at the command line.

[[CEGBBEAH]][[GSADG1070]][[to-set-multiline-mode]]

===== To Set Multiline Mode

Use the `set-log-attributes` command in remote mode to set multiline
mode. When multiline mode is enabled (the default), the body of a log
message starts on a new line after the message header and is indented.

1. Ensure that the target server or cluster is running. Remote commands require a running server.

2. Set multiline mode by using the
link:reference-manual/set-log-attributes.html#GSRFM00227[`set-log-attributes`] subcommand, specifying the
following attribute and its value (`true` or `false`):
+
[source]
----
com.sun.enterprise.server.logging.GFFileHandler.multiLineMode=value
----

3. To apply your change, restart {productName}.

[[GSADG1071]][[sthref26]]
Example 7-11 Setting Multiline Mode

Multiline mode is enabled by default. The following example disables
multiline mode in log files for standalone instance `ManagedServer1`:

[source]
----
asadmin> set-log-attributes --target ManagedServer1
com.sun.enterprise.server.logging.GFFileHandler.multiLineMode=false
com.sun.enterprise.server.logging.GFFileHandler.multiLineMode logging attribute value set to false.
The logging attributes are saved successfully for ManagedServer1-config.

Command set-log-attributes executed successfully.
----

[[GSADG1072]]

See Also

You can view the full syntax and options of the subcommand by typing
`asadmin help set-log-attributes` at the command line.

[[gklni]][[GSADG00725]][[setting-log-file-rotation]]

==== Setting Log File Rotation

As explained in link:#ablul[Log Files], {productName} by default rotates log files when they reach 2 MB in size.
However, you can change the default rotation settings. For example, you
can change the file size at which the server rotates the log file or you
can configure a server to rotate log files based on a time interval. In
addition to changing when rotation occurs, you can also:

* Specify the maximum number of rotated files that can accumulate.
By default, {productName} does not limit the
number of rotated log files that are retained. However, you can set a
limit. After the number of log files reaches this limit, subsequent file
rotations delete the oldest rotated log file.

* Rotate the log file manually.
A manual rotation forces the immediate rotation of the target log file.

Changing the default log rotation settings is done using the
`set-log-attributes` subcommand, and rotating log files manually is done
using the `rotate-log` subcommand, as explained in the following
sections:

* link:#gkmbh[To Change the Rotation File Size]
* link:#gkman[To Change the File Rotation Interval]
* link:#gkmai[To Change the Limit Number of Retained Files]
* link:#gkmau[To Rotate Log Files Manually]

[[gkmbh]][[GSADG00380]][[to-change-the-rotation-file-size]]

===== To Change the Rotation File Size

Use the `set-log-attributes` subcommand in remote mode to change the log
rotation file size. The default target of this subcommand is the DAS.
Optionally, you can target a configuration, server, instance, or
cluster. The minimum size that can be set is 500 KB.

1. Ensure that the target server or cluster is running.

2. Change the rotation file size limit by using the
link:reference-manual/set-log-attributes.html#GSRFM00227[`set-log-attributes`] subcommand,
specifying the following attribute and the desired limit in bytes:
+
[source]
----
com.sun.enterprise.server.logging.GFFileHandler.rotationLimitInBytes=bytes
----

3. To apply your change, restart {productName}.

[[GSADG00181]][[gkmay]]
Example 7-12 Changing the Rotation Size

The following example sets the log file rotation size to 1 MB for the
standalone instance `ManagedServer1`:

[source]
----
asadmin> set-log-attributes --target ManagedServer1
com.sun.enterprise.server.logging.GFFileHandler.rotationLimitInBytes=1000000
com.sun.enterprise.server.logging.GFFileHandler.rotationLimitInBytes
logging attribute set with value 1000000.
These logging attributes are set for ManagedServer1.
ManagedServer1 :
com.sun.enterprise.server.logging.GFFileHandler.rotationLimitInBytes
logging attribute set with value 1000000.
These logging attributes are set for ManagedServer1.

Command set-log-attributes executed successfully.
----

[[GSADG868]]

See Also

You can view the full syntax and options of the subcommand by typing
`asadmin help set-log-attributes` at the command line.

[[gkman]][[GSADG00381]][[to-change-the-file-rotation-interval]]

===== To Change the File Rotation Interval

Use the `set-log-attributes` subcommand in remote mode to change the log
file rotation time limit interval. The default target of this subcommand
is the DAS. Optionally, you can target a configuration, server,
instance, or cluster. The default value is `0`.

1. Ensure that the target server or cluster is running.

2. Change the rotation time limit by using the
link:reference-manual/set-log-attributes.html#GSRFM00227[`set-log-attributes`] subcommand,
specifying the following attribute and the desired limit in minutes:
+
[source]
----
com.sun.enterprise.server.logging.GFFileHandler.rotationTimelimitInMinutes=minutes
----

3. To apply your change, restart {productName}.

[[GSADG00182]][[gkmbc]]
Example 7-13 Changing the Rotation Interval

The following example sets the log file rotation time limit for the
cluster `Cluster1`, which has the instances `ClusterServer1` and
`ClusterServer2`.

[source]
----
asadmin> set-log-attributes --target Cluster1
com.sun.enterprise.server.logging.GFFileHandler.rotationTimelimitInMinutes=10
com.sun.enterprise.server.logging.GFFileHandler.rotationTimelimitInMinutes
logging attribute set with value 10.
These logging attributes are set for Cluster1.
ClusterServer1 :
com.sun.enterprise.server.logging.GFFileHandler.rotationTimelimitInMinutes
logging attribute set with value 10.
These logging attributes are set for Cluster1.

ClusterServer2 :
com.sun.enterprise.server.logging.GFFileHandler.rotationTimelimitInMinutes
logging attribute set with value 10.
These logging attributes are set for Cluster1.

Command set-log-attributes executed successfully.
----

[[GSADG869]]

See Also

You can view the full syntax and options of the subcommand by typing
`asadmin help set-log-attributes` at the command line.

[[gkmai]][[GSADG00382]][[to-change-the-limit-number-of-retained-files]]

===== To Change the Limit Number of Retained Files

Use the `set-log-attributes` subcommand in remote mode to change the
limit on the number of log files that the server creates to store old
log messages. The default target of this subcommand is the DAS.
Optionally, you can target a configuration, server, instance, or
cluster. The default limit value is `0`, which results in no limit
placed on the number of rotated log files that are retained.

1. Ensure that the target server or cluster is running.
2. Change the limit number of retained log files by using the
link:reference-manual/set-log-attributes.html#GSRFM00227[`set-log-attributes`] subcommand,
specifying the following attribute and the desired file limit number:
+
[source]
----
com.sun.enterprise.server.logging.GFFileHandler.maxHistoryFiles=minutes
----
+
The behavior of the `com.sun.enterprise.server.logging.GFFileHandler.maxHistoryFiles`
attribute is as follows:
+
* If the property is not set, {productName} keeps
  a maximum of 10 rotated log files.
* If the property is set to an invalid number or null, {productName} keeps a maximum of 10 rotated log files.
* If the property is set to 0, {productName}
  retains all rotated log files (that is, sets no maximum).

3. To apply your change, restart {productName}.

[[GSADG00183]][[gkmaq]]
Example 7-14 Changing the Limit Number of Retained Files

The following example sets the log limit number of retained log files
for the DAS to `10`.

[source]
----
asadmin> set-log-attributes
com.sun.enterprise.server.logging.GFFileHandler.maxHistoryFiles=10
com.sun.enterprise.server.logging.GFFileHandler.maxHistoryFiles
logging attribute set with value 10.
These logging attributes are set for server.
Command set-log-attributes executed successfully.
----

[[GSADG870]]

See Also

You can view the full syntax and options of the subcommand by typing
`asadmin help set-log-attributes` at the command line.

[[gkmau]][[GSADG00383]][[to-rotate-log-files-manually]]

===== To Rotate Log Files Manually

You can rotate log files manually by using the `rotate-log` subcommand
in remote mode. The default target of this subcommand is the DAS.
Optionally, you can target a configuration, server, instance, or
cluster. When you use this subcommand, the target log file is
immediately moved to a new time-stamped file and a new log file is
created.

Because log rotation is a dynamic operation, you do not need to restart
{productName} for changes to take effect.

1. Ensure that the target server or cluster is running.
2. Rotate log files by using the link:reference-manual/rotate-log.html#GSRFM00224[`rotate-log`]
subcommand.

[[GSADG00184]][[gkmav]]
Example 7-15 Rotating Log Files Manually

The following example rotates the `server.log` file for `ManagedServer2`
to `server.log_`yyyy-mm-dd`T`hh-mm-ss, where yyyy-mm-dd`T`hh-mm-ss
represents the time when the file is rotated, and creates a new
`server.log` file in the default location.

[source]
----
asadmin> rotate-log --target ManagedServer2
Command rotate-log executed successfully.
----

[[GSADG871]]

See Also

You can view the full syntax and options of the subcommand by typing
`asadmin help rotate-log` at the command line.

[[gklnk]][[GSADG00726]][[adding-a-custom-logging-handler]]

==== Adding a Custom Logging Handler

By default, {productName} log records are
captured in a server log file using the format described in
link:#gkmex[Log Records]. However, you may find that you want to log
messages to a different location, such as a database or a remote server,
or log messages from specific loggers to your own file. This can be done
by implementing a custom log handler. This section explains how to add a
custom log handler to the {productName} logging
service.

[[ghmen]][[GSADG00384]][[to-add-a-custom-log-handler]]

===== To Add a Custom Log Handler

A comma-separated list of log handlers is installed during startup of
the Java Virtual Machine (JVM) host. The default log handler that is
provided in the `logging.properties` file, `ConsoleHandler`, is
configured as follows:

[source]
----
handlers=java.util.logging.ConsoleHandler
----

In {productName}, the best approach to developing
a custom handler is to define a Hundred-Kilobyte Kernel (HK2) component
that implements the handler contract. {productName} registers this handler automatically
because it is an HK2 component. There is no task required of the administrator.


[NOTE]
====
The custom handler class should be packaged in an OSGi module and the
JAR file placed in the as-install``/modules`` directory.
====


To configure a custom handler that is not developed as an HK2 component,
add the new handler to the `logging.properties` file after the developer
has put the custom handler JAR file into the domain-dir``/lib/ext`` directory.

[[GSADG872]]

Before You Begin

If you set a handler by setting the handlers attribute in the logging
properties file, the class that extends `java.util.logging.Handler` must
be in the server classpath.

1. Ensure that the target server or cluster is running.
+
Remote subcommands require a running server.
2. Use the link:reference-manual/set-log-attributes.html#GSRFM00227[`set-log-attributes`] subcommand to add the
handler to the `handlers` attribute.
+
The default target of this subcommand is the DAS. Optionally you can
target a configuration, server, instance, or cluster.
3. To apply your changes, restart {productName}.
+
See link:domains.html#ginqj[To Restart a Domain].

[[GSADG00185]][[ghphb]]
Example 7-16 Adding a New Log Handler

This example adds the custom logger `com.example.logging.MyHandler` to
the logging properties file of the DAS.

[source]
----
asadmin> set-log-attributes
handlers=java.util.logging.ConsoleHandler,com.example.logging.MyHandler
handlers logging attribute set with value
java.util.logging.ConsoleHandler,com.example.logging.MyHandler.
These logging attributes are set for server.
Command set-log-attributes executed successfully.
----

[[GSADG873]]

See Also

You can view the full syntax and options of the subcommand by typing
`asadmin help set-log-attributes` at the command line.

[[gkobx]][[GSADG00556]][[viewing-log-records]]

=== Viewing Log Records

The recommended means for general viewing of logging information is to
use the Log Viewer in the Administration Console. The Log Viewer
simplifies reading, searching, and filtering log file contents. For
instructions, see the Administration Console online help.

{productName} also allows you to collect log
files into a ZIP archive, which provides the means to obtain and view
log files for an instance or cluster even when it is not currently
running. The following section explains how to collect all available log
files for an instance or cluster and compile them into a single ZIP
archive, which is done by using the `collect-log-files` subcommand.

[[gklbi]][[GSADG00385]][[to-collect-log-files-into-a-zip-archive]]

==== To Collect Log Files into a ZIP Archive

Use the `collect-log-files` subcommand in remote mode to collect log
files into a ZIP archive. The default target of this subcommand is the
DAS. Optionally you can target a configuration, server, instance, or
cluster.

1. Ensure that the target server or cluster is running.
+
Remote subcommands require a running server.
2. Use the link:reference-manual/collect-log-files.html#GSRFM00007[`collect-log-files`] subcommand to create
the ZIP archive.
+
The default location in which the ZIP archive is created is the
domain-dir`/collected-logs` directory. The `collect-log-files`
subcommand allows you to specify a nondefault directory in which the ZIP
archive is to be created by using the `--retrieve` option set to `true`,
followed by the directory name.
+
The name of the ZIP file contains the timestamp, as follows:
+
`log_`yyyy-mm-dd_hh-min-sec`.zip`

[[GSADG00186]][[gklap]]
Example 7-17 Creating a ZIP Archive

This example shows collecting the log files for the cluster `MyCluster`
and compiling them into a ZIP archive in the `/space/output` directory.

[source]
----
asadmin> collect-log-files --target MyCluster
--retrieve true /space/output
Log files are downloaded for ClusterServer1.
Log files are downloaded for ClusterServer2.
 Created Zip file under /space/output/log_2011-02-10_13-35-25.zip.
Command collect-log-files executed successfully.
----

When the ZIP file created by the preceding command is uncompressed, the
following directory structure is created:

[source]
----
as-install-parent/
  glassfish/
    domains/
      domain-dir/
        collected_logs/
          logs/
            ClusterServer1/
              server.log
            ClusterServer2/
              server.log
----

[[GSADG874]]

See Also

You can view the full syntax and options of the subcommand by typing
`asadmin help collect-log-files` at the command line.

[[CEGGHGIJ]][[GSADG1073]][[listing-loggers]]

=== Listing Loggers

You can list and view information about all public loggers in your
distribution of {productName}.

[[CEGGICGF]][[GSADG1074]][[to-list-loggers]]

==== To List Loggers

Use the `list-loggers` subcommand in remote mode to list the logger
name, subsystem, and description of loggers in your distribution of
{productName}. Internal loggers are not listed.

1. Ensure that the target server or cluster is running. Remote commands require a running server.
2. List loggers by using the link:reference-manual/redeploy.html#GSRFM00217[`list-loggers`]
subcommand.

[[GSADG1075]][[sthref27]]
Example 7-18 Listing Loggers

This example lists the logger name, subsystem, and description for each
logger. Some lines of output are omitted from this example for
readability.

[source]
----
asadmin> list-loggers
Logger Name                            Subsystem         Logger Description
...
jakarta.enterprise.monitoring            Monitoring        Monitoring Logger
jakarta.enterprise.system.core.ee        AS-CORE           Jakarta EE Core Kernel
jakarta.enterprise.system.jmx            JMX               JMX System Logger
jakarta.enterprise.system.tools.admin    ADMIN             Administration Services
...
Command list-loggers executed successfully.
----

[[GSADG1076]]

See Also

You can also view the full syntax and options of the subcommand by
typing `asadmin help list-loggers` at the command line.


