You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by rg...@apache.org on 2013/04/19 22:46:15 UTC
svn commit: r1470034 [1/2] - in /logging/log4j/log4j2/trunk: ./
src/site/xdoc/ taglib/
taglib/src/main/java/org/apache/logging/log4j/taglib/ taglib/src/test/
taglib/src/test/java/ taglib/src/test/java/org/
taglib/src/test/java/org/apache/ taglib/src/te...
Author: rgoers
Date: Fri Apr 19 20:46:14 2013
New Revision: 1470034
URL: http://svn.apache.org/r1470034
Log:
LOG4J2-187 - taglib documentation
Added:
logging/log4j/log4j2/trunk/taglib/src/test/
logging/log4j/log4j2/trunk/taglib/src/test/java/
logging/log4j/log4j2/trunk/taglib/src/test/java/org/
logging/log4j/log4j2/trunk/taglib/src/test/java/org/apache/
logging/log4j/log4j2/trunk/taglib/src/test/java/org/apache/logging/
logging/log4j/log4j2/trunk/taglib/src/test/java/org/apache/logging/log4j/
logging/log4j/log4j2/trunk/taglib/src/test/java/org/apache/logging/log4j/taglib/
logging/log4j/log4j2/trunk/taglib/src/test/java/org/apache/logging/log4j/taglib/CatchingTagTest.java
logging/log4j/log4j2/trunk/taglib/src/test/java/org/apache/logging/log4j/taglib/DebugTagTest.java
logging/log4j/log4j2/trunk/taglib/src/test/java/org/apache/logging/log4j/taglib/DumpTagTest.java
logging/log4j/log4j2/trunk/taglib/src/test/java/org/apache/logging/log4j/taglib/EntryTagTest.java
logging/log4j/log4j2/trunk/taglib/src/test/java/org/apache/logging/log4j/taglib/ErrorTagTest.java
logging/log4j/log4j2/trunk/taglib/src/test/java/org/apache/logging/log4j/taglib/ExceptionAwareTagSupportTest.java
logging/log4j/log4j2/trunk/taglib/src/test/java/org/apache/logging/log4j/taglib/ExitTagTest.java
logging/log4j/log4j2/trunk/taglib/src/test/java/org/apache/logging/log4j/taglib/FatalTagTest.java
logging/log4j/log4j2/trunk/taglib/src/test/java/org/apache/logging/log4j/taglib/IfEnabledTagTest.java
logging/log4j/log4j2/trunk/taglib/src/test/java/org/apache/logging/log4j/taglib/InfoTagTest.java
logging/log4j/log4j2/trunk/taglib/src/test/java/org/apache/logging/log4j/taglib/LogTagTest.java
logging/log4j/log4j2/trunk/taglib/src/test/java/org/apache/logging/log4j/taglib/LoggerAwareTagSupportTest.java
logging/log4j/log4j2/trunk/taglib/src/test/java/org/apache/logging/log4j/taglib/LoggingMessageTagSupportTest.java
logging/log4j/log4j2/trunk/taglib/src/test/java/org/apache/logging/log4j/taglib/SetLoggerTagTest.java
logging/log4j/log4j2/trunk/taglib/src/test/java/org/apache/logging/log4j/taglib/TagUtilsTest.java
logging/log4j/log4j2/trunk/taglib/src/test/java/org/apache/logging/log4j/taglib/TraceTagTest.java
logging/log4j/log4j2/trunk/taglib/src/test/java/org/apache/logging/log4j/taglib/WarnTagTest.java
logging/log4j/log4j2/trunk/taglib/src/test/resources/
logging/log4j/log4j2/trunk/taglib/src/test/resources/log4j-test1.xml
Modified:
logging/log4j/log4j2/trunk/pom.xml
logging/log4j/log4j2/trunk/src/site/xdoc/build.xml.vm
logging/log4j/log4j2/trunk/taglib/pom.xml
logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/CatchingTag.java
logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/DebugTag.java
logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/DumpTag.java
logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/EntryTag.java
logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/ErrorTag.java
logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/ExceptionAwareTagSupport.java
logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/ExitTag.java
logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/FatalTag.java
logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/IfEnabledTag.java
logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/InfoTag.java
logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/Log4jTaglibLoggerContext.java
logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/LogTag.java
logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/LoggerAwareTagSupport.java
logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/LoggingMessageTagSupport.java
logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/SetLoggerTag.java
logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/TraceTag.java
logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/WarnTag.java
logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/package-info.java
Modified: logging/log4j/log4j2/trunk/pom.xml
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/pom.xml?rev=1470034&r1=1470033&r2=1470034&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/pom.xml (original)
+++ logging/log4j/log4j2/trunk/pom.xml Fri Apr 19 20:46:14 2013
@@ -321,10 +321,18 @@
<artifactId>maven-checkstyle-plugin</artifactId>
</plugin>
<plugin>
+ <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
+ <version>3.0</version>
<configuration>
<source>${maven.compile.source}</source>
<target>${maven.compile.target}</target>
+ <showDeprecation>true</showDeprecation>
+ <showWarnings>true</showWarnings>
+ <compilerArguments>
+ <Xmaxwarns>10000</Xmaxwarns>
+ <Xlint />
+ </compilerArguments>
</configuration>
</plugin>
<plugin>
Modified: logging/log4j/log4j2/trunk/src/site/xdoc/build.xml.vm
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/src/site/xdoc/build.xml.vm?rev=1470034&r1=1470033&r2=1470034&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/src/site/xdoc/build.xml.vm (original)
+++ logging/log4j/log4j2/trunk/src/site/xdoc/build.xml.vm Fri Apr 19 20:46:14 2013
@@ -41,7 +41,7 @@
<subsection name="Using Log4J on your classpath">
<p>
To use Log4j 2 in your application make sure that both the API and Core jars are in the application's
- classpath. Add the dependencies listed below to your classpath.
+ classpath. Add the dependencies listed below to your classpath.
</p>
<ul>
<li><code>log4j-api-${Log4jReleaseVersion}.jar</code></li>
@@ -53,7 +53,7 @@
</subsection>
<subsection name="Using Log4J in your Apache Maven build">
<p>
- To build with <a href="http://maven.apache.org/">Apache Maven</a>, add the dependencies listed below to your
+ To build with <a href="http://maven.apache.org/">Apache Maven</a>, add the dependencies listed below to your
<code>pom.xml</code> file.
</p>
<pre class="prettyprint linenums"><![CDATA[
@@ -68,7 +68,7 @@
<artifactId>log4j-core</artifactId>
<version>${Log4jReleaseVersion}</version>
</dependency>
-</dependecies>
+</dependencies>
]]></pre>
</subsection>
<subsection name="Using Log4J in your Apache Ivy build">
@@ -80,7 +80,7 @@
<dependencies>
<dependency org="org.apache.logging.log4j" name="log4j-api" rev="${Log4jReleaseVersion}" />
<dependency org="org.apache.logging.log4j" name="log4j-core" rev="${Log4jReleaseVersion}" />
-</dependecies>
+</dependencies>
]]></pre>
</subsection>
<subsection name="Optional Components">
@@ -112,7 +112,7 @@
<artifactId>log4j-jcl</artifactId>
<version>${Log4jReleaseVersion}</version>
</dependency>
-</dependecies>
+</dependencies>
]]></pre>
<h4>SLF4J</h4>
<p>SLF4J is another popular logging API that may be bound to Log4j 2 by including the following
@@ -125,7 +125,21 @@
<artifactId>log4j-slf4j-impl</artifactId>
<version>${Log4jReleaseVersion}</version>
</dependency>
-</dependecies>
+</dependencies>
+]]></pre>
+ <h4>Tag Library</h4>
+ <p>The Log4j Log Tag Library creates the capability of inserting log statements in JSPs without
+ the use of Java scripting. It uses the standard Log4j 2 API to log messages according to
+ your Log4j configuration.
+ </p>
+<pre class="prettyprint linenums"><![CDATA[
+<dependencies>
+ <dependency>
+ <groupId>org.apache.logging.log4j</groupId>
+ <artifactId>log4j-taglib</artifactId>
+ <version>${Log4jReleaseVersion}</version>
+ </dependency>
+</dependencies>
]]></pre>
</subsection>
</section>
Modified: logging/log4j/log4j2/trunk/taglib/pom.xml
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/taglib/pom.xml?rev=1470034&r1=1470033&r2=1470034&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/taglib/pom.xml (original)
+++ logging/log4j/log4j2/trunk/taglib/pom.xml Fri Apr 19 20:46:14 2013
@@ -39,6 +39,7 @@
<log4jParentDir>${basedir}/..</log4jParentDir>
<docLabel>Log4j Tag Library Documentation</docLabel>
<projectDir>/taglib</projectDir>
+ <spring.version>3.1.2.RELEASE</spring.version>
</properties>
<dependencies>
<dependency>
@@ -46,10 +47,6 @@
<artifactId>log4j-api</artifactId>
</dependency>
<dependency>
- <groupId>org.apache.logging.log4j</groupId>
- <artifactId>log4j-core</artifactId>
- </dependency>
- <dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
@@ -64,6 +61,11 @@
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.logging.log4j</groupId>
+ <artifactId>log4j-core</artifactId>
<type>test-jar</type>
<scope>test</scope>
</dependency>
@@ -72,6 +74,18 @@
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-core</artifactId>
+ <version>${spring.version}</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-test</artifactId>
+ <version>${spring.version}</version>
+ <scope>test</scope>
+ </dependency>
</dependencies>
<reporting>
<plugins>
@@ -95,7 +109,6 @@
<artifactId>maven-checkstyle-plugin</artifactId>
<version>2.7</version>
<configuration>
- <!--<propertiesLocation>${vfs.parent.dir}/checkstyle.properties</propertiesLocation> -->
<configLocation>${log4jParentDir}/checkstyle.xml</configLocation>
<suppressionsLocation>${log4jParentDir}/checkstyle-suppressions.xml</suppressionsLocation>
<enableRulesSummary>false</enableRulesSummary>
@@ -185,7 +198,7 @@
<version>2.2</version>
<reportSets>
<reportSet>
- <!-- Disabled at it kills the site generation via a NoClassDefFoundError -->
+ <!-- Disabled as it kills the site generation via a NoClassDefFoundError -->
<reports />
</reportSet>
</reportSets>
Modified: logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/CatchingTag.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/CatchingTag.java?rev=1470034&r1=1470033&r2=1470034&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/CatchingTag.java (original)
+++ logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/CatchingTag.java Fri Apr 19 20:46:14 2013
@@ -27,6 +27,8 @@ import javax.servlet.jsp.tagext.Tag;
* @since 2.0
*/
public class CatchingTag extends ExceptionAwareTagSupport {
+ private static final long serialVersionUID = 1L;
+
private static final String FQCN = CatchingTag.class.getName();
private Level level;
Modified: logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/DebugTag.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/DebugTag.java?rev=1470034&r1=1470033&r2=1470034&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/DebugTag.java (original)
+++ logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/DebugTag.java Fri Apr 19 20:46:14 2013
@@ -24,6 +24,8 @@ import org.apache.logging.log4j.Level;
* @since 2.0
*/
public class DebugTag extends LoggingMessageTagSupport {
+ private static final long serialVersionUID = 1L;
+
@Override
protected Level getLevel() {
return Level.DEBUG;
Modified: logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/DumpTag.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/DumpTag.java?rev=1470034&r1=1470033&r2=1470034&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/DumpTag.java (original)
+++ logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/DumpTag.java Fri Apr 19 20:46:14 2013
@@ -29,6 +29,8 @@ import java.util.Enumeration;
* @since 2.0
*/
public class DumpTag extends TagSupport {
+ private static final long serialVersionUID = 1L;
+
private int scope;
public DumpTag() {
@@ -55,7 +57,7 @@ public class DumpTag extends TagSupport
try {
Enumeration<String> names = this.pageContext.getAttributeNamesInScope(this.scope);
this.pageContext.getOut().write("<dl>");
- while (names.hasMoreElements()) {
+ while (names != null && names.hasMoreElements()) {
String name = names.nextElement();
Object value = this.pageContext.getAttribute(name, this.scope);
Modified: logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/EntryTag.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/EntryTag.java?rev=1470034&r1=1470033&r2=1470034&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/EntryTag.java (original)
+++ logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/EntryTag.java Fri Apr 19 20:46:14 2013
@@ -30,6 +30,8 @@ import java.util.List;
* @since 2.0
*/
public class EntryTag extends LoggerAwareTagSupport implements DynamicAttributes {
+ private static final long serialVersionUID = 1L;
+
private static final String FQCN = EntryTag.class.getName();
private List<Object> attributes;
Modified: logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/ErrorTag.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/ErrorTag.java?rev=1470034&r1=1470033&r2=1470034&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/ErrorTag.java (original)
+++ logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/ErrorTag.java Fri Apr 19 20:46:14 2013
@@ -24,6 +24,8 @@ import org.apache.logging.log4j.Level;
* @since 2.0
*/
public class ErrorTag extends LoggingMessageTagSupport {
+ private static final long serialVersionUID = 1L;
+
@Override
protected Level getLevel() {
return Level.ERROR;
Modified: logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/ExceptionAwareTagSupport.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/ExceptionAwareTagSupport.java?rev=1470034&r1=1470033&r2=1470034&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/ExceptionAwareTagSupport.java (original)
+++ logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/ExceptionAwareTagSupport.java Fri Apr 19 20:46:14 2013
@@ -22,6 +22,8 @@ package org.apache.logging.log4j.taglib;
* @since 2.0
*/
abstract class ExceptionAwareTagSupport extends LoggerAwareTagSupport {
+ private static final long serialVersionUID = 1L;
+
private Throwable exception;
@Override
Modified: logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/ExitTag.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/ExitTag.java?rev=1470034&r1=1470033&r2=1470034&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/ExitTag.java (original)
+++ logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/ExitTag.java Fri Apr 19 20:46:14 2013
@@ -27,9 +27,11 @@ import javax.servlet.jsp.tagext.Tag;
* @since 2.0
*/
public class ExitTag extends LoggerAwareTagSupport {
+ private static final long serialVersionUID = 1L;
+
private static final String FQCN = ExitTag.class.getName();
- private Object result;
+ private transient Object result;
@Override
protected void init() {
Modified: logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/FatalTag.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/FatalTag.java?rev=1470034&r1=1470033&r2=1470034&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/FatalTag.java (original)
+++ logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/FatalTag.java Fri Apr 19 20:46:14 2013
@@ -24,6 +24,8 @@ import org.apache.logging.log4j.Level;
* @since 2.0
*/
public class FatalTag extends LoggingMessageTagSupport {
+ private static final long serialVersionUID = 1L;
+
@Override
protected Level getLevel() {
return Level.FATAL;
Modified: logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/IfEnabledTag.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/IfEnabledTag.java?rev=1470034&r1=1470033&r2=1470034&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/IfEnabledTag.java (original)
+++ logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/IfEnabledTag.java Fri Apr 19 20:46:14 2013
@@ -28,7 +28,9 @@ import javax.servlet.jsp.tagext.Tag;
* @since 2.0
*/
public class IfEnabledTag extends LoggerAwareTagSupport {
- private Object level;
+ private static final long serialVersionUID = 1L;
+
+ private transient Object level;
private Marker marker;
Modified: logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/InfoTag.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/InfoTag.java?rev=1470034&r1=1470033&r2=1470034&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/InfoTag.java (original)
+++ logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/InfoTag.java Fri Apr 19 20:46:14 2013
@@ -24,6 +24,8 @@ import org.apache.logging.log4j.Level;
* @since 2.0
*/
public class InfoTag extends LoggingMessageTagSupport {
+ private static final long serialVersionUID = 1L;
+
@Override
protected Level getLevel() {
return Level.INFO;
Modified: logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/Log4jTaglibLoggerContext.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/Log4jTaglibLoggerContext.java?rev=1470034&r1=1470033&r2=1470034&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/Log4jTaglibLoggerContext.java (original)
+++ logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/Log4jTaglibLoggerContext.java Fri Apr 19 20:46:14 2013
@@ -24,8 +24,7 @@ import org.apache.logging.log4j.spi.Abst
import org.apache.logging.log4j.spi.LoggerContext;
import javax.servlet.ServletContext;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
+import java.util.WeakHashMap;
/**
* This bridge between the tag library and the Log4j API ensures that instances of {@link Log4jTaglibLogger} are
@@ -34,11 +33,13 @@ import java.util.concurrent.ConcurrentMa
* @since 2.0
*/
final class Log4jTaglibLoggerContext implements LoggerContext {
- private static final ConcurrentMap<ServletContext, Log4jTaglibLoggerContext> CONTEXTS =
- new ConcurrentHashMap<ServletContext, Log4jTaglibLoggerContext>();
+ // These were change to WeakHashMaps to avoid ClassLoader (memory) leak, something that's particularly
+ // important in Servlet containers.
+ private static final WeakHashMap<ServletContext, Log4jTaglibLoggerContext> CONTEXTS =
+ new WeakHashMap<ServletContext, Log4jTaglibLoggerContext>();
- private final ConcurrentMap<String, Log4jTaglibLogger> loggers =
- new ConcurrentHashMap<String, Log4jTaglibLogger>();
+ private final WeakHashMap<String, Log4jTaglibLogger> loggers =
+ new WeakHashMap<String, Log4jTaglibLogger>();
private final ServletContext servletContext;
@@ -61,15 +62,22 @@ final class Log4jTaglibLoggerContext imp
return logger;
}
- // wrap a logger from an underlying implementation
- Logger original = factory == null ? LogManager.getLogger(name) : LogManager.getLogger(name, factory);
- if (original instanceof AbstractLogger) {
- logger = new Log4jTaglibLogger((AbstractLogger) original, name, original.getMessageFactory());
- Log4jTaglibLogger existing = this.loggers.putIfAbsent(name, logger);
- return existing == null ? logger : existing;
+ synchronized (this.loggers) {
+ logger = this.loggers.get(name);
+ if (logger == null) {
+ Logger original = factory == null ? LogManager.getLogger(name) : LogManager.getLogger(name, factory);
+ if (!(original instanceof AbstractLogger)) {
+ throw new LoggingException(
+ "Log4j Tag Library requires base logging system to extend Log4j AbstractLogger."
+ );
+ }
+ // wrap a logger from an underlying implementation
+ logger = new Log4jTaglibLogger((AbstractLogger) original, name, original.getMessageFactory());
+ this.loggers.put(name, logger);
+ }
}
- throw new LoggingException("Log4j Tag Library requires base logging system to extend Log4j AbstractLogger.");
+ return logger;
}
public boolean hasLogger(String name) {
@@ -77,12 +85,19 @@ final class Log4jTaglibLoggerContext imp
}
static synchronized Log4jTaglibLoggerContext getInstance(ServletContext servletContext) {
- if (CONTEXTS.containsKey(servletContext)) {
- return CONTEXTS.get(servletContext);
+ Log4jTaglibLoggerContext loggerContext = CONTEXTS.get(servletContext);
+ if (loggerContext != null) {
+ return loggerContext;
}
- Log4jTaglibLoggerContext context = new Log4jTaglibLoggerContext(servletContext);
- Log4jTaglibLoggerContext existing = CONTEXTS.putIfAbsent(servletContext, context);
- return existing == null ? context : existing;
+ synchronized (CONTEXTS) {
+ loggerContext = CONTEXTS.get(servletContext);
+ if (loggerContext == null) {
+ loggerContext = new Log4jTaglibLoggerContext(servletContext);
+ CONTEXTS.put(servletContext, loggerContext);
+ }
+ }
+
+ return loggerContext;
}
}
Modified: logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/LogTag.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/LogTag.java?rev=1470034&r1=1470033&r2=1470034&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/LogTag.java (original)
+++ logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/LogTag.java Fri Apr 19 20:46:14 2013
@@ -24,6 +24,8 @@ import org.apache.logging.log4j.Level;
* @since 2.0
*/
public class LogTag extends LoggingMessageTagSupport {
+ private static final long serialVersionUID = 1L;
+
private Level level;
@Override
Modified: logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/LoggerAwareTagSupport.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/LoggerAwareTagSupport.java?rev=1470034&r1=1470033&r2=1470034&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/LoggerAwareTagSupport.java (original)
+++ logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/LoggerAwareTagSupport.java Fri Apr 19 20:46:14 2013
@@ -26,8 +26,11 @@ import javax.servlet.jsp.tagext.BodyTagS
* @since 2.0
*/
abstract class LoggerAwareTagSupport extends BodyTagSupport {
- private Log4jTaglibLoggerContext loggerContext;
- private Object logger;
+ private static final long serialVersionUID = 1L;
+
+ private transient Log4jTaglibLoggerContext loggerContext;
+
+ private transient Object logger;
protected LoggerAwareTagSupport() {
this.init();
@@ -44,7 +47,7 @@ abstract class LoggerAwareTagSupport ext
}
@Override
- public void setPageContext(PageContext pageContext) {
+ public final void setPageContext(PageContext pageContext) {
super.setPageContext(pageContext);
this.loggerContext = Log4jTaglibLoggerContext.getInstance(pageContext.getServletContext());
}
Modified: logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/LoggingMessageTagSupport.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/LoggingMessageTagSupport.java?rev=1470034&r1=1470033&r2=1470034&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/LoggingMessageTagSupport.java (original)
+++ logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/LoggingMessageTagSupport.java Fri Apr 19 20:46:14 2013
@@ -33,9 +33,11 @@ import java.util.List;
* @since 2.0
*/
abstract class LoggingMessageTagSupport extends ExceptionAwareTagSupport implements DynamicAttributes {
+ private static final long serialVersionUID = 1L;
+
private static final String FQCN = LoggingMessageTagSupport.class.getName();
- private Object message;
+ private transient Object message;
private Marker marker;
Modified: logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/SetLoggerTag.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/SetLoggerTag.java?rev=1470034&r1=1470033&r2=1470034&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/SetLoggerTag.java (original)
+++ logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/SetLoggerTag.java Fri Apr 19 20:46:14 2013
@@ -29,11 +29,13 @@ import javax.servlet.jsp.tagext.Tag;
* @since 2.0
*/
public class SetLoggerTag extends BodyTagSupport {
- private Log4jTaglibLoggerContext loggerContext;
+ private static final long serialVersionUID = 1L;
- private Object logger;
+ private transient Log4jTaglibLoggerContext loggerContext;
- private MessageFactory factory;
+ private transient Object logger;
+
+ private transient MessageFactory factory;
private String var;
Modified: logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/TraceTag.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/TraceTag.java?rev=1470034&r1=1470033&r2=1470034&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/TraceTag.java (original)
+++ logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/TraceTag.java Fri Apr 19 20:46:14 2013
@@ -24,6 +24,8 @@ import org.apache.logging.log4j.Level;
* @since 2.0
*/
public class TraceTag extends LoggingMessageTagSupport {
+ private static final long serialVersionUID = 1L;
+
@Override
protected Level getLevel() {
return Level.TRACE;
Modified: logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/WarnTag.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/WarnTag.java?rev=1470034&r1=1470033&r2=1470034&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/WarnTag.java (original)
+++ logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/WarnTag.java Fri Apr 19 20:46:14 2013
@@ -24,6 +24,8 @@ import org.apache.logging.log4j.Level;
* @since 2.0
*/
public class WarnTag extends LoggingMessageTagSupport {
+ private static final long serialVersionUID = 1L;
+
@Override
protected Level getLevel() {
return Level.WARN;
Modified: logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/package-info.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/package-info.java?rev=1470034&r1=1470033&r2=1470034&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/package-info.java (original)
+++ logging/log4j/log4j2/trunk/taglib/src/main/java/org/apache/logging/log4j/taglib/package-info.java Fri Apr 19 20:46:14 2013
@@ -19,4 +19,4 @@
+
+ @since 2.0
*/
-package org.apache.logging.log4j.taglib;
\ No newline at end of file
+package org.apache.logging.log4j.taglib;
Added: logging/log4j/log4j2/trunk/taglib/src/test/java/org/apache/logging/log4j/taglib/CatchingTagTest.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/taglib/src/test/java/org/apache/logging/log4j/taglib/CatchingTagTest.java?rev=1470034&view=auto
==============================================================================
--- logging/log4j/log4j2/trunk/taglib/src/test/java/org/apache/logging/log4j/taglib/CatchingTagTest.java (added)
+++ logging/log4j/log4j2/trunk/taglib/src/test/java/org/apache/logging/log4j/taglib/CatchingTagTest.java Fri Apr 19 20:46:14 2013
@@ -0,0 +1,115 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache license, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the license for the specific language governing permissions and
+ * limitations under the license.
+ */
+package org.apache.logging.log4j.taglib;
+
+import org.apache.logging.log4j.Level;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.core.Appender;
+import org.apache.logging.log4j.core.LoggerContext;
+import org.apache.logging.log4j.core.config.XMLConfigurationFactory;
+import org.apache.logging.log4j.status.StatusLogger;
+import org.apache.logging.log4j.test.appender.ListAppender;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.springframework.mock.web.MockPageContext;
+
+import javax.servlet.jsp.tagext.Tag;
+import java.util.List;
+import java.util.Map;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+/**
+ *
+ */
+public class CatchingTagTest {
+ private static final String CONFIG = "log4j-test1.xml";
+
+ @BeforeClass
+ public static void setUpClass() {
+ System.setProperty(XMLConfigurationFactory.CONFIGURATION_FILE_PROPERTY, CONFIG);
+ final LoggerContext context = (LoggerContext) LogManager.getContext(false);
+ context.getConfiguration();
+ }
+
+ @AfterClass
+ public static void cleanUpClass() {
+ System.clearProperty(XMLConfigurationFactory.CONFIGURATION_FILE_PROPERTY);
+ final LoggerContext context = (LoggerContext) LogManager.getContext(false);
+ context.reconfigure();
+ StatusLogger.getLogger().reset();
+ }
+
+ private Logger logger = LogManager.getLogger("LoggingMessageTagSupportTestLogger");
+ private CatchingTag tag;
+
+ @Before
+ public void setUp() {
+ this.tag = new CatchingTag();
+ this.tag.setPageContext(new MockPageContext());
+ this.tag.setLogger(this.logger);
+ }
+
+ @Test
+ public void testDoEndTag() throws Exception {
+ this.tag.setException(new Exception("This is a test."));
+
+ assertEquals("The return value is not correct.", Tag.EVAL_PAGE, this.tag.doEndTag());
+ verify("catching ERROR M-CATCHING[ EXCEPTION ] E java.lang.Exception: This is a test.");
+ }
+
+ @Test
+ public void testDoEndTagLevelString() throws Exception {
+ this.tag.setLevel("info");
+ this.tag.setException(new RuntimeException("This is another test."));
+
+ assertEquals("The return value is not correct.", Tag.EVAL_PAGE, this.tag.doEndTag());
+ verify("catching INFO M-CATCHING[ EXCEPTION ] E java.lang.RuntimeException: This is another test.");
+ }
+
+ @Test
+ public void testDoEndTagLevelObject() throws Exception {
+ this.tag.setLevel(Level.WARN);
+ this.tag.setException(new Error("This is the last test."));
+
+ assertEquals("The return value is not correct.", Tag.EVAL_PAGE, this.tag.doEndTag());
+ verify("catching WARN M-CATCHING[ EXCEPTION ] E java.lang.Error: This is the last test.");
+ }
+
+ private void verify(final String expected) {
+ final LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
+ final Map<String, Appender<?>> list = ctx.getConfiguration().getAppenders();
+ final Appender<?> listApp = list.get("List");
+ assertNotNull("Missing Appender", listApp);
+ assertTrue("Not a ListAppender", listApp instanceof ListAppender);
+ final List<String> events = ((ListAppender) listApp).getMessages();
+ try
+ {
+ assertEquals("Incorrect number of messages.", 1, events.size());
+ assertEquals("Incorrect message.", "o.a.l.l.t.CatchingTagTest " + expected, events.get(0));
+ }
+ finally
+ {
+ ((ListAppender) listApp).clear();
+ }
+ }
+}
Added: logging/log4j/log4j2/trunk/taglib/src/test/java/org/apache/logging/log4j/taglib/DebugTagTest.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/taglib/src/test/java/org/apache/logging/log4j/taglib/DebugTagTest.java?rev=1470034&view=auto
==============================================================================
--- logging/log4j/log4j2/trunk/taglib/src/test/java/org/apache/logging/log4j/taglib/DebugTagTest.java (added)
+++ logging/log4j/log4j2/trunk/taglib/src/test/java/org/apache/logging/log4j/taglib/DebugTagTest.java Fri Apr 19 20:46:14 2013
@@ -0,0 +1,32 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache license, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the license for the specific language governing permissions and
+ * limitations under the license.
+ */
+package org.apache.logging.log4j.taglib;
+
+import org.apache.logging.log4j.Level;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+
+/**
+ *
+ */
+public class DebugTagTest {
+ @Test
+ public void testGetLevel() {
+ assertEquals("The logging level is not correct.", Level.DEBUG, new DebugTag().getLevel());
+ }
+}
Added: logging/log4j/log4j2/trunk/taglib/src/test/java/org/apache/logging/log4j/taglib/DumpTagTest.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/taglib/src/test/java/org/apache/logging/log4j/taglib/DumpTagTest.java?rev=1470034&view=auto
==============================================================================
--- logging/log4j/log4j2/trunk/taglib/src/test/java/org/apache/logging/log4j/taglib/DumpTagTest.java (added)
+++ logging/log4j/log4j2/trunk/taglib/src/test/java/org/apache/logging/log4j/taglib/DumpTagTest.java Fri Apr 19 20:46:14 2013
@@ -0,0 +1,120 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache license, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the license for the specific language governing permissions and
+ * limitations under the license.
+ */
+package org.apache.logging.log4j.taglib;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.springframework.mock.web.MockJspWriter;
+import org.springframework.mock.web.MockPageContext;
+
+import javax.servlet.jsp.JspWriter;
+import javax.servlet.jsp.PageContext;
+import javax.servlet.jsp.tagext.Tag;
+import java.io.ByteArrayOutputStream;
+import java.io.OutputStreamWriter;
+import java.io.Writer;
+import java.nio.charset.Charset;
+
+import static org.junit.Assert.assertEquals;
+
+/**
+ *
+ */
+public class DumpTagTest {
+ private static final Charset UTF8 = Charset.forName("UTF-8");
+ private Writer writer;
+ private ByteArrayOutputStream output;
+ private MockPageContext context;
+ private DumpTag tag;
+
+ @Before
+ public void setUp() {
+ this.output = new ByteArrayOutputStream();
+ this.writer = new OutputStreamWriter(this.output, UTF8);
+
+ this.context = new MockPageContext() {
+ private MockJspWriter jspWriter = new MockJspWriter(writer);
+ @Override
+ public JspWriter getOut() {
+ return this.jspWriter;
+ }
+ };
+
+ this.tag = new DumpTag();
+ this.tag.setPageContext(this.context);
+ }
+
+ @Test
+ public void testDoEndTagDefaultPageScopeNoAttributes() throws Exception {
+ int returnValue = this.tag.doEndTag();
+ assertEquals("The return value is not correct.", Tag.EVAL_PAGE, returnValue);
+
+ this.writer.flush();
+ String output = new String(this.output.toByteArray(), UTF8);
+ assertEquals("The output is not correct.", "<dl></dl>", output);
+ }
+
+ @Test
+ public void testDoEndTagDefaultPageScope() throws Exception {
+ this.context.setAttribute("testAttribute01", "testValue01", PageContext.PAGE_SCOPE);
+ this.context.setAttribute("anotherAttribute02", "finalValue02", PageContext.PAGE_SCOPE);
+ this.context.setAttribute("badAttribute03", "skippedValue03", PageContext.SESSION_SCOPE);
+
+ int returnValue = this.tag.doEndTag();
+ assertEquals("The return value is not correct.", Tag.EVAL_PAGE, returnValue);
+
+ this.writer.flush();
+ String output = new String(this.output.toByteArray(), UTF8);
+ assertEquals("The output is not correct.",
+ "<dl>" +
+ "<dt><code>testAttribute01</code></dt><dd><code>testValue01</code></dd>" +
+ "<dt><code>anotherAttribute02</code></dt><dd><code>finalValue02</code></dd>" +
+ "</dl>", output);
+ }
+
+ @Test
+ public void testDoEndTagSessionScopeNoAttributes() throws Exception {
+ this.context.setAttribute("badAttribute01", "skippedValue01", PageContext.PAGE_SCOPE);
+
+ this.tag.setScope("session");
+ int returnValue = this.tag.doEndTag();
+ assertEquals("The return value is not correct.", Tag.EVAL_PAGE, returnValue);
+
+ this.writer.flush();
+ String output = new String(this.output.toByteArray(), UTF8);
+ assertEquals("The output is not correct.", "<dl></dl>", output);
+ }
+
+ @Test
+ public void testDoEndTagSessionScope() throws Exception {
+ this.context.setAttribute("otherAttribute03", "lostValue03", PageContext.PAGE_SCOPE);
+ this.context.setAttribute("coolAttribute01", "weirdValue01", PageContext.SESSION_SCOPE);
+ this.context.setAttribute("testAttribute02", "testValue02", PageContext.SESSION_SCOPE);
+
+ this.tag.setScope("session");
+ int returnValue = this.tag.doEndTag();
+ assertEquals("The return value is not correct.", Tag.EVAL_PAGE, returnValue);
+
+ this.writer.flush();
+ String output = new String(this.output.toByteArray(), UTF8);
+ assertEquals("The output is not correct.",
+ "<dl>" +
+ "<dt><code>coolAttribute01</code></dt><dd><code>weirdValue01</code></dd>" +
+ "<dt><code>testAttribute02</code></dt><dd><code>testValue02</code></dd>" +
+ "</dl>", output);
+ }
+}
Added: logging/log4j/log4j2/trunk/taglib/src/test/java/org/apache/logging/log4j/taglib/EntryTagTest.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/taglib/src/test/java/org/apache/logging/log4j/taglib/EntryTagTest.java?rev=1470034&view=auto
==============================================================================
--- logging/log4j/log4j2/trunk/taglib/src/test/java/org/apache/logging/log4j/taglib/EntryTagTest.java (added)
+++ logging/log4j/log4j2/trunk/taglib/src/test/java/org/apache/logging/log4j/taglib/EntryTagTest.java Fri Apr 19 20:46:14 2013
@@ -0,0 +1,103 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache license, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the license for the specific language governing permissions and
+ * limitations under the license.
+ */
+package org.apache.logging.log4j.taglib;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.core.Appender;
+import org.apache.logging.log4j.core.LoggerContext;
+import org.apache.logging.log4j.core.config.XMLConfigurationFactory;
+import org.apache.logging.log4j.status.StatusLogger;
+import org.apache.logging.log4j.test.appender.ListAppender;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.springframework.mock.web.MockPageContext;
+
+import javax.servlet.jsp.tagext.Tag;
+import java.util.List;
+import java.util.Map;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+/**
+ *
+ */
+public class EntryTagTest {
+ private static final String CONFIG = "log4j-test1.xml";
+
+ @BeforeClass
+ public static void setUpClass() {
+ System.setProperty(XMLConfigurationFactory.CONFIGURATION_FILE_PROPERTY, CONFIG);
+ final LoggerContext context = (LoggerContext) LogManager.getContext(false);
+ context.getConfiguration();
+ }
+
+ @AfterClass
+ public static void cleanUpClass() {
+ System.clearProperty(XMLConfigurationFactory.CONFIGURATION_FILE_PROPERTY);
+ final LoggerContext context = (LoggerContext) LogManager.getContext(false);
+ context.reconfigure();
+ StatusLogger.getLogger().reset();
+ }
+
+ private Logger logger = LogManager.getLogger("LoggingMessageTagSupportTestLogger");
+ private EntryTag tag;
+
+ @Before
+ public void setUp() {
+ this.tag = new EntryTag();
+ this.tag.setPageContext(new MockPageContext());
+ this.tag.setLogger(this.logger);
+ }
+
+ @Test
+ public void testDoEndTag() throws Exception {
+ assertEquals("The return value is not correct.", Tag.EVAL_PAGE, this.tag.doEndTag());
+ verify("entry TRACE M-ENTRY[ FLOW ] E");
+ }
+
+ @Test
+ public void testDoEndTagAttributes() throws Exception {
+ this.tag.setDynamicAttribute(null, null, CONFIG);
+ this.tag.setDynamicAttribute(null, null, 5792);
+
+ assertEquals("The return value is not correct.", Tag.EVAL_PAGE, this.tag.doEndTag());
+ verify("entry params(log4j-test1.xml, 5792) TRACE M-ENTRY[ FLOW ] E");
+ }
+
+ private void verify(final String expected) {
+ final LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
+ final Map<String, Appender<?>> list = ctx.getConfiguration().getAppenders();
+ final Appender<?> listApp = list.get("List");
+ assertNotNull("Missing Appender", listApp);
+ assertTrue("Not a ListAppender", listApp instanceof ListAppender);
+ final List<String> events = ((ListAppender) listApp).getMessages();
+ try
+ {
+ assertEquals("Incorrect number of messages.", 1, events.size());
+ assertEquals("Incorrect message.", "o.a.l.l.t.EntryTagTest " + expected, events.get(0));
+ }
+ finally
+ {
+ ((ListAppender) listApp).clear();
+ }
+ }
+}
Added: logging/log4j/log4j2/trunk/taglib/src/test/java/org/apache/logging/log4j/taglib/ErrorTagTest.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/taglib/src/test/java/org/apache/logging/log4j/taglib/ErrorTagTest.java?rev=1470034&view=auto
==============================================================================
--- logging/log4j/log4j2/trunk/taglib/src/test/java/org/apache/logging/log4j/taglib/ErrorTagTest.java (added)
+++ logging/log4j/log4j2/trunk/taglib/src/test/java/org/apache/logging/log4j/taglib/ErrorTagTest.java Fri Apr 19 20:46:14 2013
@@ -0,0 +1,32 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache license, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the license for the specific language governing permissions and
+ * limitations under the license.
+ */
+package org.apache.logging.log4j.taglib;
+
+import org.apache.logging.log4j.Level;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+
+/**
+ *
+ */
+public class ErrorTagTest {
+ @Test
+ public void testGetLevel() {
+ assertEquals("The logging level is not correct.", Level.ERROR, new ErrorTag().getLevel());
+ }
+}
Added: logging/log4j/log4j2/trunk/taglib/src/test/java/org/apache/logging/log4j/taglib/ExceptionAwareTagSupportTest.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/taglib/src/test/java/org/apache/logging/log4j/taglib/ExceptionAwareTagSupportTest.java?rev=1470034&view=auto
==============================================================================
--- logging/log4j/log4j2/trunk/taglib/src/test/java/org/apache/logging/log4j/taglib/ExceptionAwareTagSupportTest.java (added)
+++ logging/log4j/log4j2/trunk/taglib/src/test/java/org/apache/logging/log4j/taglib/ExceptionAwareTagSupportTest.java Fri Apr 19 20:46:14 2013
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache license, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the license for the specific language governing permissions and
+ * limitations under the license.
+ */
+package org.apache.logging.log4j.taglib;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertSame;
+
+/**
+ *
+ */
+public class ExceptionAwareTagSupportTest {
+ private ExceptionAwareTagSupport tag;
+
+ @Before
+ public void setUp() {
+ this.tag = new ExceptionAwareTagSupport() {
+ private static final long serialVersionUID = 1L;
+ };
+ }
+
+ @Test
+ public void testException() {
+ assertNull("The exception should be null (1).", this.tag.getException());
+
+ Exception e = new Exception();
+ this.tag.setException(e);
+ assertSame("The exception is not correct (1).", e, this.tag.getException());
+
+ this.tag.init();
+ assertNull("The exception should be null (2).", this.tag.getException());
+
+ e = new RuntimeException();
+ this.tag.setException(e);
+ assertSame("The exception is not correct (2).", e, this.tag.getException());
+ }
+}
Added: logging/log4j/log4j2/trunk/taglib/src/test/java/org/apache/logging/log4j/taglib/ExitTagTest.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/taglib/src/test/java/org/apache/logging/log4j/taglib/ExitTagTest.java?rev=1470034&view=auto
==============================================================================
--- logging/log4j/log4j2/trunk/taglib/src/test/java/org/apache/logging/log4j/taglib/ExitTagTest.java (added)
+++ logging/log4j/log4j2/trunk/taglib/src/test/java/org/apache/logging/log4j/taglib/ExitTagTest.java Fri Apr 19 20:46:14 2013
@@ -0,0 +1,110 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache license, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the license for the specific language governing permissions and
+ * limitations under the license.
+ */
+package org.apache.logging.log4j.taglib;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.core.Appender;
+import org.apache.logging.log4j.core.LoggerContext;
+import org.apache.logging.log4j.core.config.XMLConfigurationFactory;
+import org.apache.logging.log4j.status.StatusLogger;
+import org.apache.logging.log4j.test.appender.ListAppender;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.springframework.mock.web.MockPageContext;
+
+import javax.servlet.jsp.tagext.Tag;
+import java.util.List;
+import java.util.Map;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+/**
+ *
+ */
+public class ExitTagTest {
+ private static final String CONFIG = "log4j-test1.xml";
+
+ @BeforeClass
+ public static void setUpClass() {
+ System.setProperty(XMLConfigurationFactory.CONFIGURATION_FILE_PROPERTY, CONFIG);
+ final LoggerContext context = (LoggerContext) LogManager.getContext(false);
+ context.getConfiguration();
+ }
+
+ @AfterClass
+ public static void cleanUpClass() {
+ System.clearProperty(XMLConfigurationFactory.CONFIGURATION_FILE_PROPERTY);
+ final LoggerContext context = (LoggerContext) LogManager.getContext(false);
+ context.reconfigure();
+ StatusLogger.getLogger().reset();
+ }
+
+ private Logger logger = LogManager.getLogger("LoggingMessageTagSupportTestLogger");
+ private ExitTag tag;
+
+ @Before
+ public void setUp() {
+ this.tag = new ExitTag();
+ this.tag.setPageContext(new MockPageContext());
+ this.tag.setLogger(this.logger);
+ }
+
+ @Test
+ public void testDoEndTag() throws Exception {
+ assertEquals("The return value is not correct.", Tag.EVAL_PAGE, this.tag.doEndTag());
+ verify("exit TRACE M-EXIT[ FLOW ] E");
+ }
+
+ @Test
+ public void testDoEndTagResult01() throws Exception {
+ this.tag.setResult(CONFIG);
+
+ assertEquals("The return value is not correct.", Tag.EVAL_PAGE, this.tag.doEndTag());
+ verify("exit with(log4j-test1.xml) TRACE M-EXIT[ FLOW ] E");
+ }
+
+ @Test
+ public void testDoEndTagResult02() throws Exception {
+ this.tag.setResult(5792);
+
+ assertEquals("The return value is not correct.", Tag.EVAL_PAGE, this.tag.doEndTag());
+ verify("exit with(5792) TRACE M-EXIT[ FLOW ] E");
+ }
+
+ private void verify(final String expected) {
+ final LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
+ final Map<String, Appender<?>> list = ctx.getConfiguration().getAppenders();
+ final Appender<?> listApp = list.get("List");
+ assertNotNull("Missing Appender", listApp);
+ assertTrue("Not a ListAppender", listApp instanceof ListAppender);
+ final List<String> events = ((ListAppender) listApp).getMessages();
+ try
+ {
+ assertEquals("Incorrect number of messages.", 1, events.size());
+ assertEquals("Incorrect message.", "o.a.l.l.t.ExitTagTest " + expected, events.get(0));
+ }
+ finally
+ {
+ ((ListAppender) listApp).clear();
+ }
+ }
+}
Added: logging/log4j/log4j2/trunk/taglib/src/test/java/org/apache/logging/log4j/taglib/FatalTagTest.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/taglib/src/test/java/org/apache/logging/log4j/taglib/FatalTagTest.java?rev=1470034&view=auto
==============================================================================
--- logging/log4j/log4j2/trunk/taglib/src/test/java/org/apache/logging/log4j/taglib/FatalTagTest.java (added)
+++ logging/log4j/log4j2/trunk/taglib/src/test/java/org/apache/logging/log4j/taglib/FatalTagTest.java Fri Apr 19 20:46:14 2013
@@ -0,0 +1,32 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache license, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the license for the specific language governing permissions and
+ * limitations under the license.
+ */
+package org.apache.logging.log4j.taglib;
+
+import org.apache.logging.log4j.Level;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+
+/**
+ *
+ */
+public class FatalTagTest {
+ @Test
+ public void testGetLevel() {
+ assertEquals("The logging level is not correct.", Level.FATAL, new FatalTag().getLevel());
+ }
+}
Added: logging/log4j/log4j2/trunk/taglib/src/test/java/org/apache/logging/log4j/taglib/IfEnabledTagTest.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/taglib/src/test/java/org/apache/logging/log4j/taglib/IfEnabledTagTest.java?rev=1470034&view=auto
==============================================================================
--- logging/log4j/log4j2/trunk/taglib/src/test/java/org/apache/logging/log4j/taglib/IfEnabledTagTest.java (added)
+++ logging/log4j/log4j2/trunk/taglib/src/test/java/org/apache/logging/log4j/taglib/IfEnabledTagTest.java Fri Apr 19 20:46:14 2013
@@ -0,0 +1,126 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache license, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the license for the specific language governing permissions and
+ * limitations under the license.
+ */
+package org.apache.logging.log4j.taglib;
+
+import org.apache.logging.log4j.Level;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.MarkerManager;
+import org.apache.logging.log4j.core.LoggerContext;
+import org.apache.logging.log4j.core.config.XMLConfigurationFactory;
+import org.apache.logging.log4j.status.StatusLogger;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.springframework.mock.web.MockPageContext;
+
+import javax.servlet.jsp.tagext.Tag;
+
+import static org.junit.Assert.assertEquals;
+
+/**
+ *
+ */
+public class IfEnabledTagTest {
+ private static final String CONFIG = "log4j-test1.xml";
+
+ @BeforeClass
+ public static void setUpClass() {
+ System.setProperty(XMLConfigurationFactory.CONFIGURATION_FILE_PROPERTY, CONFIG);
+ final LoggerContext context = (LoggerContext) LogManager.getContext(false);
+ context.getConfiguration();
+ }
+
+ @AfterClass
+ public static void cleanUpClass() {
+ System.clearProperty(XMLConfigurationFactory.CONFIGURATION_FILE_PROPERTY);
+ final LoggerContext context = (LoggerContext) LogManager.getContext(false);
+ context.reconfigure();
+ StatusLogger.getLogger().reset();
+ }
+
+ private Logger logger = LogManager.getLogger("IfEnabledTagTest");
+ private IfEnabledTag tag;
+
+ @Before
+ public void setUp() {
+ this.tag = new IfEnabledTag();
+ this.tag.setPageContext(new MockPageContext());
+ this.tag.setLogger(this.logger);
+ }
+
+ @Test
+ public void testDoStartTagEnabledString() throws Exception {
+ this.tag.setLevel("warn");
+
+ assertEquals("The return value is not correct.", Tag.EVAL_BODY_INCLUDE, this.tag.doStartTag());
+ }
+
+ @Test
+ public void testDoStartTagEnabledLevel() throws Exception {
+ this.tag.setLevel(Level.WARN);
+
+ assertEquals("The return value is not correct.", Tag.EVAL_BODY_INCLUDE, this.tag.doStartTag());
+ }
+
+ @Test
+ public void testDoStartTagEnabledStringMarker() throws Exception {
+ this.tag.setMarker(MarkerManager.getMarker("E01"));
+ this.tag.setLevel("error");
+
+ assertEquals("The return value is not correct.", Tag.EVAL_BODY_INCLUDE, this.tag.doStartTag());
+ }
+
+ @Test
+ public void testDoStartTagEnabledLevelMarker() throws Exception {
+ this.tag.setMarker(MarkerManager.getMarker("F02"));
+ this.tag.setLevel(Level.ERROR);
+
+ assertEquals("The return value is not correct.", Tag.EVAL_BODY_INCLUDE, this.tag.doStartTag());
+ }
+
+ @Test
+ public void testDoStartTagDisabledString() throws Exception {
+ this.tag.setLevel("info");
+
+ assertEquals("The return value is not correct.", Tag.SKIP_BODY, this.tag.doStartTag());
+ }
+
+ @Test
+ public void testDoStartTagDisabledLevel() throws Exception {
+ this.tag.setLevel(Level.INFO);
+
+ assertEquals("The return value is not correct.", Tag.SKIP_BODY, this.tag.doStartTag());
+ }
+
+ @Test
+ public void testDoStartTagDisabledStringMarker() throws Exception {
+ this.tag.setMarker(MarkerManager.getMarker("E01"));
+ this.tag.setLevel("trace");
+
+ assertEquals("The return value is not correct.", Tag.SKIP_BODY, this.tag.doStartTag());
+ }
+
+ @Test
+ public void testDoStartTagDisabledLevelMarker() throws Exception {
+ this.tag.setMarker(MarkerManager.getMarker("F02"));
+ this.tag.setLevel(Level.TRACE);
+
+ assertEquals("The return value is not correct.", Tag.SKIP_BODY, this.tag.doStartTag());
+ }
+}
Added: logging/log4j/log4j2/trunk/taglib/src/test/java/org/apache/logging/log4j/taglib/InfoTagTest.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/taglib/src/test/java/org/apache/logging/log4j/taglib/InfoTagTest.java?rev=1470034&view=auto
==============================================================================
--- logging/log4j/log4j2/trunk/taglib/src/test/java/org/apache/logging/log4j/taglib/InfoTagTest.java (added)
+++ logging/log4j/log4j2/trunk/taglib/src/test/java/org/apache/logging/log4j/taglib/InfoTagTest.java Fri Apr 19 20:46:14 2013
@@ -0,0 +1,32 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache license, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the license for the specific language governing permissions and
+ * limitations under the license.
+ */
+package org.apache.logging.log4j.taglib;
+
+import org.apache.logging.log4j.Level;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+
+/**
+ *
+ */
+public class InfoTagTest {
+ @Test
+ public void testGetLevel() {
+ assertEquals("The logging level is not correct.", Level.INFO, new InfoTag().getLevel());
+ }
+}
Added: logging/log4j/log4j2/trunk/taglib/src/test/java/org/apache/logging/log4j/taglib/LogTagTest.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/taglib/src/test/java/org/apache/logging/log4j/taglib/LogTagTest.java?rev=1470034&view=auto
==============================================================================
--- logging/log4j/log4j2/trunk/taglib/src/test/java/org/apache/logging/log4j/taglib/LogTagTest.java (added)
+++ logging/log4j/log4j2/trunk/taglib/src/test/java/org/apache/logging/log4j/taglib/LogTagTest.java Fri Apr 19 20:46:14 2013
@@ -0,0 +1,51 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache license, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the license for the specific language governing permissions and
+ * limitations under the license.
+ */
+package org.apache.logging.log4j.taglib;
+
+import org.apache.logging.log4j.Level;
+import org.junit.Before;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+
+
+/**
+ *
+ */
+public class LogTagTest {
+ private LogTag tag;
+
+ @Before
+ public void setUp() {
+ this.tag = new LogTag();
+ }
+
+ @Test
+ public void testLevel() {
+ assertNull("The level should be null (1).", this.tag.getLevel());
+
+ this.tag.setLevel(Level.INFO);
+ assertEquals("The level is not correct (1).", Level.INFO, this.tag.getLevel());
+
+ this.tag.init();
+ assertNull("The level should be null (2).", this.tag.getLevel());
+
+ this.tag.setLevel("WARN");
+ assertEquals("The level is not correct (2).", Level.WARN, this.tag.getLevel());
+ }
+}
Added: logging/log4j/log4j2/trunk/taglib/src/test/java/org/apache/logging/log4j/taglib/LoggerAwareTagSupportTest.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/taglib/src/test/java/org/apache/logging/log4j/taglib/LoggerAwareTagSupportTest.java?rev=1470034&view=auto
==============================================================================
--- logging/log4j/log4j2/trunk/taglib/src/test/java/org/apache/logging/log4j/taglib/LoggerAwareTagSupportTest.java (added)
+++ logging/log4j/log4j2/trunk/taglib/src/test/java/org/apache/logging/log4j/taglib/LoggerAwareTagSupportTest.java Fri Apr 19 20:46:14 2013
@@ -0,0 +1,150 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache license, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the license for the specific language governing permissions and
+ * limitations under the license.
+ */
+package org.apache.logging.log4j.taglib;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.spi.AbstractLogger;
+import org.junit.Test;
+import org.springframework.mock.web.MockPageContext;
+
+import static org.junit.Assert.*;
+
+/**
+ *
+ */
+public class LoggerAwareTagSupportTest {
+ private MockPageContext context;
+ private LoggerAwareTagSupport tag;
+
+ private void setUp(final Object page) {
+ this.context = new MockPageContext() {
+ @Override
+ public Object getPage() {
+ return page == null ? this : page;
+ }
+ };
+ this.tag = new LoggerAwareTagSupport() {
+ private static final long serialVersionUID = 1L;
+ };
+ this.tag.setPageContext(this.context);
+ }
+
+ @Test
+ public void testGetLoggerWithGenericLogger() throws Exception {
+ this.setUp(null);
+
+ Logger logger = LogManager.getLogger("testGetLoggerWithGenericLogger");
+
+ this.tag.setLogger(logger);
+ Log4jTaglibLogger returned = this.tag.getLogger();
+
+ assertNotNull("The first returned logger should not be null.", returned);
+ assertNotSame("The first returned logger should not be the same as the set.", logger, returned);
+ assertEquals("The name is not correct.", "testGetLoggerWithGenericLogger", returned.getName());
+
+ Log4jTaglibLogger returned2 = this.tag.getLogger();
+
+ assertNotNull("The second returned logger should not be null.", returned2);
+ assertSame("The second returned logger should be the same as the first.", returned, returned2);
+
+ this.tag.release();
+
+ Log4jTaglibLogger returned3 = this.tag.getLogger();
+
+ assertNotNull("The third returned logger should not be null.", returned3);
+ assertNotSame("The third returned logger should not be the same as the first.", returned, returned3);
+ }
+
+ @Test
+ public void testGetLoggerWithTaglibLogger() throws Exception {
+ this.setUp(null);
+
+ AbstractLogger wrapped = (AbstractLogger)LogManager.getLogger("testGetLoggerWithTaglibLogger");
+ Log4jTaglibLogger logger = new Log4jTaglibLogger(wrapped, wrapped.getName(), wrapped.getMessageFactory());
+
+ this.tag.setLogger(logger);
+ Log4jTaglibLogger returned = this.tag.getLogger();
+
+ assertNotNull("The first returned logger should not be null.", returned);
+ assertSame("The first returned logger should be the same as the set.", logger, returned);
+ assertEquals("The name is not correct.", "testGetLoggerWithTaglibLogger", returned.getName());
+
+ returned = this.tag.getLogger();
+
+ assertNotNull("The second returned logger should not be null.", returned);
+ assertSame("The second returned logger should be the same as the set.", logger, returned);
+ }
+
+ @Test
+ public void testGetLoggerWithStringLogger() throws Exception {
+ this.setUp(null);
+
+ this.tag.setLogger("testGetLoggerWithStringLogger");
+ Log4jTaglibLogger returned = this.tag.getLogger();
+
+ assertNotNull("The first returned logger should not be null.", returned);
+ assertEquals("The name is not correct.", "testGetLoggerWithStringLogger", returned.getName());
+
+ Log4jTaglibLogger returned2 = this.tag.getLogger();
+
+ assertNotNull("The second returned logger should not be null.", returned2);
+ assertSame("The second returned logger should be the same as the first.", returned, returned2);
+ }
+
+ @Test
+ public void testGetDefaultLogger01() throws Exception {
+ Object page = new Object() {};
+ this.setUp(page);
+
+ assertNull("The default logger should be null.", TagUtils.getDefaultLogger(this.context));
+
+ Log4jTaglibLogger returned = this.tag.getLogger();
+ assertNotNull("The first returned logger should not be null.", returned);
+ assertEquals("The logger name is not correct.", page.getClass().getName(), returned.getName());
+
+ Log4jTaglibLogger defaultLogger = TagUtils.getDefaultLogger(this.context);
+ assertNotNull("The default logger should not be null anymore.", defaultLogger);
+ assertSame("The default logger should be the same as the returned logger.", returned, defaultLogger);
+
+ Log4jTaglibLogger returned2 = this.tag.getLogger();
+
+ assertNotNull("The second returned logger should not be null.", returned2);
+ assertSame("The second returned logger should be the same as the first.", returned, returned2);
+ }
+
+ @Test
+ public void testGetDefaultLogger02() throws Exception {
+ Object page = new Object() {};
+ this.setUp(page);
+
+ assertNull("The default logger should be null.", TagUtils.getDefaultLogger(this.context));
+
+ Log4jTaglibLogger returned = this.tag.getLogger();
+ assertNotNull("The first returned logger should not be null.", returned);
+ assertEquals("The logger name is not correct.", page.getClass().getName(), returned.getName());
+
+ Log4jTaglibLogger defaultLogger = TagUtils.getDefaultLogger(this.context);
+ assertNotNull("The default logger should not be null anymore.", defaultLogger);
+ assertSame("The default logger should be the same as the returned logger.", returned, defaultLogger);
+
+ Log4jTaglibLogger returned2 = this.tag.getLogger();
+
+ assertNotNull("The second returned logger should not be null.", returned2);
+ assertSame("The second returned logger should be the same as the first.", returned, returned2);
+ }
+}
Added: logging/log4j/log4j2/trunk/taglib/src/test/java/org/apache/logging/log4j/taglib/LoggingMessageTagSupportTest.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/taglib/src/test/java/org/apache/logging/log4j/taglib/LoggingMessageTagSupportTest.java?rev=1470034&view=auto
==============================================================================
--- logging/log4j/log4j2/trunk/taglib/src/test/java/org/apache/logging/log4j/taglib/LoggingMessageTagSupportTest.java (added)
+++ logging/log4j/log4j2/trunk/taglib/src/test/java/org/apache/logging/log4j/taglib/LoggingMessageTagSupportTest.java Fri Apr 19 20:46:14 2013
@@ -0,0 +1,326 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache license, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the license for the specific language governing permissions and
+ * limitations under the license.
+ */
+package org.apache.logging.log4j.taglib;
+
+import org.apache.logging.log4j.Level;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.MarkerManager;
+import org.apache.logging.log4j.core.Appender;
+import org.apache.logging.log4j.core.LoggerContext;
+import org.apache.logging.log4j.core.config.XMLConfigurationFactory;
+import org.apache.logging.log4j.status.StatusLogger;
+import org.apache.logging.log4j.test.appender.ListAppender;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.springframework.mock.web.MockBodyContent;
+import org.springframework.mock.web.MockPageContext;
+
+import javax.servlet.jsp.tagext.BodyTag;
+import java.io.Writer;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+
+import static org.junit.Assert.*;
+
+/**
+ *
+ */
+public class LoggingMessageTagSupportTest {
+ private static final String CONFIG = "log4j-test1.xml";
+
+ @BeforeClass
+ public static void setUpClass() {
+ System.setProperty(XMLConfigurationFactory.CONFIGURATION_FILE_PROPERTY, CONFIG);
+ final LoggerContext context = (LoggerContext) LogManager.getContext(false);
+ context.getConfiguration();
+ }
+
+ @AfterClass
+ public static void cleanUpClass() {
+ System.clearProperty(XMLConfigurationFactory.CONFIGURATION_FILE_PROPERTY);
+ final LoggerContext context = (LoggerContext) LogManager.getContext(false);
+ context.reconfigure();
+ StatusLogger.getLogger().reset();
+ }
+
+ private Logger logger = LogManager.getLogger("LoggingMessageTagSupportTestLogger");
+ private LoggingMessageTagSupport tag;
+
+ private void setUp(final Level level) {
+ this.tag = new LoggingMessageTagSupport() {
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ protected Level getLevel() {
+ return level;
+ }
+ };
+ this.tag.setPageContext(new MockPageContext());
+ this.tag.setLogger(this.logger);
+ }
+
+ @Test
+ public void testDoStartTag() {
+ this.setUp(null);
+
+ assertEquals("The return value is not correct.", BodyTag.EVAL_BODY_BUFFERED, this.tag.doStartTag());
+ }
+
+ @Test
+ public void testMessageString() throws Exception {
+ this.setUp(null);
+
+ this.tag.setMessage("This is my message 01.");
+
+ assertEquals("The message is not correct.", "This is my message 01.", this.tag.getMessage());
+ }
+
+ @Test
+ public void testMessageObject() throws Exception {
+ this.setUp(null);
+
+ Object message = new Object();
+ this.tag.setMessage(message);
+
+ assertSame("The message is not correct.", message, this.tag.getMessage());
+ }
+
+ @Test
+ public void testMessageBody() throws Exception {
+ this.setUp(null);
+
+ MockBodyContent content = new MockBodyContent("This is the body content 01.", (Writer)null);
+ this.tag.setBodyContent(content);
+
+ assertEquals("The message is not correct.", "This is the body content 01.", this.tag.getMessage());
+ }
+
+ @Test
+ public void testMessageStringBodyIgnored() throws Exception {
+ this.setUp(null);
+
+ MockBodyContent content = new MockBodyContent("This is more body content 02.", (Writer)null);
+ this.tag.setBodyContent(content);
+ this.tag.setMessage("This is another message 02.");
+
+ assertEquals("The message is not correct.", "This is another message 02.", this.tag.getMessage());
+ }
+
+ @Test
+ public void testDoEndTagStringMessageNoMarkerNoException() throws Exception {
+ this.setUp(Level.WARN);
+
+ this.tag.setMessage("Hello message for testDoEndTagStringMessageNoMarkerNoException");
+
+ assertEquals("The return value is not correct.", BodyTag.EVAL_PAGE, this.tag.doEndTag());
+ verify("Hello message for testDoEndTagStringMessageNoMarkerNoException WARN M- E");
+ }
+
+ @Test
+ public void testDoEndTagStringMessageMarkerNoException() throws Exception {
+ this.setUp(Level.INFO);
+
+ this.tag.setMarker(MarkerManager.getMarker("E01"));
+ this.tag.setMessage("Goodbye message for testDoEndTagStringMessageMarkerNoException");
+
+ assertEquals("The return value is not correct.", BodyTag.EVAL_PAGE, this.tag.doEndTag());
+ verify("Goodbye message for testDoEndTagStringMessageMarkerNoException INFO M-E01 E");
+ }
+
+ @Test
+ public void testDoEndTagStringMessageNoMarkerException() throws Exception {
+ this.setUp(Level.ERROR);
+
+ this.tag.setException(new Exception("This is a test"));
+ this.tag.setMessage("Another message for testDoEndTagStringMessageNoMarkerException");
+
+ assertEquals("The return value is not correct.", BodyTag.EVAL_PAGE, this.tag.doEndTag());
+ verify("Another message for testDoEndTagStringMessageNoMarkerException ERROR M- E java.lang.Exception: This is a test");
+ }
+
+ @Test
+ public void testDoEndTagStringMessageMarkerException() throws Exception {
+ this.setUp(Level.TRACE);
+
+ this.tag.setException(new RuntimeException("This is another test"));
+ this.tag.setMarker(MarkerManager.getMarker("F02"));
+ this.tag.setMessage("Final message for testDoEndTagStringMessageMarkerException");
+
+ assertEquals("The return value is not correct.", BodyTag.EVAL_PAGE, this.tag.doEndTag());
+ verify("Final message for testDoEndTagStringMessageMarkerException TRACE M-F02 E java.lang.RuntimeException: This is another test");
+ }
+
+ @Test
+ public void testDoEndTagStringWithParameters() throws Exception {
+ this.setUp(Level.FATAL);
+
+ this.tag.setDynamicAttribute(null, null, "A");
+ this.tag.setDynamicAttribute(null, null, TimeUnit.HOURS);
+ this.tag.setMessage("Test message with [{}] parameter of [{}]");
+
+ assertEquals("The return value is not correct.", BodyTag.EVAL_PAGE, this.tag.doEndTag());
+ verify("Test message with [A] parameter of [HOURS] FATAL M- E");
+
+ }
+
+ @Test
+ public void testDoEndTagStringWithParametersMarkerAndException() throws Exception {
+ this.setUp(Level.DEBUG);
+
+ this.tag.setException(new Error("This is the last test"));
+ this.tag.setMarker(MarkerManager.getMarker("N03"));
+ this.tag.setDynamicAttribute(null, null, "Z");
+ this.tag.setDynamicAttribute(null, null, TimeUnit.SECONDS);
+ this.tag.setMessage("Final message with [{}] parameter of [{}]");
+
+ assertEquals("The return value is not correct.", BodyTag.EVAL_PAGE, this.tag.doEndTag());
+ verify("Final message with [Z] parameter of [SECONDS] DEBUG M-N03 E java.lang.Error: This is the last test");
+
+ }
+
+ @Test
+ public void testDoEndTagMessageNoMarkerNoException() throws Exception {
+ this.setUp(Level.INFO);
+
+ this.tag.setMessage(
+ logger.getMessageFactory().newMessage("First message for testDoEndTagMessageNoMarkerNoException")
+ );
+
+ assertEquals("The return value is not correct.", BodyTag.EVAL_PAGE, this.tag.doEndTag());
+ verify("First message for testDoEndTagMessageNoMarkerNoException INFO M- E");
+ }
+
+ @Test
+ public void testDoEndTagMessageMarkerNoException() throws Exception {
+ this.setUp(Level.WARN);
+
+ this.tag.setMarker(MarkerManager.getMarker("E01"));
+ this.tag.setMessage(
+ logger.getMessageFactory().newMessage("Another message for testDoEndTagMessageMarkerNoException")
+ );
+
+ assertEquals("The return value is not correct.", BodyTag.EVAL_PAGE, this.tag.doEndTag());
+ verify("Another message for testDoEndTagMessageMarkerNoException WARN M-E01 E");
+ }
+
+ @Test
+ public void testDoEndTagMessageNoMarkerException() throws Exception {
+ this.setUp(Level.TRACE);
+
+ this.tag.setException(new Exception("This is a test"));
+ this.tag.setMessage(
+ logger.getMessageFactory().newMessage("Third message for testDoEndTagMessageNoMarkerException")
+ );
+
+ assertEquals("The return value is not correct.", BodyTag.EVAL_PAGE, this.tag.doEndTag());
+ verify("Third message for testDoEndTagMessageNoMarkerException TRACE M- E java.lang.Exception: This is a test");
+ }
+
+ @Test
+ public void testDoEndTagMessageMarkerException() throws Exception {
+ this.setUp(Level.ERROR);
+
+ this.tag.setException(new RuntimeException("This is another test"));
+ this.tag.setMarker(MarkerManager.getMarker("F02"));
+ this.tag.setMessage(
+ logger.getMessageFactory().newMessage("Final message for testDoEndTagMessageMarkerException")
+ );
+
+ assertEquals("The return value is not correct.", BodyTag.EVAL_PAGE, this.tag.doEndTag());
+ verify("Final message for testDoEndTagMessageMarkerException ERROR M-F02 E java.lang.RuntimeException: " +
+ "This is another test");
+ }
+
+ @Test
+ public void testDoEndTagObjectNoMarkerNoException() throws Exception {
+ this.setUp(Level.INFO);
+
+ this.tag.setMessage(new MyMessage("First message for testDoEndTagObjectNoMarkerNoException"));
+
+ assertEquals("The return value is not correct.", BodyTag.EVAL_PAGE, this.tag.doEndTag());
+ verify("First message for testDoEndTagObjectNoMarkerNoException INFO M- E");
+ }
+
+ @Test
+ public void testDoEndTagObjectMarkerNoException() throws Exception {
+ this.setUp(Level.WARN);
+
+ this.tag.setMarker(MarkerManager.getMarker("E01"));
+ this.tag.setMessage(new MyMessage("Another message for testDoEndTagObjectMarkerNoException"));
+
+ assertEquals("The return value is not correct.", BodyTag.EVAL_PAGE, this.tag.doEndTag());
+ verify("Another message for testDoEndTagObjectMarkerNoException WARN M-E01 E");
+ }
+
+ @Test
+ public void testDoEndTagObjectNoMarkerException() throws Exception {
+ this.setUp(Level.TRACE);
+
+ this.tag.setException(new Exception("This is a test"));
+ this.tag.setMessage(new MyMessage("Third message for testDoEndTagObjectNoMarkerException"));
+
+ assertEquals("The return value is not correct.", BodyTag.EVAL_PAGE, this.tag.doEndTag());
+ verify("Third message for testDoEndTagObjectNoMarkerException TRACE M- E java.lang.Exception: This is a test");
+ }
+
+ @Test
+ public void testDoEndTagObjectMarkerException() throws Exception {
+ this.setUp(Level.ERROR);
+
+ this.tag.setException(new RuntimeException("This is another test"));
+ this.tag.setMarker(MarkerManager.getMarker("F02"));
+ this.tag.setMessage(new MyMessage("Final message for testDoEndTagObjectMarkerException"));
+
+ assertEquals("The return value is not correct.", BodyTag.EVAL_PAGE, this.tag.doEndTag());
+ verify("Final message for testDoEndTagObjectMarkerException ERROR M-F02 E java.lang.RuntimeException: " +
+ "This is another test");
+ }
+
+ private void verify(final String expected) {
+ final LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
+ final Map<String, Appender<?>> list = ctx.getConfiguration().getAppenders();
+ final Appender<?> listApp = list.get("List");
+ assertNotNull("Missing Appender", listApp);
+ assertTrue("Not a ListAppender", listApp instanceof ListAppender);
+ final List<String> events = ((ListAppender) listApp).getMessages();
+ try
+ {
+ assertEquals("Incorrect number of messages.", 1, events.size());
+ assertEquals("Incorrect message.", "o.a.l.l.t.LoggingMessageTagSupportTest " + expected, events.get(0));
+ }
+ finally
+ {
+ ((ListAppender) listApp).clear();
+ }
+ }
+
+ private static class MyMessage {
+ private final String internal;
+
+ public MyMessage(String internal) {
+ this.internal = internal;
+ }
+
+ @Override
+ public String toString() {
+ return this.internal;
+ }
+ }
+}