2013-07-30 32 views
2

我在webapp中使用jdbcdslog和log4j日志记录引擎。我能够记录执行的SQL查询。 我想知道如何获取查询被激发的包的名称。这样我就可以分离出日志信息,并通过查看日志知道查询凸轮的位置,而不是通过代码。获取从中启动SQL查询的包的名称?

我试图用%C参数的Log4j的的PatternLayout拿到包名提到here

但输出我得到的是

2013-07-30-main--INFO -org.jdbcdslog.StatementLogger:java.sql.Statement.executeQuery: SELECT id, first, last, age FROM Employees; 

正如你所看到的,SQL查询记录,但它给出的类是org.jdbcdslog.StatementLogger。这不是我想要的,因为我想要查询被激发的类的名称。

我使用Log4j.properties以下设置文件

log4j.appender.S.layout.ConversionPattern=%d{yyyy-MM-dd}-%t-%x-%-5p-%C:%m%n 

这是因为jdbcdslog换到JDBC驱动程序的连接。 我想知道如何获取查询被触发的类的名称。

回答

2

http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/PatternLayout.html我看不到任何地方你可以指定一个变量的原始方法。另外,通过log4j看到的事件看起来并不像信息传递到事件链(http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/spi/LoggingEvent.html)。

但是,如果你真的需要这个功能,你可能需要一些解决方法来实现你自己的DataSourceProxyBase。我从他们的下载页面下载了jdbcdslog源代码,它看起来像你可以扩展和重写DataSourceProxyBase类中的一些方法并添加到你自己的记录器中。然后指出您的设置使用该数据源代理。

<bean id="dataSourceActual" class="org.springframework.jndi.JndiObjectFactoryBean"> 
    <property name="jndiName"> 
     <value>java:comp/env/jdbc/MyDatasource</value> 
    </property> 
</bean> 

<bean id="dataSource" class="com.me.MySoureConnectionPoolDataSourceProxy"> 
    <property name="targetDSDirect" ref="dataSourceActual" /> 
</bean> 

如果你下载就可以开始四处跟随他们的程序,看你需要重写来实现你所需要的东西的来源。一个好的开始地点可能是PooledConnectionLoggingProxy类

相关问题