I just looked at the JDBC unit tests and surprisingly didn’t see any that use a configuration file.
Ralph > On Dec 12, 2019, at 7:54 AM, Matt Sicker <boa...@gmail.com> wrote: > > 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> --------------------------------------------------------------------- To unsubscribe, e-mail: log4j-user-unsubscr...@logging.apache.org For additional commands, e-mail: log4j-user-h...@logging.apache.org