logging-log4j-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Ralph Goers <ralph.go...@dslextreme.com>
Subject Re: JDBCAppender fails to pass connection URL string
Date Thu, 12 Dec 2019 14:55:35 GMT
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 <boards@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.hertroys@apollovredestein.com> wrote:
> 
>> "Gary Gregory" <garydgregory@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.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
>>>> 
>>>> 
>> 
>> 
>> 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
>> 
>> --
> Matt Sicker <boards@gmail.com>



---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-user-unsubscribe@logging.apache.org
For additional commands, e-mail: log4j-user-help@logging.apache.org


Mime
View raw message