The more: https://github.com/apache/logging-log4j2/tree/release-2.x/log4j-core/src/test/resources/org/apache/logging/log4j/core/appender/db/jdbc
Gary On Thu, Dec 12, 2019 at 3:54 PM Gary Gregory <garydgreg...@gmail.com> wrote: > On Thu, Dec 12, 2019 at 9:55 AM Ralph Goers <ralph.go...@dslextreme.com> > wrote: > >> I just looked at the JDBC unit tests and surprisingly didn’t see any that >> use a configuration file. >> > > Here is a 'fancy' example (the kind of stuff I use at work): > > > https://github.com/apache/logging-log4j2/blob/release-2.x/log4j-jdbc-dbcp2/src/test/resources/log4j2-jdbc-dbcp2.xml > > Here are some more: > > ;-) > > Gary > > >> >> 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 >> >>