Skip to content

Commit 4d15465

Browse files
committed
Deprecated Log4J 1.x
Fixes gh-1223
1 parent df06a08 commit 4d15465

File tree

18 files changed

+977
-226
lines changed

18 files changed

+977
-226
lines changed

pom.xml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -162,12 +162,6 @@
162162
<version>1.7.32</version>
163163
<optional>true</optional>
164164
</dependency>
165-
<dependency>
166-
<groupId>org.slf4j</groupId>
167-
<artifactId>slf4j-log4j12</artifactId>
168-
<version>1.7.32</version>
169-
<optional>true</optional>
170-
</dependency>
171165
<dependency>
172166
<groupId>log4j</groupId>
173167
<artifactId>log4j</artifactId>
@@ -286,6 +280,12 @@
286280
<version>9.4.0.jre8</version>
287281
<scope>provided</scope>
288282
</dependency>
283+
<dependency>
284+
<groupId>ch.qos.logback</groupId>
285+
<artifactId>logback-classic</artifactId>
286+
<version>1.2.9</version>
287+
<scope>test</scope>
288+
</dependency>
289289
</dependencies>
290290

291291
<build>

src/main/java/org/apache/ibatis/logging/LogFactory.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,10 @@ public static synchronized void useCommonsLogging() {
6767
setImplementation(org.apache.ibatis.logging.commons.JakartaCommonsLoggingImpl.class);
6868
}
6969

70+
/**
71+
* @deprecated Since 3.5.9 - See https://github.com/mybatis/mybatis-3/issues/1223. This method will remove future.
72+
*/
73+
@Deprecated
7074
public static synchronized void useLog4JLogging() {
7175
setImplementation(org.apache.ibatis.logging.log4j.Log4jImpl.class);
7276
}

src/main/java/org/apache/ibatis/logging/log4j/Log4jImpl.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,9 @@
2121

