"Gary Gregory" <garydgreg...@gmail.com> wrote on 2019-12-11 22:01:54:
> CAUTION : External email. Do not click links or open attachments > unless you recognize the sender and know the content is safe. > > AFK, sorry for the top-post. Have you looked at our unit tests? There might > be something there to help see what the usage pattern is for JNDI. You mean to say I should write some Java code to test the JNDI connection as defined in the Tomcat configuration? Or are the unit tests you refer to existing code that is available somewhere? Either way, I have no idea which unit tests you're referring to? I'm also not quite sure what I'm looking for here, I haven't done this before and I don't write Java code on a regular basis. Just created a few snippets to do small stuff here and there, such as this case where we're wrapping a servlet to have some logging of HTTP context information to a database table. There's no requirement here to do the logging through JNDI either; we used a direct connection through log4j.xml previously and that had some issues (mostly losing connection when the DB server got kicked). JNDI just seemed to be the easiest way to set up a connection pool for the JDBCAppender, but now it's starting to look like JNDI is anything but. Regards, Alban. > On Tue, Dec 10, 2019, 06:02 Alban Hertroys < > alban.hertr...@apollovredestein.com> wrote: > > > Hi, > > > > We're having a lot of trouble getting the JDBCAppender to write to our > > PostgreSQL database. There's probably a configuration error somewhere, but > > we haven't been able to find it. And I have been searching and trying for > > several days now, with no progress at all. > > Even though we specify a connection URL in the JDNI source (see below), it > > always ends with the JDBCAppender complaining that: > > java.sql.SQLException: Cannot create JDBC driver of class '' for > > connect URL 'null' > > > > The Appender should write the data to our database at server "foobar", > > database "logging-tst". Using the same credentials in SquirrelSQL, with > > the same JDBC driver, I can connect to that database and query the table > > specified in the log4j.xml (schema: "logging", table: "usage"; names being > > case-insensitive). > > > > Any pointers would be appreciated. > > > > Environment: > > - Centos 7 > > - Apache Tomcat 8.5.32 > > - log4j-2.11 > > > > We created a servlet HTTP filter into a JAR, compiled against: > > WEB-INF/lib: > > log4j-api-2.11.0.jar log4j-core-2.11.0.jar > > servlet-api.jar > > > > This servlet put()'s certain fields into the ThreadContext, which we then > > attempt to access through %X{...} in the log4j2.xml, appending those > > fields as a > > row to an existing table in our database. > > We had this set-up working previously with log4j-1.something in an MS SQL > > '05 > > DB, all on Windows 2003 server (which we are migrating away from due to > > performance issues). > > > > Files within the web application: > > WEB-INF/lib/ > > log4j-1.2-api-2.11.0.jar log4j-api-2.11.0.jar > > log4j-core-2.11.0.jar log4j-jcl-2.11.0.jar log4j-jul-2.11.0.jar > > log4j-slf4j-impl-2.11.0.jar log4j-web-2.11.0.jar > > postgresql-jdbc.jar > > > > > > META-INF/context.xml: > > --------------------- > > <?xml version="1.0" encoding="utf-8"?> > > <context> > > <resource > > name="jdbc/loggingtst" > > auth="Container" > > type="javax.sql.DataSource" > > username="*****" > > password="*****" > > driverClassName="org.postgresql.Driver" > > url="jdbc:postgresql://foobar:5432/logging-tst" > > maxTotal="20" > > maxIdle="10" > > /> > > </context> > > > > > > WEB-INF/classes/log4j2.xml: > > --------------------------- > > <?xml version="1.0" encoding="UTF-8"?> > > <Configuration status="WARN"> > > ... > > <Appenders> > > ... > > <JDBC name="DBAppender" tableName="logging.usage"> > > <DataSource jndiName="java:/comp/env/jdbc/loggingtst"/> > > <Column name="servername" pattern="%X{servername}"/> > > <Column name="fex" pattern="%X{focexec}"/> > > <Column name="parameters" pattern="%X{parameters}"/> > > <Column name="username" pattern="%X{username}"/> > > <Column name="duration" pattern="%X{duration}"/> > > <Column name="user_agent" pattern="%X{user-agent}"/> > > </JDBC> > > </Appenders> > > <Loggers> > > ... > > <Logger name="LogFilter" level="info" additivity="false"> > > <AppenderRef ref="DBAppender"/> > > </Logger> > > > > <Root level="error"> > > <AppenderRef ref="sysout" /> > > </Root> > > </Loggers> > > > > </Configuration> > > > > > > WEB-INF/web.xml: > > ---------------- > > ... > > <resource-ref> > > <description>PostgreSQL logging table</description> > > <res-ref-name>jdbc/loggingtst</res-ref-name> > > <res-type>javax.sql.DataSource</res-type> > > <res-auth>Container</res-auth> > > </resource-ref> > > ... > > > > With this, catalina.out contains: > > > > 2019-12-09 17:38:16,460 localhost-startStop-1 ERROR JdbcDatabaseManager > > JdbcManager{name=FexAppender, bufferSize=0, tableName=logging.usage, > > columnConfigs=[{ name=servername, layout=%X{servername}, literal=null, > > timestamp=false }, { name=fex, layout=%X{focexec}, literal=null, > > timestamp=false }, { name=parameters, layout=%X{parameters}, literal=null, > > timestamp=false }, { name=username, layout=%X{username}, literal=null, > > timestamp=false }, { name=duration, layout=%X{duration}, literal=null, > > timestamp=false }, { name=user_agent, layout=%X{user-agent}, literal=null, > > timestamp=false }], columnMappings=[]} Could not perform database startup > > operations: java.sql.SQLException: Cannot create JDBC driver of class '' > > for connect URL 'null' java.sql.SQLException: Cannot create JDBC driver of > > class '' for connect URL 'null' > > at > > > > > org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createConnectionFactory > (BasicDataSource.java:2186) > > at > > > > org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createDataSource > (BasicDataSource.java:2066) > > at > > > > org.apache.tomcat.dbcp.dbcp2.BasicDataSource.getConnection > (BasicDataSource.java:1525) > > at > > > > > org.apache.logging.log4j.core.appender.db.jdbc.DataSourceConnectionSource.getConnection > (DataSourceConnectionSource.java:51) > > at > > > > > org.apache.logging.log4j.core.appender.db.jdbc.JdbcDatabaseManager.startupInternal > (JdbcDatabaseManager.java:85) > > at > > > > > org.apache.logging.log4j.core.appender.db.AbstractDatabaseManager.startup > (AbstractDatabaseManager.java:81) > > at > > > > > org.apache.logging.log4j.core.appender.db.AbstractDatabaseAppender.start > (AbstractDatabaseAppender.java:106) > > at > > > > org.apache.logging.log4j.core.config.AbstractConfiguration.start > (AbstractConfiguration.java:265) > > at > > > > org.apache.logging.log4j.core.LoggerContext.setConfiguration > (LoggerContext.java:547) > > at > > org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:263) > > at > > > > org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext > (Log4jContextFactory.java:240) > > at > > > > org.apache.logging.log4j.core.config.Configurator.initialize > (Configurator.java:158) > > at > > > > > org.apache.logging.log4j.web.Log4jWebInitializerImpl.initializeNonJndi > (Log4jWebInitializerImpl.java:168) > > at > > > > org.apache.logging.log4j.web.Log4jWebInitializerImpl.start > (Log4jWebInitializerImpl.java:110) > > at > > > > > org.apache.logging.log4j.web.Log4jServletContainerInitializer.onStartup > (Log4jServletContainerInitializer.java:57) > > at > > > > org.apache.catalina.core.StandardContext.startInternal > (StandardContext.java:5245) > > at > > org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) > > at > > > > org.apache.catalina.core.ContainerBase.addChildInternal > (ContainerBase.java:754) > > at > > org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:730) > > at > > org.apache.catalina.core.StandardHost.addChild(StandardHost.java:734) > > at > > > > org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:629) > > at > > > > org.apache.catalina.startup.HostConfig$DeployDescriptor.run > (HostConfig.java:1839) > > at > > java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) > > at java.util.concurrent.FutureTask.run(FutureTask.java:266) > > at > > > > java.util.concurrent.ThreadPoolExecutor.runWorker > (ThreadPoolExecutor.java:1149) > > at > > > > java.util.concurrent.ThreadPoolExecutor$Worker.run > (ThreadPoolExecutor.java:624) > > at java.lang.Thread.run(Thread.java:748) > > Caused by: java.lang.NullPointerException > > at org.postgresql.Driver.parseURL(Driver.java:551) > > at org.postgresql.Driver.acceptsURL(Driver.java:472) > > at java.sql.DriverManager.getDriver(DriverManager.java:299) > > at > > > > > org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createConnectionFactory > (BasicDataSource.java:2171) > > ... 26 more > > > > (Ignore below company statement) > > > > > > > > Alban Hertroys > > D: +31 (0)53 4 888 888 | T: +31 (0)53 4888 888 | E: > > alban.hertr...@apollovredestein.com > > Apollo Vredestein B.V.| Ir. E.L.C. Schiffstraat 370, 7547 RD Enschede, The > > Netherlands > > Chamber of Commerce number: 34223268 > > > > > > > > > > The information contained in this e-mail is intended solely for the use of > > the > > individual or entity to whom it is addressed. If you are not the intended > > recipient, you are hereby notified that any disclosure, copying, > > distribution > > or action in relation to the contents of this information is strictly > > prohibited and may be unlawful and request you to delete this message and > > any > > attachments and advise the sender by return e-mail. The confidentiality of > > this > > message is not warranted. Apollo Vredestein and its subsidiaries rule out > > any > > and every liability resulting from this or any other electronic > > transmission > > > > > > > > > > > > Please consider the environment before printing this e-mail > > > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: log4j-user-unsubscr...@logging.apache.org > > For additional commands, e-mail: log4j-user-h...@logging.apache.org > > > > Alban Hertroys D: +31 (0)53 4 888 888 | T: +31 (0)53 4888 888 | E: alban.hertr...@apollovredestein.com Apollo Vredestein B.V.| Ir. E.L.C. Schiffstraat 370, 7547 RD Enschede, The Netherlands Chamber of Commerce number: 34223268 The information contained in this e-mail is intended solely for the use of the individual or entity to whom it is addressed. If you are not the intended recipient, you are hereby notified that any disclosure, copying, distribution or action in relation to the contents of this information is strictly prohibited and may be unlawful and request you to delete this message and any attachments and advise the sender by return e-mail. The confidentiality of this message is not warranted. Apollo Vredestein and its subsidiaries rule out any and every liability resulting from this or any other electronic transmission Please consider the environment before printing this e-mail --------------------------------------------------------------------- To unsubscribe, e-mail: log4j-user-unsubscr...@logging.apache.org For additional commands, e-mail: log4j-user-h...@logging.apache.org