LOG4J2-1136 - First part of documentation

Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/c309ba01
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/c309ba01
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/c309ba01

Branch: refs/heads/LOG4J2-1136
Commit: c309ba01bce7d3debcaa07529fa1d43f4dcd95c1
Parents: e6f719b
Author: Ralph Goers <[email protected]>
Authored: Sun Sep 27 19:38:49 2015 -0700
Committer: Ralph Goers <[email protected]>
Committed: Sun Sep 27 19:38:49 2015 -0700

----------------------------------------------------------------------
 src/site/site.xml                         |  2 +
 src/site/xdoc/manual/configuration.xml.vm | 73 +++++++++++++++++++++
 src/site/xdoc/manual/filters.xml          | 88 ++++++++++++++++++++++++++
 3 files changed, 163 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/c309ba01/src/site/site.xml
----------------------------------------------------------------------
diff --git a/src/site/site.xml b/src/site/site.xml
index 6b69789..8c076fa 100644
--- a/src/site/site.xml
+++ b/src/site/site.xml
@@ -72,6 +72,7 @@
         <item name="Configuring Appenders" 
href="/manual/configuration.html#Appenders"/>
         <item name="Configuring Filters" 
href="/manual/configuration.html#Filters"/>
         <item name="Property Substitution" 
href="/manual/configuration.html#PropertySubstitution"/>
+        <item name-"Scripts" href="/manual/configuration.html#Scripts"/>
         <item name="XInclude" href="/manual/configuration.html#XInclude"/>
         <item name="Status Messages" 
href="/manual/configuration.html#StatusMessages"/>
         <item name="Unit Testing in Maven" 
href="/manual/configuration.html#UnitTestingInMaven"/>
@@ -155,6 +156,7 @@
         <item name="Map" href="/manual/filters.html#MapFilter"/>
         <item name="Marker" href="/manual/filters.html#MarkerFilter"/>
         <item name="Regex" href="/manual/filters.html#RegexFilter"/>
+        <item name="Script" href="/manual/filters.html#Script"/>
         <item name="Structured Data" 
href="/manual/filters.html#StructuredDataFilter"/>
         <item name="Thread Context Map" 
href="/manual/filters.html#ThreadContextMapFilter"/>
         <item name="Threshold" href="/manual/filters.html#ThresholdFilter"/>

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/c309ba01/src/site/xdoc/manual/configuration.xml.vm
----------------------------------------------------------------------
diff --git a/src/site/xdoc/manual/configuration.xml.vm 
b/src/site/xdoc/manual/configuration.xml.vm
index 054dcd3..e831ba5 100644
--- a/src/site/xdoc/manual/configuration.xml.vm
+++ b/src/site/xdoc/manual/configuration.xml.vm
@@ -1040,6 +1040,79 @@ rootLogger.appenderRef.stdout.ref = STDOUT
             See <a href="appenders.html#RoutingAppender">RoutingAppender</a> 
for more information.</i>
           </p>
         </subsection>
+        <a name="Scripts"/>
+        <subsection name="Scripts">
+          <p>
+            Log4j provides support for <a 
href="http://docs.oracle.com/javase/6/docs/technotes/guides/scripting/";>JSR 
223</a>
+            scripting languages to be used in some of its components. Any 
language that provides support for the JSR
+            223 scripting engine may be used. A list of the languages and 
bindings for them can be found at the
+            <a 
href="https://java.net/projects/scripting/sources/svn/show/trunk/engines";>Scripting
 Engine</a> web site.
