Author: chetanm
Date: Sun Nov 17 14:43:57 2013
New Revision: 1542739

URL: http://svn.apache.org/r1542739
Log:
SLING-3070 - Update Log help document with Logback related details 

Adding OSGi based configuration steps from previous documentation

Modified:
    sling/site/trunk/content/documentation/development/logging-new.mdtext

Modified: sling/site/trunk/content/documentation/development/logging-new.mdtext
URL: 
http://svn.apache.org/viewvc/sling/site/trunk/content/documentation/development/logging-new.mdtext?rev=1542739&r1=1542738&r2=1542739&view=diff
==============================================================================
--- sling/site/trunk/content/documentation/development/logging-new.mdtext 
(original)
+++ sling/site/trunk/content/documentation/development/logging-new.mdtext Sun 
Nov 17 14:43:57 2013
@@ -21,6 +21,7 @@ features
   * [log4j](http://logging.apache.org/log4j/index.html)
   * 
[java.util.logging](http://download.oracle.com/javase/6/docs/api/java/util/logging/package-summary.html)
 * Configures logging through Logback which is integrated with the OSGi 
environment
+* Logging can be configured both via editing Logback xml or via OSGi 
Configurations
 
 ## Logback Integration
 
@@ -41,6 +42,7 @@ Following sections would provide more de
 [Logback TurboFilter][3] operate globally and invoked for every Logback call. 
To register a `TurboFilter` as OSGi service
 the bundle just need to register a service  against 
`ch.qos.logback.classic.turbo.TurboFilter` class
 
+    :::java
     import import ch.qos.logback.classic.turbo.MatchingFilter;
 
     SimpleTurboFilter stf = new SimpleTurboFilter();
@@ -66,6 +68,7 @@ be passed to the appender. When register
 `appenders` which refers to list of appender names to which the Filter must be 
attached
 
 
+    :::java
     import ch.qos.logback.core.filter.Filter;
 
     SimpleFilter stf = new SimpleFilter();
@@ -92,6 +95,7 @@ appender the bundle needs to configure a
 the Appender must be attached
 
 
+    :::java
     Dictionary<String,Object> props = new Hashtable<String, Object>();
 
     String[] loggers = {
@@ -148,7 +152,7 @@ Another way to provide config fragment i
         }
     }
 
-If the config changes then sending an event to 
`org/apache/sling/commons/log/RESET` would reset the listener
+If the config changes then sending an event to 
`org/apache/sling/commons/log/RESET` would reset the Logback runtime
 
 
     eventAdmin.sendEvent(new Event("org/apache/sling/commons/log/RESET",new 
Properties()));
@@ -165,7 +169,7 @@ Logback can be configured with an extern
 If you are providing an external config file then to support OSGi integration 
you would need to add following
 action entry
 
-
+    :::xml
     <newRule pattern="*/configuration/osgi"
              actionClass="org.apache.sling.commons.log.logback.OsgiAction"/>
     <newRule pattern="*/configuration/appender-ref-osgi"
@@ -182,12 +186,13 @@ needs to be done. This features allows r
 1. Set framework property `org.apache.sling.commons.log.julenabled` to true
 2. Set the [LevelChangePropagator][8] in LogbackConfig
 
-        <configuration>
-            <contextListener 
class="ch.qos.logback.classic.jul.LevelChangePropagator"/>
-            ...
-        </configuration>
+    :::xml
+    <configuration>
+      <contextListener 
class="ch.qos.logback.classic.jul.LevelChangePropagator"/>
+      ...
+    </configuration>
 
-### Configuring OSGi based appenders in Logback Config
+### <a name="config-override"></a>Configuring OSGi based appenders in Logback 
Config
 
 So far Sling used to configure the appenders based on OSGi config. That mode 
only provide a very limited
 set to configuration options. To make use of other Logback features you can 
override the OSGi config
@@ -205,7 +210,7 @@ For example for following OSGi config
 The Logback appender would be named as `logs/error.log`. To extend/override 
the config in Logback config
 create an appender with name `logs/error.log`
 
-
+    :::xml
     <appender name="/logs/error.log" class="ch.qos.logback.core.FileAppender">
       <file>${sling.home}/logs/error.log</file>
       <encoder>
@@ -233,6 +238,100 @@ The `org.apache.sling.commons.log` bundl
 | `org.apache.sling.commons.log.julenabled` | n/a | Enables the 
`java.util.logging` support. |
 | `org.apache.sling.commons.log.configurationFile` | n/a | Path for the 
Logback config file which would be used to configure logging. If the path is 
not absolute then it would be resolved against Sling Home |
 
+## User Configuration - OSGi Based
+
+User Configuration after initial configuration is provided by the 
Configuration Admin Service. To this avail two
+`org.osgi.services.cm.ManagedServiceFactory` services are registered under the 
PIDs `org.apache.sling.commons.log.LogManager.factory.writer`
+and `org.apache.sling.commons.log.LogManager.factory.config` which may receive 
configuration.
+
+
+### Logger Configuration
+
+Loggers (or Categories) can be configured to log to specific files at specific 
levels using configurable patterns.
+To this avail factory configuration instances with factory PID 
`org.apache.sling.commons.log.LogManager.factory.config`
+may be created and configured with the Configuration Admin Service.
+
+The following properties may be set:
+
+| Property | Type | Default | Description |
+|--|--|--|--|
+| `org.apache.sling.commons.log.level` | `String` | `INFO` | Sets the logging 
level of the loggers. This may be any of the defined logging levels `DEBUG`, 
`INFO`, `WARN`, `ERROR` and `FATAL`. |
+| `org.apache.sling.commons.log.file` | `String` | undefined | Sets the log 
file to which log messages are written. If this property is empty or missing, 
log messages are written to `System.out`. This property should refer to the 
file name of a configured Log Writer (see below). If no Log Writer is 
configured with the same file name an implicit Log Writer configuration with 
default configuration is created. |
+| `org.apache.sling.commons.log.pattern` | `String` | \{0,date,dd.MM.yyyy 
HH:mm:ss.SSS\} \*\{4\}\* \[\{2\}\]({{ refs.-2.path }}) \{3\} \{5\} | The 
`java.util.MessageFormat` pattern to use for formatting log messages with the 
root logger. This is a `java.util.MessageFormat` pattern supporting up to six 
arguments: \{0\} The timestamp of type `java.util.Date`, \{1\} the log marker, 
\{2\} the name of the current thread, \{3\} the name of the logger, \{4\} the 
debug level and \{5\} the actual debug message. If the log call includes a 
Throwable, the stacktrace is just appended to the message regardless of the 
pattern. |
+| `org.apache.sling.commons.log.names` | `String\[\]` | -- | A list of logger 
names to which this configuration applies. |
+
+
+Note that multiple Logger Configurations may refer to the same Log Writer 
Configuration. If no Log Writer Configuration
+exists whose file name matches the file name set on the Logger Configuration 
an implicit Log Writer Configuration
+with default setup (daily log rotation) is internally created.
+
+
+### Log Writer Configuration
+
+Log Writer Configuration is used to setup file output and log file rotation 
characteristics for log writers used by the Loggers.
+
+The following properties may be set:
+
+| Property | Default | Description |
+|--|--|--|
+| `org.apache.sling.commons.log.file` | undefined | Sets the log file to which 
log messages are written. If this property is empty or missing, log messages 
are written to `System.out`. |
+| `org.apache.sling.commons.log.file.number` | 5 | The number of rotated files 
to keep. |
+| `org.apache.sling.commons.log.file.size` | '.'yyyy-MM-dd | Defines how the 
log file is rotated (by schedule or by size) and when to rotate. See the 
section *Log File Rotation* below for full details on log file rotation. |
+
+See the section *Log File Rotation* below for full details on the 
`org.apache.sling.commons.log.file.size` and
+`org.apache.sling.commons.log.file.number` properties.
+
+
+
+#### Log File Rotation
+
+Log files can grow rather quickly and fill up available disk space. To cope 
with this growth log files may be rotated in
+two ways: At specific times or when the log file reaches a configurable size. 
The first method is called *Scheduled Rotation*
+and is used by specifying a `SimpleDateFormat` pattern as the log file "size". 
The second method is called *Size Rotation*
+and is used by setting a maximum file size as the log file size.
+
+As of version 2.0.6 of the Sling Commons Log bundle, the default value for log 
file scheduling is `'.'yyyy-MM-dd`
+causing daily log rotation. Previously log rotation defaulted to a 10MB file 
size limit.
+
+##### Scheduled Rotation
+
+The rolling schedule is specified by setting the 
`org.apache.sling.commons.log.file.size` property to a
+`java.text.SimpleDateFormat` pattern. Literal text (such as a leading dot) to 
be included must be *enclosed* within a
+pair of single quotes. A formatted version of the date pattern is used as the 
suffix for the rolled file name. Internally
+the Log bundle configures a `TimeBasedRollingPolicy` for the appender. Refer 
to [TimeBasedRollingPolicy][10] for
+more details around the pattern format
+
+For example, if the log file is configured as `/foo/bar.log` and the pattern 
set to `'.'yyyy-MM-dd`, on
+2001-02-16 at midnight, the logging file `/foo/bar.log` will be renamed to 
`/foo/bar.log.2001-02-16` and logging for
+2001-02-17 will continue in a new `/foo/bar.log` file until it rolls over the 
next day.
+
+It is possible to specify monthly, weekly, half-daily, daily, hourly, or 
minutely rollover schedules.
+
+| DatePattern | Rollover schedule | Example |
+|--|--|--|
+| `'.'yyyy-MM` | Rollover at the beginning of each month | At midnight of May 
31st, 2002 `/foo/bar.log` will be copied to `/foo/bar.log.2002-05`. Logging for 
the month of June will be output to `/foo/bar.log` until it is also rolled over 
the next month. |
+| `'.'yyyy-ww` | Rollover at the first day of each week. The first day of the 
week depends on the locale. | Assuming the first day of the week is Sunday, on 
Saturday midnight, June 9th 2002, the file `/foo/bar.log` will be copied to 
`/foo/bar.log.2002-23`. Logging for the 24th week of 2002 will be output to 
`/foo/bar.log` until it is rolled over the next week. |
+| `'.'yyyy-MM-dd` | Rollover at midnight each day.| At midnight, on March 8th, 
2002, `/foo/bar.log` will be copied to `/foo/bar.log.2002-03-08`. Logging for 
the 9th day of March will be output to `/foo/bar.log` until it is rolled over 
the next day.|
+| `'.'yyyy-MM-dd-a` | Rollover at midnight and midday of each day.| at noon, 
on March 9th, 2002, `/foo/bar.log` will be copied to  
`/foo/bar.log.2002-03-09-AM`. Logging for the afternoon of the 9th will be 
output to `/foo/bar.log` until it is rolled over at midnight.|
+| `'.'yyyy-MM-dd-HH` | Rollover at the top of every hour.| At approximately 
11:00.000 o'clock on March 9th, 2002, `/foo/bar.log` will be copied to 
`/foo/bar.log.2002-03-09-10`. Logging for the 11th hour of the 9th of March 
will be output to `/foo/bar.log` until it is rolled over at the beginning of 
the next hour.|
+| `'.'yyyy-MM-dd-HH-mm` | Rollover at the beginning of every minute.| At 
approximately 11:23,000, on March 9th, 2001, `/foo/bar.log` will be copied to 
`/foo/bar.log.2001-03-09-10-22`. Logging for the minute of 11:23 (9th of March) 
will be output to `/foo/bar.log` until it is rolled over the next minute.|
+
+Do not use the colon ":" character in anywhere in the pattern option. The text 
before the colon is interpreted as the
+protocol specification of a URL which is probably not what you want.
+
+Note that Scheduled Rotation ignores the 
`org.apache.sling.commons.log.file.number` property since the old log files are
+not numbered but "dated".
+
+
+##### Size Rotation
+
+Log file rotation by size is specified by setting the 
`org.apache.sling.commons.log.file.size` property to a plain number
+or a number plus a size multiplier. The size multiplier may be any of `K`, 
`KB`, `M`, `MB`, `G`, or `GB` where the case
+is ignored and the meaning is probably obvious.
+
+When using Size Rotation, the `org.apache.sling.commons.log.file.number` 
defines the number of old log file generations
+to keep. For example to keep 5 old log files indexed by 0 through 4, set the 
`org.apache.sling.commons.log.file.number`
+to `5` (which happens to be the default).
 
 ## WebConsole Plugin enhancements
 
@@ -251,4 +350,5 @@ The web Console Plugin supports followin
 [3]: http://logback.qos.ch/manual/filters.html#TurboFilter
 [4]: http://logback.qos.ch/manual/configuration.html#fileInclusion
 [8]: http://logback.qos.ch/manual/configuration.html#LevelChangePropagator
-[9]: http://www.slf4j.org/api/org/slf4j/bridge/SLF4JBridgeHandler.html
\ No newline at end of file
+[9]: http://www.slf4j.org/api/org/slf4j/bridge/SLF4JBridgeHandler.html
+[10]: http://logback.qos.ch/manual/appenders.html#TimeBasedRollingPolicy
\ No newline at end of file


Reply via email to