Unit tests in the log4j project. All our components have examples in unit tests.
On Thu, Dec 12, 2019 at 04:26 Alban Hertroys < alban.hertr...@apollovredestein.com> wrote: > "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 > > -- Matt Sicker <boa...@gmail.com>