2012-09-11 71 views
0

我在使用log4j和spring JDBC時遇到了問題。我可能錯過了一些東西,所以如果有誤解,請不要猶豫糾正我。log4j spring jdbc異常

我目前使用的log4j.xml文件

<appender name="console" class="org.apache.log4j.ConsoleAppender"> 
    <layout class="org.apache.log4j.PatternLayout"> 
     <param name="ConversionPattern" value="%d %p %C{1}.%M - %m%n" /> 
    </layout> 
</appender> 
<appender name="stationPdf" class="org.apache.log4j.RollingFileAppender"> 
    <param name="File" value="./log/stationPdf.log" /> 
    <param name="Append" value="true" /> 
    <param name="MaxFileSize" value="5000KB" /> 
    <param name="MaxBackupIndex" value="3" /> 
    <layout class="org.apache.log4j.PatternLayout"> 
     <param name="ConversionPattern" value="%d %p %C{1}.%M - %m%n" /> 
    </layout> 
</appender> 

<category name="com.mypackage"> 
    <level value="debug" /> 
    <appender-ref ref="stationPdf" /> 
</category> 
<category name="org.springframework.jdbc"> 
    <level value="debug" /> 
    <appender-ref ref="stationPdf" /> 
</category> 
<root> 
    <level value="debug" /> 
    <appender-ref ref="console" /> 
    <appender-ref ref="stationPdf" /> 
</root> 

正如你可以看到,它主要是在一個特定的文件重定向everyhting。 主要問題與spring jdbc有關。我正在使用一個小型數據庫來存儲屬性,我需要連接到這個數據庫來提取數據。

所以,當我在密碼犯了一個錯誤,我得到下面的異常,如預期:

Exception in thread "AWT-EventQueue-0" org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Access denied for user 'root'@'localhost' (using password: YES)) 
    at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80) 
    at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:573) 
    at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:637) 
    at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:666) 
    at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:674) 
    at org.springframework.jdbc.core.JdbcTemplate.queryForObject(JdbcTemplate.java:729) 
    at org.springframework.jdbc.core.JdbcTemplate.queryForObject(JdbcTemplate.java:749) 
    at com.mypackage.dao.impl.PropertiesDaoJdbcImpl.selectProperty(PropertiesDaoJdbcImpl.java:37) 
    at com.mypackage.data.ExtractedDataClass.loadProperties(ExtractedDataClass.java:42) 
    at com.mypackage.accueil.Accueil.<init>(Accueil.java:138) 
    at com.mypackage.accueil.Accueil$12.run(Accueil.java:896) 
    at java.awt.event.InvocationEvent.dispatch(Unknown Source) 
[...] 
Caused by: org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Access denied for user 'root'@'localhost' (using password: YES)) 
    at org.apache.commons.dbcp.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:1549) 
[...] 

Caused by: java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES) 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4098) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4030) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:951) 
    [...] 

的問題是,我不能讓這個例外在我的日誌文件。它出現在控制檯中,但從來沒有在我的文件中。 我應該如何使用,添加或刪除我的log4j.xml文件來獲取這些異常?

由於提前,

對不起,我的近似英語:)

+1

您可以從'com.mypackage'和'org.springframework.jdbc'中刪除''開始 - 子記錄器將從根記錄器繼承此appender,所以您不應該添加它再次直接。 –

+0

確實,這絕對沒用,謝謝! 任何想法的例外? –

回答

1

,錯誤消息開始

Exception in thread "AWT-EventQueue-0" 

表明,它沒有被通過的log4j記錄可言,而只是事實出現在控制檯上,因爲每個Java線程默認都有標準的「未捕獲異常」邏輯,這可以解釋爲什麼你的log4j設置沒有任何作用。您需要在自己的代碼中的適當位置捕捉異常並自行記錄。

+0

正是這個問題!你救了我 ! –