Configuration 为什么log4j的行为不符合预期?

Configuration 为什么log4j的行为不符合预期?,configuration,log4j,ibatis,Configuration,Log4j,Ibatis,我的一位同事正试图让log4j表现如下: 登录到标准输出 默认情况下,禁用most输出 仅显示调试及以上级别的java.sql.PrepareStatement中的消息 他正陷入“级别”与“优先级”的较量中。这是他的配置文件: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE log4j:configuration SYSTEM "D:/Java/apache-log4j-1.2.15/src/main/resources/o

我的一位同事正试图让log4j表现如下:

  • 登录到标准输出
  • 默认情况下,禁用most输出
  • 仅显示调试及以上级别的java.sql.PrepareStatement中的消息
他正陷入“级别”与“优先级”的较量中。这是他的配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "D:/Java/apache-log4j-1.2.15/src/main/resources/org/apache/log4j/xml/log4j.dtd" >
<log4j:configuration> 

    <!--  Appenders -->
    <appender name="stdout" class="org.apache.log4j.ConsoleAppender">
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%5p %d{ISO8601} [%t][%x] %c - %m%n" />
        </layout>
    </appender>

    <!--  Loggers for ibatus and JDBC database -->
    <logger name="java.sql.PreparedStatement">
        <level value="debug"/>
    </logger>

    <!--  The Root Logger -->
    <root>
        <level value="error"/>
        <appender-ref ref="stdout"/>
    </root>

</log4j:configuration>
根日志级别更改为调试的配置(将查询替换为…)


他需要如何更改log4j.xml配置文件以使其按预期运行?

我认为没有日志消息的原因是您希望查看日志的代码没有使用
java.sql.PrepareStatement
记录器,而是使用不同的记录器。记录器通常(尽管不是必需的)以使用它们的类命名。例如,
com.ibatis.SomeClass
通常不会使用
java.sql.PrepareStatement
记录器

将根记录器设置为DEBUG,并检查提供所需消息的记录器的名称。然后用DEBUG配置这些记录器,并让root仅在错误级别进行日志记录


顺便说一句,它是Prepare_d_语句,它是接口(即那里没有日志代码),而且它肯定不使用log4j,因为它在JDK中。

我认为没有日志消息的原因是您希望从中查看日志的代码没有使用
java.sql.PrepareStatement
记录器,而是使用不同的记录器。记录器通常(尽管不是必需的)以使用它们的类命名。例如,
com.ibatis.SomeClass
通常不会使用
java.sql.PrepareStatement
记录器

将根记录器设置为DEBUG,并检查提供所需消息的记录器的名称。然后用DEBUG配置这些记录器,并让root仅在错误级别进行日志记录


顺便说一句,它是Prepare_d_语句,它是接口(即没有日志代码),而且它肯定不使用log4j,因为它在JDK中。

在log4j.xml中插入以下内容:

<!-- *******************************************************
     WARNING: iBatus 2.3.3 (only ver. tested) is a little weird. 
             YOU MUST SET
             java.sql.Connection to debug to get any 
             java.sql.PreparedStatement debug logs.
     ************************************************************** -->       
<logger name="java.sql.Connection" additivity="false">
    <level value="debug"/>
</logger>

调试2010-03-19 14:27:08425[main][[java.sql.PreparedStatement]-{pstm-100001}执行语句:

在log4j.xml中插入以下内容:

<!-- *******************************************************
     WARNING: iBatus 2.3.3 (only ver. tested) is a little weird. 
             YOU MUST SET
             java.sql.Connection to debug to get any 
             java.sql.PreparedStatement debug logs.
     ************************************************************** -->       
<logger name="java.sql.Connection" additivity="false">
    <level value="debug"/>
</logger>

调试2010-03-19 14:27:08425[main][[java.sql.PreparedStatement]-{pstm-100001}执行语句:

我查看了mybatis的源代码,如下所示。您必须在java.sql.Connection上启用调试,以便它执行java.sql.PreparedStatement的日志记录。我一整天都在为此奋斗

private Connection wrapConnection(Connection connection) {
    if (log.isDebugEnabled()) {
          return ConnectionLogger.newInstance(connection);
    } else {
      return connection;
    }
}

我查看了mybatis的源代码,如下所示。您必须在java.sql.Connection上启用调试,以便它执行java.sql.PreparedStatement的日志记录。我一整天都在为此奋斗

private Connection wrapConnection(Connection connection) {
    if (log.isDebugEnabled()) {
          return ConnectionLogger.newInstance(connection);
    } else {
      return connection;
    }
}

你能把第二段展开吗?现在还不清楚-如何将根日志记录器设置为调试,并且只让根日志记录在错误级别?@Kieveli:我的意思是在配置日志记录系统时使用root=DEBUG,在设置日志记录器后,将根日志记录器设置为错误(即不同时)。我看到iBatis实际上使用了java.sql.PreparedStatement记录器。问题只是名义上的吗?问题的原因不明。iBatis“java.sql.PreparedStatement”的日志消息只能通过更改“java.sql.Connection”的记录器来修改。这与log4j相反,所以我只能假设iBatis做了一些奇怪的修改。你能扩展第二段吗?现在还不清楚-如何将根日志记录器设置为调试,并且只让根日志记录在错误级别?@Kieveli:我的意思是在配置日志记录系统时使用root=DEBUG,在设置日志记录器后,将根日志记录器设置为错误(即不同时)。我看到iBatis实际上使用了java.sql.PreparedStatement记录器。问题只是名义上的吗?问题的原因不明。iBatis“java.sql.PreparedStatement”的日志消息只能通过更改“java.sql.Connection”的记录器来修改。这与log4j相反,所以我只能假设iBatis做了一些奇怪的修改。我让他感到羞愧,让他得到了一个帐户。我喜欢他的用户名选择。我羞辱他,让他获得了一个帐户。我喜欢他的用户名选择。@Martin-workaround。不知道为什么会这样。。。但是谢谢你的帮助@马丁-获得了变通能力。不知道为什么会这样。。。但是谢谢你的帮助!