MyBatis通过内部日志工厂提供日志信息。内部日志工厂将将日志信息委托给以下其中一个日志实现:
选择的日志解决方案是基于内部MyBatis日志工厂的运行时内省。MyBatis日志工厂将使用它找到的第一个日志实现(按照上述顺序搜索实现)。如果MyBatis找不到以上任何一种实现,则日志将被禁用。
许多环境将Commons Logging作为应用程序服务器类路径的一部分进行使用(比如Tomcat和WebSphere)。重要的是要知道,在这种环境中,MyBatis将使用Commons Logging作为日志实现。在像WebSphere这样的环境中,这意味着您的Log4J配置将被忽略,因为WebSphere提供了自己的专有的Commons Logging实现。这可能非常令人沮丧,因为看起来MyBatis忽略了您的Log4J配置(实际上,MyBatis之所以忽略了Log4J配置,是因为在这种环境中MyBatis将使用Commons Logging)。如果您的应用程序在包含Commons Logging的类路径中运行,但您更愿意使用其他日志实现,您可以通过在mybatis-config.xml文件中添加以下设置来选择不同的日志实现:
<configuration>
<settings>
...
<setting name="logImpl" value="LOG4J"/>
...
</settings>
</configuration>
?有效的值包括SLF4J、LOG4J、LOG4J2、JDK_LOGGING、COMMONS_LOGGING、STDOUT_LOGGING、NO_LOGGING或一个实现了org.apache.ibatis.logging.Log接口并以字符串作为构造函数参数的完全限定类名。
您还可以通过调用以下方法来选择日志实现:
org.apache.ibatis.logging.LogFactory.useSlf4jLogging();
org.apache.ibatis.logging.LogFactory.useLog4JLogging();
org.apache.ibatis.logging.LogFactory.useLog4J2Logging();
org.apache.ibatis.logging.LogFactory.useJdkLogging();
org.apache.ibatis.logging.LogFactory.useCommonsLogging();
org.apache.ibatis.logging.LogFactory.useStdOutLogging();
如果选择调用这些方法,请在调用任何其他MyBatis方法之前这样做。另外,这些方法只会在运行时类路径上可用的情况下切换到所请求的日志实现。例如,如果您尝试选择Log4J2作为日志记录,而在运行时未提供Log4J2,则MyBatis将忽略使用Log4J2的请求,并将使用其正常的日志实现发现算法。