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 15:00:02 GMT
http://logging.apache.org/log4j/2.x/manual/appenders.html#JDBCAppender <http://logging.apache.org/log4j/2.x/manual/appenders.html#JDBCAppender>
does have sample configurations but there is not one with the configuration I would expect
to use where you can specify the driver class, user name and password.

Ralph

> On Dec 12, 2019, at 7:55 AM, Ralph Goers <ralph.goers@dslextreme.com> wrote:
> 
> 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
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message