2222
/**
2323
* @author Eduardo Macarron
24+
* @deprecated Since 3.5.9 - See https://github.com/mybatis/mybatis-3/issues/1223. This class will remove future.
2425
*/
26+
@Deprecated
2527
public class Log4jImpl implements Log {
2628

2729
private static final String FQCN = Log4jImpl.class.getName();

src/main/java/org/apache/ibatis/logging/log4j/package-info.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,5 +15,6 @@
1515
*/
1616
/**
1717
* logger using Log4J feature.
18+
* @deprecated Since 3.5.9 - See https://github.com/mybatis/mybatis-3/issues/1223. This package will remove future.
1819
*/
1920
package org.apache.ibatis.logging.log4j;

src/site/es/xdoc/configuration.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<!--
33
4-
Copyright 2009-2020 the original author or authors.
4+
Copyright 2009-2021 the original author or authors.
55
66
Licensed under the Apache License, Version 2.0 (the "License");
77
you may not use this file except in compliance with the License.
@@ -482,7 +482,7 @@ SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, environ
482482
Permite especificar qué implementación de logging utilizar. Si no está informado la impelmentación se descubrirá automaticamente.
483483
</td>
484484
<td>
485-
SLF4J | LOG4J | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOGGING
485+
SLF4J | LOG4J(deprecated since 3.5.9) | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOGGING
486486
</td>
487487
<td>
488488
No informado

src/site/es/xdoc/logging.xml

Lines changed: 171 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<!--
33
4-
Copyright 2009-2020 the original author or authors.
4+
Copyright 2009-2021 the original author or authors.
55
66
Licensed under the Apache License, Version 2.0 (the "License");
77
you may not use this file except in compliance with the License.
@@ -41,7 +41,7 @@
4141
Log4j 2
4242
</li>
4343
<li>
44-
Log4j
44+
Log4j (deprecated since 3.5.9)
4545
</li>
4646
<li>
4747
JDK logging
@@ -51,27 +51,30 @@
5151
</p>
5252
<p>Muchos entornos vienen con Commons Logging incluido como pare del classpath del servidor (por ejemplo Tomcat y WebSphere). Es importante conocer que en esos entorno, MyBatis usará JCL como implementación de logging. En un entorno como WebSphere esto significa que tu configuración de log4j será ignorada dado que WebSphere proporciona su propia implementación de JCL. Esto puede ser muy frustrante porque parece que MyBatis está ignorando tu configuración de logging (en realidad, MyBatis está ignorando tu configuración de log4j porque está usando JCL en dicho entorno). Si tu aplicación se ejecuta en un entorno que lleva JCL incluido pero quieres usar un método distinto de logging puedes añadir un setting a tu fichero mybatis-config.xml:
5353
</p>
54-
<source><![CDATA[<configuration>
54+
<source><![CDATA[
55+
<configuration>
5556
<settings>
5657
...
5758
<setting name="logImpl" value="LOG4J"/>
5859
...
5960
</settings>
60-
</configuration>]]>
61-
</source>
61+
</configuration>
62+
]]></source>
6263
<p>Los valores válidos son: SLF4J, LOG4J, LOG4J2, JDK_LOGGING, COMMONS_LOGGING, STDOUT_LOGGING, NO_LOGGING o
6364
un nombre de clase plenamente cualificado que implemente <code>org.apache.ibatis.logging.Log</code> y reciba
6465
un string como parametro de constructor.
6566
</p>
6667
<p>Tambien puedes seleccionar el método de logging llamando a uno de los siguientes métodos:
6768
</p>
68-
<source><![CDATA[org.apache.ibatis.logging.LogFactory.useSlf4jLogging();
69+
<source><![CDATA[
70+
org.apache.ibatis.logging.LogFactory.useSlf4jLogging();
6971
org.apache.ibatis.logging.LogFactory.useLog4JLogging();
7072
org.apache.ibatis.logging.LogFactory.useLog4J2Logging();
7173
org.apache.ibatis.logging.LogFactory.useJdkLogging();
7274
org.apache.ibatis.logging.LogFactory.useCommonsLogging();
73-
org.apache.ibatis.logging.LogFactory.useStdOutLogging();]]></source>
74-
<p>Si eliges llamar a alguno de estos métodos, deberías hacerlo antes de llamar a ningún otro método de MyBatis. Además, estos métodos solo establecerán la implementación de log indicada si dicha implementación está disponible en el classpath. Por ejemplo, si intentas seleccionar log4j y log4j no está disponible en el classpath, MyBatis ignorará la petición y usará su algoritmo normal de descubrimiento de implementaciones de logging.
75+
org.apache.ibatis.logging.LogFactory.useStdOutLogging();
76+
]]></source>
77+
<p>Si eliges llamar a alguno de estos métodos, deberías hacerlo antes de llamar a ningún otro método de MyBatis. Además, estos métodos solo establecerán la implementación de log indicada si dicha implementación está disponible en el classpath. Por ejemplo, si intentas seleccionar log4j2 y log4j2 no está disponible en el classpath, MyBatis ignorará la petición y usará su algoritmo normal de descubrimiento de implementaciones de logging.
7578
</p>
7679
<p>Los temas específicos de JCL, Log4j y el Java Logging API quedan fuera del alcance de este documento. Sin embargo la configuración de ejemplo que se proporciona más abajo te ayudará a comenzar. Si quieres conocer más sobre estos frameworks, puedes obtener más información en las siguientes ubicaciones:
7780
</p>
@@ -91,72 +94,205 @@ org.apache.ibatis.logging.LogFactory.useStdOutLogging();]]></source>
9194
</ul>
9295
<subsection name="Configuración">
9396
<p>Para ver el log de las sentencias debes activar el log en un paquete, el nombre plenamente cualificado de una clase, un namespace o un nombre plenamente cualificado de un mapped statement.</p>
94-
<p>Nuevamente, cómo hagas esto es dependiente de la implementación de logging que se esté usando. Mostraremos cómo hacerlo con Log4j. Configurar los servicios de logging es simplemente cuestión de añadir uno o varios ficheros de configuración (por ejemplo log4j.properties) y a veces un nuevo JAR (por ejemplo log4j.jar). El ejemplo siguiente configura todos los servicios de logging para que usen log4j como proveedor. Sólo son dos pasos:
97+
<p>Nuevamente, cómo hagas esto es dependiente de la implementación de logging que se esté usando. Mostraremos cómo hacerlo con SLF4J(Logback). Configurar los servicios de logging es simplemente cuestión de añadir uno o varios ficheros de configuración (por ejemplo <code>logback.xml</code>) y a veces un nuevo JAR. El ejemplo siguiente configura todos los servicios de logging para que usen SLF4J(Logback) como proveedor. Sólo son dos pasos:
9598
</p>
96-
<h4>Paso 1: Añade el fichero Log4j JAR
99+
<h4>Paso 1: Añade el fichero SLF4J + Logback JAR
97100
</h4>
98-
<p>Dado que usamos Log4j, necesitaremos asegurarnos que el fichero JAR está disponible para nuestra aplicación. Para usar Log4j, necesitas añadir el fichero JAR al classpath de tu aplicación. Puedes descargar Log4j desde la URL indicada más arriba.
101+
<p>Dado que usamos SLF4J(Logback), necesitaremos asegurarnos que el fichero JAR está disponible para nuestra aplicación. Para usar SLF4J(Logback), necesitas añadir el fichero JAR al classpath de tu aplicación.
99102
</p>
100-
<p>En aplicaciones Web o de empresa debes añadir tu fichero log4j.java a tu directorio WEB-INF/lib, y en una aplicación standalone simplemente añádela al parámetro –classpath de la JVM.
103+
<p>En aplicaciones Web o de empresa debes añadir tu fichero <code>logback-classic.jar</code>
104+
,<code>logback-core.jar</code> and <code>slf4j-api.jar</code> a tu directorio <code>WEB-INF/lib</code>, y en una aplicación standalone simplemente añádela al parámetro <code>–classpath</code> de la JVM.
101105
</p>
106+
<p>If you use the maven, you can download jar files by adding following settings on your <code>pom.xml</code>.
107+
</p>
108+
<source><![CDATA[
109+
<dependency>
110+
<groupId>ch.qos.logback</groupId>
111+
<artifactId>logback-classic</artifactId>
112+
<version>1.x.x</version>
113+
</dependency>
114+
]]></source>
115+
102116
<h4>
103-
Paso 2: Configurar Log4j
117+
Paso 2: Configurar Logback
104118
</h4>
105-
<p>Configurar Log4j es sencillo. Supongamos que quieres habilitar el log para este mapper:</p>
106-
<source><![CDATA[package org.mybatis.example;
119+
<p>Configurar Logback es sencillo. Supongamos que quieres habilitar el log para este mapper:</p>
120+
<source><![CDATA[
121+
package org.mybatis.example;
107122
public interface BlogMapper {
108123
@Select("SELECT * FROM blog WHERE id = #{id}")
109124
Blog selectBlog(int id);
110-
}]]></source>
111-
<p>Crea un fichero con nombre <code>log4j.properties</code>
125+
}
126+
]]></source>
127+
<p>Crea un fichero con nombre <code>logback.xml</code>
112128
como el que se muestra a continuación y colocalo en tu classpath:
113129
</p>
114-
<source><![CDATA[# Global logging configuration
115-
log4j.rootLogger=ERROR, stdout
116-
# MyBatis logging configuration...
117-
log4j.logger.org.mybatis.example.BlogMapper=TRACE
118-
# Console output...
119-
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
120-
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
121-
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n]]></source>
122-
<p>El fichero anterior hará que log4j reporte información detallada para <code>org.mybatis.example.BlogMapper</code> e información de errores para el resto de las clases de tu aplicación.</p>
130+
131+
<source><![CDATA[
132+
<?xml version="1.0" encoding="UTF-8"?>
133+
<!DOCTYPE configuration>
134+
<configuration>
135+
136+
<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
137+
<encoder>
138+
<pattern>%5level [%thread] - %msg%n</pattern>
139+
</encoder>
140+
</appender>
141+
142+
<logger name="org.mybatis.example.BlogMapper">
143+
<level value="trace"/>
144+
</logger>
145+
<root level="error">
146+
<appender-ref ref="stdout"/>
147+
</root>
148+
149+
</configuration>
150+
]]></source>
151+
152+
<p>El fichero anterior hará que SLF4J(Logback) reporte información detallada para <code>org.mybatis.example.BlogMapper</code> e información de errores para el resto de las clases de tu aplicación.</p>
123153
<p>Si quieres activar un nivel más fino de logging puedes activar el logging para statements específicos en lugar de para todo un mapper. La siguiente línea activa el logging sólo para el statement <code>selectBlog</code>:</p>
124154

