tomcat 7 jdbc访问日志阀不工作

时间:2014-07-23 03:31:51

标签: mysql jdbc tomcat7 access-log tomcat-valve

您好我正在尝试在我的tomcat应用程序中使用db进行访问日志记录。

我遵循了tomcat文档。 https://tomcat.apache.org/tomcat-7.0-doc/api/org/apache/catalina/valves/JDBCAccessLogValve.html

服务器似乎启动正常,但我没有看到表中创建的任何条目。 但我可以看到tomcat正在接收连接参数(如果我给出无效的连接参数,服务器无法启动)

这是我用于访问记录的server.xml配置

    <Valve className="org.apache.catalina.valves.JDBCAccessLogValve"
           driverName="com.mysql.jdbc.Driver"
           connectionURL="jdbc:mysql://localhost:3306/test?user=root"
          pattern="combined" resolveHosts="false" tableName="access" />

我正在使用组合模式,并且创建的表具有文档中指定的确切模式 -

CREATE TABLE access (
id INT UNSIGNED AUTO_INCREMENT NOT NULL,
remoteHost CHAR(15) NOT NULL,
userName CHAR(15),
timestamp TIMESTAMP NOT NULL,
virtualHost VARCHAR(64) NOT NULL,
method VARCHAR(8) NOT NULL,
query VARCHAR(255) NOT NULL,
status SMALLINT UNSIGNED NOT NULL,
bytes INT UNSIGNED NOT NULL,
referer VARCHAR(128),
userAgent VARCHAR(128),
PRIMARY KEY (id),
INDEX (timestamp),
INDEX (remoteHost),
INDEX (virtualHost),
INDEX (query),
INDEX (userAgent)
);

Catalina.out似乎没有记录对此上下文有用的任何信息。

PS我明白DB日志记录有很多失败点,但我的应用程序的主要数据库与此相同。所以失败点是有点共享的。

1 个答案:

答案 0 :(得分:0)

您需要将用户名和密码定义为单独的子元素标记,而不是通过连接URL。

像:

  <Valve className="org.apache.catalina.valves.JDBCAccessLogValve"  
    driverName="com.mysql.jdbc.Driver"
    connectionURL="jdbc:mysql://localhost:3306/testdbName"
    connectionName="root"
    connectionPassword=""/>

对于调试,您可以尝试“请求转储阀”以查看到底发生了什么。请参阅:http://tomcat.apache.org/tomcat-7.0-doc/config/filter.html#Request_Dumper_Filter