logging-log4j-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Gary Gregory <garydgreg...@gmail.com>
Subject Re: JDBCAppender fails to pass connection URL string
Date Wed, 11 Dec 2019 21:01:54 GMT
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.

Gary

On Tue, Dec 10, 2019, 06:02 Alban Hertroys <
alban.hertroys@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.hertroys@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-unsubscribe@logging.apache.org
> For additional commands, e-mail: log4j-user-help@logging.apache.org
>
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message