125-
<source>log4j.logger.org.mybatis.example.BlogMapper.selectBlog=TRACE</source>
155+
<source><![CDATA[
156+
<logger name="org.mybatis.example.BlogMapper.selectBlog">
157+
<level value="trace"/>
158+
</logger>
159+
]]></source>
126160

127161
<p>Si por el contrario quieres activar el log para un grupo de mappers debes añadir un logger para el paquete raiz donde residen tus mappers:</p>
128162

129-
<source>log4j.logger.org.mybatis.example=TRACE</source>
163+
<source><![CDATA[
164+
<logger name="org.mybatis.example">
165+
<level value="trace"/>
166+
</logger>
167+
]]></source>
130168

131169
<p>Hay consultas que pueden devolver una gran cantidad de datos. En esos casos puedes querer ver las sentencias SQL pero no los datos. Para conseguirlo las sentencias se loguean con nivel DEBUG (FINE en JDK) y los resultados con TRACE (FINER en JDK), por tanto si quieres ver la sentencia pero no el resultado establece el nivel a DEBUG</p>
132170

133-
<source>log4j.logger.org.mybatis.example=DEBUG</source>
171+
<source><![CDATA[
172+
<logger name="org.mybatis.example">
173+
<level value="debug"/>
174+
</logger>
175+
]]></source>
134176

