You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4j-dev@logging.apache.org by Matt Sicker <bo...@gmail.com> on 2014/08/05 14:47:15 UTC

Re: RE: svn commit: r1615861 - /logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/jdbc/JdbcDatabaseManager.java

It's only on startup of the appender, so I don't think it's too big a deal.
I'm thinking of adding a setting to force enable/disable using batch
queries.


On 5 August 2014 06:40, Gary Gregory <ga...@gmail.com> wrote:

> Curious: is there a perf hit in getting the connection metadata?
>
> Gary
>
>
> -------- Original message --------
> From: mattsicker@apache.org
> Date:08/05/2014 00:35 (GMT-05:00)
> To: commits@logging.apache.org
> Subject: svn commit: r1615861 -
> /logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/jdbc/JdbcDatabaseManager.java
>
>
> Author: mattsicker
> Date: Tue Aug  5 04:35:41 2014
> New Revision: 1615861
>
> URL: http://svn.apache.org/r1615861
> Log:
> Add basic batch update support for JDBC appender.
>
>   - Part of LOG4J2-734
>
> Modified:
>
> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/jdbc/JdbcDatabaseManager.java
>
> Modified:
> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/jdbc/JdbcDatabaseManager.java
> URL:
> http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/jdbc/JdbcDatabaseManager.java?rev=1615861&r1=1615860&r2=1615861&view=diff
>
> ==============================================================================
> ---
> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/jdbc/JdbcDatabaseManager.java
> (original)
> +++
> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/jdbc/JdbcDatabaseManager.java
> Tue Aug  5 04:35:41 2014
> @@ -18,6 +18,7 @@ package org.apache.logging.log4j.core.ap
>
> import java.io.StringReader;
> import java.sql.Connection;
> +import java.sql.DatabaseMetaData;
> import java.sql.PreparedStatement;
> import java.sql.SQLException;
> import java.sql.Timestamp;
> @@ -43,6 +44,7 @@ public final class JdbcDatabaseManager e
>
>      private Connection connection;
>      private PreparedStatement statement;
> +    private boolean isBatchSupported;
>
>      private JdbcDatabaseManager(final String name, final int bufferSize,
> final ConnectionSource connectionSource,
>                                  final String sqlStatement, final
> List<Column> columns) {
> @@ -53,8 +55,11 @@ public final class JdbcDatabaseManager e
>      }
>
>      @Override
> -    protected void startupInternal() {
> -        // nothing to see here
> +    protected void startupInternal() throws Exception {
> +        this.connection = this.connectionSource.getConnection();
> +        final DatabaseMetaData metaData = this.connection.getMetaData();
> +        this.isBatchSupported = metaData.supportsBatchUpdates();
> +        Closer.closeSilently(this.connection);
>      }
>
>      @Override
> @@ -109,7 +114,9 @@ public final class JdbcDatabaseManager e
>                  }
>              }
>
> -            if (this.statement.executeUpdate() == 0) {
> +            if (this.isBatchSupported) {
> +                this.statement.addBatch();
> +            } else if (this.statement.executeUpdate() == 0) {
>                  throw new AppenderLoggingException(
>                          "No records inserted in database table for log
> event in JDBC manager.");
>              }
> @@ -125,6 +132,9 @@ public final class JdbcDatabaseManager e
>      protected void commitAndClose() {
>          try {
>              if (this.connection != null && !this.connection.isClosed()) {
> +                if (this.isBatchSupported) {
> +                    this.statement.executeBatch();
> +                }
>                  this.connection.commit();
>              }
>          } catch (final SQLException e) {
>
>
>


-- 
Matt Sicker <bo...@gmail.com>

Re: RE: svn commit: r1615861 - /logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/jdbc/JdbcDatabaseManager.java

Posted by Matt Sicker <bo...@gmail.com>.
I wrote this a little while ago:

https://github.com/jvz/log4j-jdbc-spring-test

I'm more keen on using the NoSQL appenders for the flexibility in storing
the ThreadContext with the messages, however.


On 5 August 2014 08:42, Remko Popma <re...@gmail.com> wrote:

>
>
> On Tuesday, August 5, 2014, Matt Sicker <bo...@gmail.com> wrote:
>
>> It's only on startup of the appender, so I don't think it's too big a
>> deal. I'm thinking of adding a setting to force enable/disable using batch
>> queries.
>>
>
> That's a good idea. This would be a JDBC Appender option? On by default
> (if the DB supports it), but users can switch it off if it causes issues
> somehow. Sounds good!
>
> Theoretically this should give very nice performance benefits, but I
> haven't used it myself so I can't say. Has anyone ever used this in
> practice?
>
>
>> On 5 August 2014 06:40, Gary Gregory <ga...@gmail.com> wrote:
>>
>>> Curious: is there a perf hit in getting the connection metadata?
>>>
>>> Gary
>>>
>>>
>>> -------- Original message --------
>>> From: mattsicker@apache.org
>>> Date:08/05/2014 00:35 (GMT-05:00)
>>> To: commits@logging.apache.org
>>> Subject: svn commit: r1615861 -
>>> /logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/jdbc/JdbcDatabaseManager.java
>>>
>>>
>>> Author: mattsicker
>>> Date: Tue Aug  5 04:35:41 2014
>>> New Revision: 1615861
>>>
>>> URL: http://svn.apache.org/r1615861
>>> Log:
>>> Add basic batch update support for JDBC appender.
>>>
>>>   - Part of LOG4J2-734
>>>
>>> Modified:
>>>
>>> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/jdbc/JdbcDatabaseManager.java
>>>
>>> Modified:
>>> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/jdbc/JdbcDatabaseManager.java
>>> URL:
>>> http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/jdbc/JdbcDatabaseManager.java?rev=1615861&r1=1615860&r2=1615861&view=diff
>>>
>>> ==============================================================================
>>> ---
>>> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/jdbc/JdbcDatabaseManager.java
>>> (original)
>>> +++
>>> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/jdbc/JdbcDatabaseManager.java
>>> Tue Aug  5 04:35:41 2014
>>> @@ -18,6 +18,7 @@ package org.apache.logging.log4j.core.ap
>>>
>>> import java.io.StringReader;
>>> import java.sql.Connection;
>>> +import java.sql.DatabaseMetaData;
>>> import java.sql.PreparedStatement;
>>> import java.sql.SQLException;
>>> import java.sql.Timestamp;
>>> @@ -43,6 +44,7 @@ public final class JdbcDatabaseManager e
>>>
>>>      private Connection connection;
>>>      private PreparedStatement statement;
>>> +    private boolean isBatchSupported;
>>>
>>>      private JdbcDatabaseManager(final String name, final int
>>> bufferSize, final ConnectionSource connectionSource,
>>>                                  final String sqlStatement, final
>>> List<Column> columns) {
>>> @@ -53,8 +55,11 @@ public final class JdbcDatabaseManager e
>>>      }
>>>
>>>      @Override
>>> -    protected void startupInternal() {
>>> -        // nothing to see here
>>> +    protected void startupInternal() throws Exception {
>>> +        this.connection = this.connectionSource.getConnection();
>>> +        final DatabaseMetaData metaData = this.connection.getMetaData();
>>> +        this.isBatchSupported = metaData.supportsBatchUpdates();
>>> +        Closer.closeSilently(this.connection);
>>>      }
>>>
>>>      @Override
>>> @@ -109,7 +114,9 @@ public final class JdbcDatabaseManager e
>>>                  }
>>>              }
>>>
>>> -            if (this.statement.executeUpdate() == 0) {
>>> +            if (this.isBatchSupported) {
>>> +                this.statement.addBatch();
>>> +            } else if (this.statement.executeUpdate() == 0) {
>>>                  throw new AppenderLoggingException(
>>>                          "No records inserted in database table for log
>>> event in JDBC manager.");
>>>              }
>>> @@ -125,6 +132,9 @@ public final class JdbcDatabaseManager e
>>>      protected void commitAndClose() {
>>>          try {
>>>              if (this.connection != null && !this.connection.isClosed())
>>> {
>>> +                if (this.isBatchSupported) {
>>> +                    this.statement.executeBatch();
>>> +                }
>>>                  this.connection.commit();
>>>              }
>>>          } catch (final SQLException e) {
>>>
>>>
>>>
>>
>>
>> --
>> Matt Sicker <bo...@gmail.com>
>>
>


-- 
Matt Sicker <bo...@gmail.com>

Re: RE: svn commit: r1615861 - /logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/jdbc/JdbcDatabaseManager.java

Posted by Remko Popma <re...@gmail.com>.
On Tuesday, August 5, 2014, Matt Sicker <bo...@gmail.com> wrote:

> It's only on startup of the appender, so I don't think it's too big a
> deal. I'm thinking of adding a setting to force enable/disable using batch
> queries.
>

That's a good idea. This would be a JDBC Appender option? On by default (if
the DB supports it), but users can switch it off if it causes issues
somehow. Sounds good!

Theoretically this should give very nice performance benefits, but I
haven't used
it myself so I can't say. Has anyone ever used this in practice?


> On 5 August 2014 06:40, Gary Gregory <garydgregory@gmail.com
> <javascript:_e(%7B%7D,'cvml','garydgregory@gmail.com');>> wrote:
>
>> Curious: is there a perf hit in getting the connection metadata?
>>
>> Gary
>>
>>
>> -------- Original message --------
>> From: mattsicker@apache.org
>> <javascript:_e(%7B%7D,'cvml','mattsicker@apache.org');>
>> Date:08/05/2014 00:35 (GMT-05:00)
>> To: commits@logging.apache.org
>> <javascript:_e(%7B%7D,'cvml','commits@logging.apache.org');>
>> Subject: svn commit: r1615861 -
>> /logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/jdbc/JdbcDatabaseManager.java
>>
>>
>> Author: mattsicker
>> Date: Tue Aug  5 04:35:41 2014
>> New Revision: 1615861
>>
>> URL: http://svn.apache.org/r1615861
>> Log:
>> Add basic batch update support for JDBC appender.
>>
>>   - Part of LOG4J2-734
>>
>> Modified:
>>
>> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/jdbc/JdbcDatabaseManager.java
>>
>> Modified:
>> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/jdbc/JdbcDatabaseManager.java
>> URL:
>> http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/jdbc/JdbcDatabaseManager.java?rev=1615861&r1=1615860&r2=1615861&view=diff
>>
>> ==============================================================================
>> ---
>> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/jdbc/JdbcDatabaseManager.java
>> (original)
>> +++
>> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/jdbc/JdbcDatabaseManager.java
>> Tue Aug  5 04:35:41 2014
>> @@ -18,6 +18,7 @@ package org.apache.logging.log4j.core.ap
>>
>> import java.io.StringReader;
>> import java.sql.Connection;
>> +import java.sql.DatabaseMetaData;
>> import java.sql.PreparedStatement;
>> import java.sql.SQLException;
>> import java.sql.Timestamp;
>> @@ -43,6 +44,7 @@ public final class JdbcDatabaseManager e
>>
>>      private Connection connection;
>>      private PreparedStatement statement;
>> +    private boolean isBatchSupported;
>>
>>      private JdbcDatabaseManager(final String name, final int bufferSize,
>> final ConnectionSource connectionSource,
>>                                  final String sqlStatement, final
>> List<Column> columns) {
>> @@ -53,8 +55,11 @@ public final class JdbcDatabaseManager e
>>      }
>>
>>      @Override
>> -    protected void startupInternal() {
>> -        // nothing to see here
>> +    protected void startupInternal() throws Exception {
>> +        this.connection = this.connectionSource.getConnection();
>> +        final DatabaseMetaData metaData = this.connection.getMetaData();
>> +        this.isBatchSupported = metaData.supportsBatchUpdates();
>> +        Closer.closeSilently(this.connection);
>>      }
>>
>>      @Override
>> @@ -109,7 +114,9 @@ public final class JdbcDatabaseManager e
>>                  }
>>              }
>>
>> -            if (this.statement.executeUpdate() == 0) {
>> +            if (this.isBatchSupported) {
>> +                this.statement.addBatch();
>> +            } else if (this.statement.executeUpdate() == 0) {
>>                  throw new AppenderLoggingException(
>>                          "No records inserted in database table for log
>> event in JDBC manager.");
>>              }
>> @@ -125,6 +132,9 @@ public final class JdbcDatabaseManager e
>>      protected void commitAndClose() {
>>          try {
>>              if (this.connection != null && !this.connection.isClosed()) {
>> +                if (this.isBatchSupported) {
>> +                    this.statement.executeBatch();
>> +                }
>>                  this.connection.commit();
>>              }
>>          } catch (final SQLException e) {
>>
>>
>>
>
>
> --
> Matt Sicker <boards@gmail.com
> <javascript:_e(%7B%7D,'cvml','boards@gmail.com');>>
>