2

mybatis 3.3.0 と mybatis-spring 1.2.3 を使用した Spring MVC プロジェクトがあり、プロジェクトで log4j を構成したいと考えています。mybatis-config.xmlまた、mybatis sql セッション ファクトリのセットアップには使用していません。したがって、次の設定は使用できません。

<configuration>
  <settings>
    ...
    <setting name="logImpl" value="LOG4J"/>
    ...
  </settings>
</configuration>

だから、私は私の中に次の設定を持っています

spring-context.xml

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
  <property name="dataSource" ref="dataSource" />
  <property name="typeAliasesPackage" value="com.sample.model"/>
  <property name="mapperLocations" value="classpath*:com/sample/mappers/*.xml" />
</bean>

<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
  <constructor-arg index="0" ref="sqlSessionFactory" />
</bean>

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
  <property name="basePackage" value="com.sample.mappers" />
</bean>

そして、このlog4j.xmlを構成しました

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "log4j.dtd">
<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>

  <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
    <layout class="org.apache.log4j.PatternLayout">
      <param name="ConversionPattern" value="%d [%p] %c{1} - %m%n"/>
    </layout>
  </appender>

  <logger name="java.sql" additivity="false">
    <level value="debug"/>
   <appender-ref ref="STDOUT"/> 
  </logger>

  <logger name="org.apache.ibatis" additivity="false">
    <level value="debug"/>
    <appender-ref ref="STDOUT"/>
  </logger>

  <logger name="org.mybatis.spring" additivity="false">
    <level value="debug"/>
    <appender-ref ref="STDOUT"/>
  </logger>

  <logger name="com.sample.mappers">
    <level value="debug"/>
    <appender-ref ref="STDOUT"/>
  </logger>

  <root>
    <priority value ="debug" />
    <appender-ref ref="STDOUT" />
  </root>

</log4j:configuration>

上記の構成は、実行された SQL クエリまたは準備されたステートメントを出力しません。したがって、mybatis のログページとこの回答に記載されているように、xml 構成の代わりに log4j.properties を使用しました。

log4j.properties

# Global logging configuration
log4j.rootLogger=DEBUG, stdout

# MyBatis logging configuration...
log4j.logger.com.sample.mappers=DEBUG

# SqlMap logging configuration.
log4j.logger.org.mybatis.spring=DEBUG
log4j.logger.org.apache.ibatis=DEBUG
log4j.logger.org.apache.ibatis.jdbc.ScriptRunner=DEBUG

log4j.logger.java.sql=DEBUG
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
log4j.logger.java.sql.ResultSet=DEBUG

# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d [%p] %c{1} - %m%n

pom.xml からも common-logging を削除しました。しかし、それもうまくいかないようです。

  • すべてのSQLクエリ(PreparedStatements)を出力するようにMyBatisを設定するには?
  • MyBatis が log4j を検出しない場合、MyBatis にデフォルトのロギング フレームワークとして log4j を使用するように指示する方法はありますmybatis-config.xmlか?
4

1 に答える 1

4

解決策を見つけたので、すべてのプリペアド ステートメントとすべての Mapper インターフェイス クエリとパラメータをコンソールに表示できるようになりました。サーバーが起動したら、MyBatis クエリを呼び出す前にこのコード行を呼び出すと、問題なく動作します。

org.apache.ibatis.logging.LogFactory.useLog4JLogging();

他のログイン フレームワークの他の方法については、こちらで説明しています。

これらのメソッドのいずれかを呼び出す場合は、他の MyBatis メソッドを呼び出す前に実行する必要があります。また、これらのメソッドは、要求されたログの実装がランタイム クラスパスで利用可能な場合にのみ、その実装に切り替わります。たとえば、Log4J ロギングを選択しようとして、実行時に Log4J が使用できない場合、MyBatis は Log4J を使用する要求を無視し、ロギングの実装を検出するために通常のアルゴリズムを使用します。

また、pom.xml で次の 2 つの依存関係を非表示にしました。

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.6.1</version>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.6.1</version>
</dependency>

メソッドを使用して log4j をデフォルトのロガーとして使用するように設定するuseLog4JLogging()と、コンソールで、MyBatis がロガー フレームワークとして log4j を選択していることがわかりました。

[DEBUG] org.apache.ibatis.logging.LogFactory - Logging initialized using 'class org.apache.ibatis.logging.log4j.Log4jImpl' adapter.
于 2016-03-22T10:13:57.567 に答える