Hi everyone,


For our Solr instance I have the requirement that all queries should be logged, 
so that we can later on analyze, which search texts were queried most often.

Were using solr 8.3.1 using the official docker image, hosted on Azure.

My approach for implementing this, was now to configure a Slow Request rule of 
0ms, so that in fact every request is logged to the slow requests file.

This part works without any issues.



However now I need to process these logs.

It would be convenient, if I had those logs already inside a SQL database.

I saw that log4j2 is able to log to a JDBC database, so for me it seemed the 
easiest way to just add a new appender for JDBC, which also logs the slow 
requests.

Unfortunately I can't seem to get the JDBC driver loaded properly. I have the 
correct jar and the correct driver namespace. I'm sure because I use the same 
setup for the dataimport handler and it works flawlessly.



My log4j2.xml looks like this (removed non-relevant appenders):



<Configuration>

  <Appenders>

    <JDBC name="databaseAppender" tableName="dbo.solr_requestlog">

      <DriverManager 
connectionString="${jvmrunargs:dataimporter.datasource.url}"

        driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"

        username="${jvmrunargs:dataimporter.datasource.user}"

        password="${jvmrunargs:dataimporter.datasource.password}"

      />

      <Column name="date" isEventTimestamp="true" />

      <Column name="id" pattern="%u{RANDOM}" />

      <Column name="logLevel" pattern="%level" />

      <Column name="logger" pattern="%logger" />

      <Column name="message" pattern="%message" />

      <Column name="exception" pattern="%ex{full}" />

    </JDBC>

  </Appenders>

  <Loggers>

    <AsyncLogger name="org.apache.solr.core.SolrCore.SlowRequest" level="info" 
additivity="false">

      <AppenderRef ref="databaseAppender"/>

    </AsyncLogger>

  </Loggers>

</Configuration>



I have loaded the JDBC driver per core in solrconfig.xml and also "globally" 
inside solr.xml by adding its containing folder as libDir.

Unforunately log4j2 still can't find the JDBC driver, I always receive these 
issues inside the sysout log:



2020-05-25T10:49:08.616562330Z DEBUG StatusLogger Acquiring JDBC connection 
from jdbc:sqlserver://--redacted--

2020-05-25T10:49:08.618023875Z DEBUG StatusLogger Loading driver class 
com.microsoft.sqlserver.jdbc.SQLServerDriver

2020-05-25T10:49:08.623000529Z DEBUG StatusLogger Cannot reestablish JDBC 
connection to FactoryData [connectionSource=jdbc:sqlserver://--redacted--, 
tableName=dbo.solr_requestlog, columnConfigs=[{ name=date, layout=null, 
literal=null, timestamp=true }, { name=id, layout=%u{RANDOM}, literal=null, 
timestamp=false }, { name=logLevel, layout=%level, literal=null, 
timestamp=false }, { name=logger, layout=%logger, literal=null, timestamp=false 
}, { name=message, layout=%message, literal=null, timestamp=false }, { 
name=exception, layout=%ex{full}, literal=null, timestamp=false }], 
columnMappings=[], immediateFail=false, retry=true, 
reconnectIntervalMillis=5000, truncateStrings=true]: The 
DriverManagerConnectionSource could not load the JDBC driver 
com.microsoft.sqlserver.jdbc.SQLServerDriver: java.lang.ClassNotFoundException: 
com.microsoft.sqlserver.jdbc.SQLServerDriver

2020-05-25T10:49:08.627598771Z  java.sql.SQLException: The 
DriverManagerConnectionSource could not load the JDBC driver 
com.microsoft.sqlserver.jdbc.SQLServerDriver: java.lang.ClassNotFoundException: 
com.microsoft.sqlserver.jdbc.SQLServerDriver

2020-05-25T10:49:08.628239791Z          at 
org.apache.logging.log4j.core.appender.db.jdbc.AbstractDriverManagerConnectionSource.loadDriver(AbstractDriverManagerConnectionSource.java:203)