135177
<p>Y si estás usando ficheros XML como este?</p>
136178

137-
<source><![CDATA[<?xml version="1.0" encoding="UTF-8" ?>
179+
<source><![CDATA[
180+
<?xml version="1.0" encoding="UTF-8" ?>
138181
<!DOCTYPE mapper
139182
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
140183
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
141184
<mapper namespace="org.mybatis.example.BlogMapper">
142185
<select id="selectBlog" resultType="Blog">
143186
select * from Blog where id = #{id}
144187
</select>
145-
</mapper>]]></source>
188+
</mapper>
189+
]]></source>
146190

147191
<p>En tal caso puedes activar el logging de todo el fichero añadiendo un logger para el namespace como se muestra a continuación:</p>
148192

149-
<source>log4j.logger.org.mybatis.example.BlogMapper=TRACE</source>
193+
<source><![CDATA[
194+
<logger name="org.mybatis.example.BlogMapper">
195+
<level value="trace"/>
196+
</logger>
197+
]]></source>
150198

151199
<p>O para un statement específico:</p>
152200

153-
<source>log4j.logger.org.mybatis.example.BlogMapper.selectBlog=TRACE</source>
201+
<source><![CDATA[
202+
<logger name="org.mybatis.example.BlogMapper.selectBlog">
203+
<level value="trace"/>
204+
</logger>
205+
]]></source>
154206

155207
<p>Sí, como ya te habrás dado cuenta, no hay ninguna diferencia entre configurar el logging para un mapper o para un fichero XML.</p>
156208

