Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Liberty配置文件配置log4jdbc-log4j2_Java_Db2_Log4j2_Websphere Liberty_Log4jdbc - Fatal编程技术网

Java 使用Liberty配置文件配置log4jdbc-log4j2

Java 使用Liberty配置文件配置log4jdbc-log4j2,java,db2,log4j2,websphere-liberty,log4jdbc,Java,Db2,Log4j2,Websphere Liberty,Log4jdbc,我有一个在本地部署到Liberty概要文件服务器的web应用程序,它已经在使用log4j2。我的最终目标是记录所有preparedstatement,其参数值包含在查询字符串中,就在它们针对DB2数据库运行之前 我一直在按照上的说明设置log4jdbc-log4j2。我能够使用Maven下拉依赖项文件: <dependency> <groupId>org.bgee.log4jdbc-log4j2</groupId> <artifactId

我有一个在本地部署到Liberty概要文件服务器的web应用程序,它已经在使用log4j2。我的最终目标是记录所有preparedstatement,其参数值包含在查询字符串中,就在它们针对DB2数据库运行之前

我一直在按照上的说明设置log4jdbc-log4j2。我能够使用Maven下拉依赖项文件:

<dependency>
    <groupId>org.bgee.log4jdbc-log4j2</groupId>
    <artifactId>log4jdbc-log4j2-jdbc4</artifactId>
    <version>1.16</version>
</dependency>

org.bgee.log4jdbc-log4j2

,我决定实现一个LoggableStatement包装器,如下所述:ibm.com/developerworks/java/library/j-loggable

对于WebSphereLiberty服务器,所有全局服务器配置都在server.xml文件中完成(由defualt位于WLP_INSTALL/usr/servers//server.xml)

您可能希望在server.xml中使用以下内容:

<dataSource id="myDataSource" jndiname="jdbc/myDataSource" type="javax.sql.DataSource">
    <jdbcDriver javax.sql.DataSource="net.sf.log4jdbc.sql.jdbcapi.DataSourceSpy">
      <library>
        <fileset dir="C:/path/to/libs" includes="thedb2jar.jar log4j.jar" />
      </library>
    </jdbcDriver>
    <properties user="user" password="password"
                url="jdbc:log4jdbc:<the normal jdbc url>"/>
</dataSource>

这里的关键部分是元素具有“javax.sql.DataSource”属性集,该值是log4jjar的DataSource类的名称。此外,在元素中,您将看到url是用“jdbc:log4jdbc”前缀指定的,如第3.1节所述


这是未经测试的建议,但您可能需要将两个jar(db2 jar和log4j jar)都包含在同一个文件夹中,以便在同一个元素中提取它们。

感谢您的回复。我已经将依赖项中的所有log4j*.jar文件都包含在DB2Drivers目录中,并更新了我的server.xml,使其完全包含您所建议的内容(当然,还填充了我的应用程序的名称/路径)。我也试着用代替。无论哪种方式,当进行第一次查询时,我都会在net.sf.log4jdbc.sql.jdbcapi.DataSourceSpy上得到一个实例化异常。如有任何见解,将不胜感激。再次感谢你。我将继续对server.xml进行修改,并查看是否得到所需的结果。@Tyndareus如果您需要更多帮助,我建议使用新错误更新问题。或者,如果这个答案有助于您取得进展,那么您应该接受它。@Tyndareus没有堆栈,我无法在InstanceionException上帮助您,但这听起来像是一个完全不同的问题。通过设置javax.sql.DataSource=“net.blah.DataSourceSpy”,您可以告诉Liberty DataSource impl类是什么。如果这引发了一个异常,那么这就是驱动程序现在允许Liberty实例化它的问题。适当地注意到并相应地更新,@bkail-谢谢。感谢解释,@aguibert-我已经用一些希望有用的信息更新了原始问题。
java.lang.Exception:
    at <my files>
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:595) [com.ibm.ws.javaee.servlet.3.0_1.0.8.jar:?]
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:668) [com.ibm.ws.javaee.servlet.3.0_1.0.8.jar:?]
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1285) [com.ibm.ws.webcontainer_1.0.8.jar:?]
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:776) [com.ibm.ws.webcontainer_1.0.8.jar:?]
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:473) [com.ibm.ws.webcontainer_1.0.8.jar:?]
    at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1104) [com.ibm.ws.webcontainer_1.0.8.jar:?]
    at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:4845) [com.ibm.ws.webcontainer_1.0.8.jar:?]
    at com.ibm.ws.webcontainer.osgi.DynamicVirtualHost$2.handleRequest(DynamicVirtualHost.java:297) [com.ibm.ws.webcontainer_1.0.8.jar:?]
    at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:981) [com.ibm.ws.webcontainer_1.0.8.jar:?]
    at com.ibm.ws.webcontainer.osgi.DynamicVirtualHost$2.run(DynamicVirtualHost.java:262) [com.ibm.ws.webcontainer_1.0.8.jar:?]
    at com.ibm.ws.http.dispatcher.internal.channel.HttpDispatcherLink$TaskWrapper.run(HttpDispatcherLink.java:955) [com.ibm.ws.transport.http_1.0.8.jar:?]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [?:1.7.0_60]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [?:1.7.0_60]
    at java.lang.Thread.run(Thread.java:745) [?:1.7.0_60]