+            However, some of the languages listed there, such as JavaScript, 
Groovy and Beanshel, directly support the
+            JSR 223 scripting framework and only require that the jars for 
that language be installed.
+          </p>
+          <p>
+            The components that support using scripts do so by allowing a 
&lt;script&gt; element to be configured on
+            them. The script element contains a name for the script, the 
language of the script, and the script text.
+            The name of the script is used to store the script, along with its 
ScriptEngine, so it can quickly be
+            located each time the script needs to be run. While the name is 
not required, providing it will help in
+            debugging problems when the script is running. The language must 
be provided and must specify one of
+            the language names that appear in the Configuration log as 
described in the next section.
+          </p>
+          <p>
+            If the status attribute on the Configuration element is set to 
DEBUG the list of script engines currently
+            installed and their attributes will be listed. Although some 
engines may say they are not thread safe
+            Log4j takes steps to insure that the scripts will run in a 
thread-safe manner if the engine advertises
+            that it is not thread safe.
+          </p>
+          <pre>
+2015-09-27 16:13:22,925 main DEBUG Installed script engines
+2015-09-27 16:13:22,963 main DEBUG AppleScriptEngine Version: 1.1, Language: 
AppleScript, Threading: Not Thread Safe,
+            Compile: false, Names: {AppleScriptEngine, AppleScript, OSA}
+2015-09-27 16:13:22,983 main DEBUG Groovy Scripting Engine Version: 2.0, 
Language: Groovy, Threading: MULTITHREADED,
+            Compile: true, Names: {groovy, Groovy}
+2015-09-27 16:13:23,030 main DEBUG BeanShell Engine Version: 1.0, Language: 
BeanShell, Threading: MULTITHREADED,
+            Compile: true, Names: {beanshell, bsh, java}
+2015-09-27 16:13:23,039 main DEBUG Mozilla Rhino Version: 1.7 release 3 
PRERELEASE, Language: ECMAScript, Threading: MULTITHREADED,
+            Compile: true, Names: {js, rhino, JavaScript, javascript, 
ECMAScript, ecmascript}
+          </pre>
+          <p>
+            When the scripts are executed they will be provided with a set of 
variables that should allow them to
+            accomplish whatever task they are expected to perform. See the 
documentation for the individual components
+            for the list of variables that are available to the script.
+          </p>
+          <p>
+            The components that support scripting expect a return value to be 
passed back to the calling Java code.
+            This is not a problem for several of the scripting languages. 
However, Javascript does not allow a
+            return statement unless it is within a function. However, 
Javascript will return the value of the last
+            statement executed in the script. As a consequence, code such as 
that shown below will result in the
+            desired behavior.
+          </p>
+          <pre>
+            var result;
+            if (logEvent.getLoggerName().equals("JavascriptNoLocation")) {
+                result = "NoLocation";
+            } else if (logEvent.getMarker() != null && 
logEvent.getMarker().isInstanceOf("FLOW")) {
+                result = "Flow";
+            }
+            result;
+          </pre>
+          <h4>A special note on Beanshell</h4>
+          <p>
+            JSR 223 scripting engines are supposed to identify that they 
support the Compilable interface if they
+            support compiling their scripts. Beanshell does this. However, 
whenever the compile method is called it
+            throws an Error (not an Exception). Log4j catches this but will 
log the warning shown below for each
+            Beanshell script when it tries to compile them. All Beanshell 
scripts will then be interpreted on each
+            execution.
+          </p>
+          <pre>
+2015-09-27 16:13:23,095 main DEBUG Script BeanShellSelector is compilable
+2015-09-27 16:13:23,096 main WARN Error compiling script java.lang.Error: 
unimplemented
+            at bsh.engine.BshScriptEngine.compile(BshScriptEngine.java:175)
+            at bsh.engine.BshScriptEngine.compile(BshScriptEngine.java:154)
+            at 
org.apache.logging.log4j.core.script.ScriptManager$MainScriptRunner.<init>(ScriptManager.java:125)
+            at 
org.apache.logging.log4j.core.script.ScriptManager.addScript(ScriptManager.java:94)
+          </pre>
+        </subsection>
         <a name="XInclude"/>
         <subsection name="XInclude">
           <p>

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/c309ba01/src/site/xdoc/manual/filters.xml
----------------------------------------------------------------------
diff --git a/src/site/xdoc/manual/filters.xml b/src/site/xdoc/manual/filters.xml
index edfb386..d5b1252 100644
--- a/src/site/xdoc/manual/filters.xml
+++ b/src/site/xdoc/manual/filters.xml
@@ -461,6 +461,94 @@
   </Loggers>
 </Configuration>]]></pre>
         </subsection>
+        <a name="Script"/>
+        <subsection name="Script">
+          <p>
+            The ScriptFilter executes a script that returns true or false.
+          </p>
+          <table>
+            <caption align="top">Script Filter Parameters</caption>
+            <tr>
+              <th>Parameter Name</th>
+              <th>Type</th>
+              <th>Description</th>
+            </tr>
+            <tr>
+              <td>script</td>
+              <td>Script</td>
+              <td>The Script element that specifies the logic to be executed.
+              </td>
+            </tr>
+            <tr>
+              <td>onMatch</td>
+              <td>String</td>
+              <td>Action to take when the script returns true. May be ACCEPT, 
DENY or NEUTRAL. The default value is NEUTRAL.</td>
+            </tr>
+            <tr>
+              <td>onMismatch</td>
+              <td>String</td>
+              <td>Action to take when the filter returns false. May be ACCEPT, 
DENY or NEUTRAL. The default value is
+                DENY.</td>
+            </tr>
+          </table>
+          <table>
+            <caption align="top">Script Parameters</caption>
+            <tr>
+              <th>Parameter Name</th>
+              <th>Type</th>
+              <th>Description</th>
+            </tr>
+            <tr>
+              <td>configuration</td>
+              <td>Configuration</td>
+              <td>The Configuration that owns this ScriptFilter.</td>
+            </tr>
+            <tr>
+              <td>level</td>
+              <td>Level</td>
+              <td>The logging Level associated with the event. Only present 
when configured as a global filter.</td>
+            </tr>
+            <tr>
+              <td>loggerName</td>
+              <td>String</td>
+              <td>The name of the logger. Only present when configured as a 
global filter.</td>
+            </tr>
+            <tr>
+              <td>logEvent</td>
+              <td>LogEvent</td>
+              <td>The LogEvent being processed. Not present when configured as 
a global filter.</td>
+            </tr>
+            <tr>
+              <td>marker</td>
+              <td>Marker</td>
+              <td>The Marker passed on the logging call, if any. Only present 
when configured as a global filter.</td>
+            </tr>
+            <tr>
+              <td>message</td>
+              <td>Message</td>
+              <td>The Message associated with the logging call. Only present 
when configured as a global filter.</td>
+            </tr>
+            <tr>
+              <td>parameters</td>
+              <td>Object[]</td>
+              <td>The parameters passed to the logging call. Only present when 
configured as a global filter.
+                Some Messages include the parameters as part of the Message.
+              </td>
+            </tr>
+            <tr>
+              <td>throwable</td>
+              <td>Throwable</td>
+              <td>The Throwable passed to the logging call, if any. Only 
present when configured as a global filter.
+                Som Messages include Throwable as part of the Message.
+              </td>
+            </tr>
+            <tr>
+              <td>substitutor</td>
+              <td>StrSubstitutor</td>
+              <td>The StrSubstitutor used to replace lookup variables.</td>
+            </tr>
+          </table>
+        </subsection>
         <a name="StructuredDataFilter"/>
         <subsection name="StructuredDataFilter">
           <p>

Reply via email to