2020-05-25T10:49:08.628442097Z          at 
org.apache.logging.log4j.core.appender.db.jdbc.AbstractDriverManagerConnectionSource.loadDriver(AbstractDriverManagerConnectionSource.java:185)

2020-05-25T10:49:08.628637603Z          at 
org.apache.logging.log4j.core.appender.db.jdbc.AbstractDriverManagerConnectionSource.getConnection(AbstractDriverManagerConnectionSource.java:147)

2020-05-25T10:49:08.628921112Z          at 
org.apache.logging.log4j.core.appender.db.jdbc.JdbcDatabaseManager.connectAndPrepare(JdbcDatabaseManager.java:567)

2020-05-25T10:49:08.629127918Z          at 
org.apache.logging.log4j.core.appender.db.jdbc.JdbcDatabaseManager.access$800(JdbcDatabaseManager.java:62)

2020-05-25T10:49:08.629311024Z          at 
org.apache.logging.log4j.core.appender.db.jdbc.JdbcDatabaseManager$Reconnector.reconnect(JdbcDatabaseManager.java:174)

2020-05-25T10:49:08.629620834Z          at 
org.apache.logging.log4j.core.appender.db.jdbc.JdbcDatabaseManager$Reconnector.run(JdbcDatabaseManager.java:185)

2020-05-25T10:49:08.629944544Z Caused by: java.lang.ClassNotFoundException: 
com.microsoft.sqlserver.jdbc.SQLServerDriver

2020-05-25T10:49:08.630181051Z          at 
java.base/java.net.URLClassLoader.findClass(Unknown Source)

2020-05-25T10:49:08.630374057Z          at 
java.base/java.lang.ClassLoader.loadClass(Unknown Source)

2020-05-25T10:49:08.630666266Z          at 
java.base/java.lang.ClassLoader.loadClass(Unknown Source)

2020-05-25T10:49:08.630893073Z          at 
java.base/java.lang.Class.forName0(Native Method)

2020-05-25T10:49:08.631085879Z          at 
java.base/java.lang.Class.forName(Unknown Source)

2020-05-25T10:49:08.631652596Z          at 
org.apache.logging.log4j.core.appender.db.jdbc.AbstractDriverManagerConnectionSource.loadDriver(AbstractDriverManagerConnectionSource.java:201)

2020-05-25T10:49:08.631852802Z          ... 6 more



Is anyone of you able to point me to the right direction on how I need to load 
the JDBC driver for log4j2 to grab it up properly?



Thanks a lot in advance.



Kind Regards,

Florian Krönert
Senior Software Developer

<https://www.orbis.de/de.html>

ORBIS AG | Planckstraße 10 | D-88677 Markdorf

Phone: +49 7544 50398 21 | Mobile: +49 162 3065972 | E-Mail: 
florian.kroen...@orbis.de<mailto:florian.kroen...@orbis.de>
www.orbis.de<http://www.orbis.de/>


<https://www.orbis.de/de/sap-by-orbis.html>

Registered Seat: Saarbrücken
Commercial Register Court: Amtsgericht Saarbrücken, HRB 12022
Board of Management: Thomas Gard (Chairman), Michael Jung, Stefan Mailänder, 
Frank Schmelzer
Chairman of the Supervisory Board: Ulrich Holzer

<https://www.facebook.com/ORBIS.AG>   
<https://www.linkedin.com/company/orbis-ag/>    
<https://www.xing.com/companies/orbisag>    <https://twitter.com/ORBIS_AG>    
<https://www.youtube.com/channel/UC5Fx5UsUy4FkzB0dfCWXwYw/featured>



<https://www.orbis.de/de/aktuelles/news/aktuelle-presse/news-detail/article/inner-circle-award-orbis-zaehlt-erneut-zu-den-weltbesten-partnern-fuer-microsoft-business-application.html>



Reply via email to