From abb3f6eb18e209e9477e0b569b3346c795da4ac8 Mon Sep 17 00:00:00 2001
From: Shinsuke Sugaya <shinsuke@yahoo.co.jp>
Date: Thu, 19 Jan 2017 21:39:52 +0900
Subject: [PATCH] fix #838 replace with log4j2

---
 pom.xml                        | 55 +++++++++++++---------
 src/main/resources/log4j2.xml  | 81 ++++++++++++++++++++++++++++++++
 src/main/resources/logback.xml | 85 ----------------------------------
 3 files changed, 115 insertions(+), 106 deletions(-)
 create mode 100644 src/main/resources/log4j2.xml
 delete mode 100644 src/main/resources/logback.xml

diff --git a/pom.xml b/pom.xml
index bbcda53ab..d18461a55 100644
--- a/pom.xml
+++ b/pom.xml
@@ -47,9 +47,8 @@
 
 		<!-- Partner Library -->
 		<slf4j.version>1.7.21</slf4j.version>
-		<logback.version>1.1.7</logback.version>
-
-		<!-- GoodNeighbor Library -->
+		<log4j.version>2.7</log4j.version>
+		<jackson.version>2.8.6</jackson.version>
 		<commons.fileupload.version>1.3.2</commons.fileupload.version>
 
 		<!-- Testing -->
@@ -1027,24 +1026,34 @@
 			<version>${slf4j.version}</version>
 		</dependency>
 		<dependency>
-			<groupId>ch.qos.logback</groupId>
-			<artifactId>logback-classic</artifactId>
-			<version>${logback.version}</version>
+			<groupId>org.apache.logging.log4j</groupId>
+			<artifactId>log4j-api</artifactId>
+			<version>${log4j.version}</version>
 		</dependency>
 		<dependency>
-			<groupId>org.codehaus.janino</groupId>
-			<artifactId>janino</artifactId>
-			<version>3.0.1</version>
+			<groupId>org.apache.logging.log4j</groupId>
+			<artifactId>log4j-core</artifactId>
+			<version>${log4j.version}</version>
 		</dependency>
 		<dependency>
-			<groupId>org.slf4j</groupId>
-			<artifactId>jcl-over-slf4j</artifactId>
-			<version>${slf4j.version}</version>
+			<groupId>org.apache.logging.log4j</groupId>
+			<artifactId>log4j-jcl</artifactId>
+			<version>${log4j.version}</version>
 		</dependency>
 		<dependency>