157-
<p><span class="label important">NOTA</span> Si usas SLF4J o Log4j 2 MyBatis le llamará usando MYBATIS como marker.</p>
209+
<p><span class="label important">NOTA</span> Si usas SLF4J o Log4j 2 MyBatis le llamará usando <code>MYBATIS</code> como marker.</p>
210+
211+
<p>El resto de la configuración sirve para configurar los appenders, lo cual queda fuera del ámbito de este documento. Sin embargo, puedes encontrar más información en el site de <a href="https://logback.qos.ch/">Logback</a>. O, puedes simplemente experimentar para ver los efectos que consigues con las distintas opciones de configuración.</p>
212+
213+
<p></p>
214+
<h4>
215+
Configuration example for Log4j 2
216+
</h4>
217+
218+
<p><code>pom.xml</code></p>
219+
220+
<source><![CDATA[
221+
<dependency>
222+
<groupId>org.apache.logging.log4j</groupId>
223+
<artifactId>log4j-core</artifactId>
224+
<version>2.x.x</version>
225+
</dependency>
226+
]]></source>
227+
228+
<p><code>log4j2.xml</code></p>
229+
230+
<source><![CDATA[
231+
<?xml version="1.0" encoding="UTF-8"?>
232+
<Configuration xmlns="http://logging.apache.org/log4j/2.0/config">
233+
234+
<Appenders>
235+
<Console name="stdout" target="SYSTEM_OUT">
236+
<PatternLayout pattern="%5level [%t] - %msg%n"/>
237+
</Console>
238+
</Appenders>
239+
240+
<Loggers>
241+
<Logger name="org.mybatis.example.BlogMapper" level="trace"/>
242+
<Root level="error" >
243+
<AppenderRef ref="stdout"/>
244+
</Root>
245+
</Loggers>
246+
247+
</Configuration>
248+
]]></source>
249+
250+
<p></p>
251+
<h4>
252+
Configuration example for Log4j
253+
</h4>
254+
255+
<p><code>pom.xml</code></p>
256+
257+
<source><![CDATA[
258+
<dependency>
259+
<groupId>log4j</groupId>
260+
<artifactId>log4j</artifactId>
261+
<version>1.2.17</version>
262+
</dependency>
263+
]]></source>
264+
265+
<p><code>log4j.properties</code></p>
266+
267+
<source><![CDATA[
268+
log4j.rootLogger=ERROR, stdout
269+
270+
log4j.logger.org.mybatis.example.BlogMapper=TRACE
271+
272+
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
273+
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
274+
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
275+
]]></source>
276+
277+
278+
<p></p>
279+
<h4>
280+
Configuration example for JDK logging
281+
</h4>
282+
283+
<p><code>logging.properties</code></p>
284+
285+
<source><![CDATA[
286+
handlers=java.util.logging.ConsoleHandler
287+
.level=SEVERE
288+
289+
org.mybatis.example.BlogMapper=FINER
290+
291+
java.util.logging.ConsoleHandler.level=ALL
292+
java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter
293+
java.util.logging.SimpleFormatter.format=%1$tT.%1$tL %4$s %3$s - %5$s%6$s%n
294+
]]></source>
158295

159-
<p>El resto de la configuración sirve para configurar los appenders, lo cual queda fuera del ámbito de este documento. Sin embargo, puedes encontrar más información en el site de Log4j (la url está más arriba). O, puedes simplemente experimentar para ver los efectos que consigues con las distintas opciones de configuración.</p>
160296
</subsection>
161297
</section>
162298
</body>

src/site/ja/xdoc/configuration.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<!--
33
4-
Copyright 2009-2020 the original author or authors.
4+
Copyright 2009-2021 the original author or authors.
55
66
Licensed under the Apache License, Version 2.0 (the "License");
77
you may not use this file except in compliance with the License.
@@ -508,7 +508,7 @@ SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, environ
508508
MyBatis のログ出力に使用するロギング実装を指定します。未指定の場合は自動的検出されます。
509509
</td>
510510
<td>
511-
SLF4J | LOG4J | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOGGING
511+
SLF4J | LOG4J(3.5.9以降非推奨) | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOGGING
512512
</td>
513513
<td>
514514
未指定

0 commit comments

Comments
 (0)