Caused by: javax.naming.NamingException: CWWKN0008E: An object could not be obtained for name jdbc/myDataSource.
    at com.ibm.ws.jndi.internal.WSContext.resolveObject(WSContext.java:128) ~[?:?]
    at com.ibm.ws.jndi.internal.WSContext.lookup(WSContext.java:364) ~[?:?]
    at com.ibm.ws.jndi.internal.WSContext.lookup(WSContext.java:359) ~[?:?]
    at org.apache.aries.jndi.DelegateContext.lookup(DelegateContext.java:161) ~[?:?]
    at javax.naming.InitialContext.lookup(InitialContext.java:411) ~[?:1.7.0_60]
    at  <my files>
    ... 16 more
[ERROR   ] CWWKE0701E: FrameworkEvent ERROR Bundle:com.ibm.ws.jdbc(id=69) org.osgi.framework.ServiceException: Exception in com.ibm.ws.resource.internal.ResourceFactoryTrackerData$1.getService()
    at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.factoryGetService(ServiceFactoryUse.java:222)
    at [internal classes]
    at javax.naming.InitialContext.lookup(InitialContext.java:411)
    at  <my files>
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:595)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:668)
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1285)
    at [internal classes]
Caused by: java.lang.RuntimeException: java.sql.SQLNonTransientException: java.lang.InstantiationException: net.sf.log4jdbc.sql.jdbcapi.DataSourceSpy
    at com.ibm.ws.resource.internal.ResourceFactoryTrackerData$1.getService(ResourceFactoryTrackerData.java:109)
    ... 10 more
Caused by: java.sql.SQLNonTransientException: java.lang.InstantiationException: net.sf.log4jdbc.sql.jdbcapi.DataSourceSpy
    at com.ibm.ws.jdbc.internal.JDBCDriverService.create(JDBCDriverService.java:287)
    ... 10 more
Caused by: java.lang.InstantiationException: net.sf.log4jdbc.sql.jdbcapi.DataSourceSpy
    at java.lang.Class.newInstance(Class.java:359)
    at com.ibm.ws.jdbc.internal.JDBCDriverService$1.run(JDBCDriverService.java:228)
    ... 10 more
 Event:org.osgi.framework.FrameworkEvent[source=com.ibm.ws.jdbc_1.0.8.cl50520150305-2202 [69]]
<dataSource id="myDataSource" jndiname="jdbc/myDataSource" type="javax.sql.DataSource">
    <jdbcDriver javax.sql.DataSource="net.sf.log4jdbc.sql.jdbcapi.DataSourceSpy">
      <library>
        <fileset dir="C:/path/to/libs" includes="thedb2jar.jar log4j.jar" />
      </library>
    </jdbcDriver>
    <properties user="user" password="password"
                url="jdbc:log4jdbc:<the normal jdbc url>"/>
</dataSource>