-			<groupId>org.slf4j</groupId>
-			<artifactId>log4j-over-slf4j</artifactId>
-			<version>${slf4j.version}</version>
+			<groupId>org.apache.logging.log4j</groupId>
+			<artifactId>log4j-1.2-api</artifactId>
+			<version>${log4j.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.logging.log4j</groupId>
+			<artifactId>log4j-slf4j-impl</artifactId>
+			<version>${log4j.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.logging.log4j</groupId>
+			<artifactId>log4j-jul</artifactId>
+			<version>${log4j.version}</version>
 		</dependency>
 
 		<!-- servlet -->
@@ -1113,7 +1122,7 @@
 		<dependency>
 			<groupId>com.google.guava</groupId>
 			<artifactId>guava</artifactId>
-			<version>19.0</version>
+			<version>21.0</version>
 		</dependency>
 		<dependency>
 			<groupId>com.google.oauth-client</groupId>
@@ -1149,12 +1158,12 @@
 		<dependency>
 			<groupId>org.apache.commons</groupId>
 			<artifactId>commons-lang3</artifactId>
-			<version>3.4</version>
+			<version>3.5</version>
 		</dependency>
 		<dependency>
 			<groupId>com.ibm.icu</groupId>
 			<artifactId>icu4j</artifactId>
-			<version>57.1</version>
+			<version>58.2</version>
 		</dependency>
 
 		<!-- suggest library -->
@@ -1166,7 +1175,6 @@
 
 		<!-- fileupload -->
 		<dependency>
-			<!-- TODO remove? -->
 			<groupId>commons-fileupload</groupId>
 			<artifactId>commons-fileupload</artifactId>
 			<version>${commons.fileupload.version}</version>
@@ -1217,10 +1225,15 @@
 		</dependency>
 
 		<!-- json -->
+		<dependency>
+			<groupId>com.fasterxml.jackson.core</groupId>
+			<artifactId>jackson-core</artifactId>
+			<version>${jackson.version}</version>
+		</dependency>
 		<dependency>
 			<groupId>com.fasterxml.jackson.core</groupId>
 			<artifactId>jackson-databind</artifactId>
-			<version>2.8.2</version>
+			<version>${jackson.version}</version>
 		</dependency>
 
 		<!-- template -->
@@ -1234,7 +1247,7 @@
 		<dependency>
 			<groupId>org.codehaus.groovy</groupId>
 			<artifactId>groovy-all</artifactId>
-			<version>2.4.7</version>
+			<version>2.4.8</version>
 		</dependency>
 
 		<!-- phantomjsdriver -->
diff --git a/src/main/resources/log4j2.xml b/src/main/resources/log4j2.xml
new file mode 100644
index 000000000..7e1ca2ed8
--- /dev/null
+++ b/src/main/resources/log4j2.xml
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Configuration status="WARN">
+
+	<Properties>
+		<Property name="domain.name" value="${sys:fess.log.name:-fess}" />
+		<Property name="log.level" value="${sys:fess.log.level:-debug}" />
+		<Property name="root.log.level" value="${sys:fess.log.level:-info}" />
+		<Property name="log.pattern" value="%d [%t] %-5p %msg%n" />
+		<Property name="log.file.basedir" value="${sys:fess.log.path:-target/logs}" />
+		<Property name="backup.date.suffix" value="_%d{yyyyMMdd}" />
+		<Property name="backup.max.history" value="90" />
+		<Property name="audit.log.pattern" value="%msg%n" />
+	</Properties>
+
+	<Appenders>
+		<Routing name="Console">
+			<Script name="RoutingInit" language="JavaScript"><![CDATA[
+				java.lang.System.getProperty("lasta.env") == null ? "Output" : "NoOutput";]]>
+			</Script>
+			<Routes>
+				<Route key="Output">
+					<Console name="OutputConsole" target="SYSTEM_OUT">
+						<PatternLayout pattern="${log.pattern}" />
+					</Console>
+				</Route>
+				<Route key="NoOutput">
+					<CountingNoOp name="DevNull" />
+				</Route>
+			</Routes>
+		</Routing>
+		<RollingFile name="AppFile" fileName="${log.file.basedir}/${domain.name}.log"
+			filePattern="${log.file.basedir}/backup/${domain.name}${backup.date.suffix}-%i.log.gz">
+			<PatternLayout>
+				<Pattern>${log.pattern}</Pattern>
+			</PatternLayout>
+			<Policies>
+				<OnStartupTriggeringPolicy />
+				<TimeBasedTriggeringPolicy />
+				<SizeBasedTriggeringPolicy size="100 MB" />
+			</Policies>
+			<DefaultRolloverStrategy fileIndex="max" min="1"
+				max="${backup.max.history}" compressionLevel="9" />
+		</RollingFile>
+		<RollingFile name="AuditFile" fileName="${log.file.basedir}/audit.log"
+			filePattern="${log.file.basedir}/backup/audit${backup.date.suffix}-%i.log.gz">
+			<PatternLayout>
+				<Pattern>${audit.log.pattern}</Pattern>
+			</PatternLayout>
+			<Policies>
+				<OnStartupTriggeringPolicy />
+				<TimeBasedTriggeringPolicy />
+				<SizeBasedTriggeringPolicy size="100 MB" />
+			</Policies>
+			<DefaultRolloverStrategy fileIndex="max" min="1"
+				max="${backup.max.history}" compressionLevel="9" />
+		</RollingFile>
+	</Appenders>
+
+	<Loggers>
+		<Logger name="org.codelibs.fess" additivity="false" level="${log.level}">
+			<AppenderRef ref="Console" />
+			<AppenderRef ref="AppFile" />
+		</Logger>
+		<Logger name="org.dbflute" additivity="false" level="${log.level}">
+			<AppenderRef ref="Console" />
+			<AppenderRef ref="AppFile" />
+		</Logger>
+		<Logger name="org.lastaflute" additivity="false" level="${log.level}">
+			<AppenderRef ref="Console" />
+			<AppenderRef ref="AppFile" />
+		</Logger>
+		<Logger name="fess.log.audit" additivity="false" level="info">
+			<AppenderRef ref="Console" />
+			<AppenderRef ref="AuditFile" />
+		</Logger>
+		<Root level="${root.log.level}">
+			<AppenderRef ref="Console" />
+			<AppenderRef ref="AppFile" />
+		</Root>
+	</Loggers>
+</Configuration>
diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml
deleted file mode 100644
index 583530deb..000000000
--- a/src/main/resources/logback.xml
+++ /dev/null
@@ -1,85 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<configuration>
-	<property name="domain.name" value="${fess.log.name:-fess}" />
-	<property name="log.level" value="${fess.log.level:-debug}" />
-	<property name="root.log.level" value="${fess.log.level:-info}" />
-	<property name="log.pattern" value="%d [%t] %-5p %msg%n" />
-	<!-- <property name="log.pattern" value="%d [%t] %-5p \\(%C{0}@%M\\(\\):%L\\) - %msg%n" /> -->
-	<property name="log.file.basedir" value="${fess.log.path:-target/logs}" />
-	<property name="backup.date.suffix" value="_%d{yyyyMMdd}" />
-	<property name="backup.max.history" value="90" />
-	<property name="audit.log.pattern" value="%msg%n" />
-
-	<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
-		<encoder>
-			<pattern>${log.pattern}</pattern>
-		</encoder>
-	</appender>
-	<appender name="appfile"
-		class="ch.qos.logback.core.rolling.RollingFileAppender">
-		<File>${log.file.basedir}/${domain.name}.log</File>
-		<Append>true</Append>
-		<encoder>
-			<pattern>${log.pattern}</pattern>
-		</encoder>
-		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-			<fileNamePattern>${log.file.basedir}/backup/${domain.name}${backup.date.suffix}.log
-			</fileNamePattern>
-			<maxHistory>${backup.max.history}</maxHistory>
-		</rollingPolicy>
-	</appender>
-	<appender name="auditfile"
-		class="ch.qos.logback.core.rolling.RollingFileAppender">
-		<File>${log.file.basedir}/audit.log</File>
-		<Append>true</Append>
-		<encoder>
-			<pattern>${audit.log.pattern}</pattern>
-		</encoder>
-		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-			<fileNamePattern>${log.file.basedir}/backup/audit${backup.date.suffix}.log
-			</fileNamePattern>
-			<maxHistory>${backup.max.history}</maxHistory>
-		</rollingPolicy>
-	</appender>
-
-	<logger name="org.codelibs.fess" additivity="false" level="${log.level}">
-		<if condition='isNull("lasta.env")'>
-			<then>
-				<appender-ref ref="console" />
-			</then>
-		</if>
-		<appender-ref ref="appfile" />
-	</logger>
-	<logger name="org.dbflute" additivity="false" level="${log.level}">
-		<if condition='isNull("lasta.env")'>
-			<then>
-				<appender-ref ref="console" />
-			</then>
-		</if>
-		<appender-ref ref="appfile" />
-	</logger>
-	<logger name="org.lastaflute" additivity="false" level="${log.level}">
-		<if condition='isNull("lasta.env")'>
-			<then>
-				<appender-ref ref="console" />
-			</then>
-		</if>
-		<appender-ref ref="appfile" />
-	</logger>
-	<logger name="fess.log.audit" additivity="false" level="info">
-		<if condition='isNull("lasta.env")'>
-			<then>
-				<appender-ref ref="console" />
-			</then>
-		</if>
-		<appender-ref ref="auditfile" />
-	</logger>
-	<root level="${root.log.level}">
-		<if condition='isNull("lasta.env")'>
-			<then>
-				<appender-ref ref="console" />
-			</then>
-		</if>
-		<appender-ref ref="appfile" />
-	</root>
-</configuration>
-- 
GitLab