-
- Notifications
You must be signed in to change notification settings - Fork 1.7k
Description
Description
When using the JdbcAppender with the bufferSize property, the MySQL JDBC driver, and the ColumnConfig's isClob property set to true, a java.io.IOException: Stream closed occurs. This issue does not happen when isClob is set to false or when using the MySQL JDBC driver with isClob set to true without the bufferSize property. Additionally, it does not occur with other JDBC drivers (such as Oracle or PostgreSQL) when using the bufferSize property and isClob set to true.
Upon analysis, when configuring the JdbcAppender with the bufferSize property and isClob set to true, the JdbcDatabaseManager.writeInternal() method sets a StringReader instance to the PreparedStatement using the setClob() API. If the current buffer size does not reach the limit, it calls statement.addBatch(), and if the buffer size reaches the limit, it calls statement.executeUpdate().
The StringReader object is closed at the end (in the "finally" block), regardless of whether the buffer is full or not. This raises a potential issue.
The ClientPreparedStatement (from the MySQL driver) uses the StringReader instance passed as an argument. In contrast, other drivers like Oracle create a new StringReader instance, so they do not share the instance. Therefore, if the JdbcDatabaseAppender closes the StringReader in the "finally" block, the StringReader is closed before statement.executeUpdate() is called, resulting in the IOException: Stream closed.
I am wondering if there is any reason that the Log4j2 JdbcDatabaseManager closes the StringReader in the "finally" block, or if this is simply a bug.
log4j2.xml
<?xml version="1.0" encoding="UTF-8"?> <Configuration status="error"> <Appenders> <JDBC name="databaseAppender" tableName="logging_event"> <bufferSize>10</bufferSize> <DriverManager userName="root" password="1234" connectionString = "jdbc:mysql://localhost:3306/logging_test" driverClassName="com.mysql.jdbc.Driver" /> <Column name="log_event_date" pattern="%d" /> <Column name="logger_name" pattern="%c" /> <Column name="log_level" pattern="%p"/> <Column name="thread_name" pattern="%t"/> <Column name="message" pattern="%message" isClob="true"/> </JDBC> </Appenders> <Loggers> <Root level="info"> <AppenderRef ref="databaseAppender"/> </Root> </Loggers> </Configuration> Configuration
**Version: 2.17.1
**Operating system: any
**JDK: 1.8
Logs
"C:\Program Files\Java\java-1.8.0-openjdk-1.8\bin\java.exe" -Dvisualvm.id=1582776983231300 -XX:TieredStopAtLevel=1 -noverify -Dspring.output.ansi.enabled=always -Dcom.sun.management.jmxremote -Dspring.jmx.enabled=true -Dspring.liveBeansView.mbeanDomain -Dspring.application.admin.enabled=true "-Dmanagement.endpoints.jmx.exposure.include=*" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2023.1\lib\idea_rt.jar=59652:C:\Program Files\JetBrains\IntelliJ IDEA 2023.1\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\java-1.8.0-openjdk-1.8\jre\lib\charsets.jar;C:\Program Files\Java\java-1.8.0-openjdk-1.8\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\java-1.8.0-openjdk-1.8\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\java-1.8.0-openjdk-1.8\jre\lib\ext\dnsns.jar;C:\Program Files\Java\java-1.8.0-openjdk-1.8\jre\lib\ext\jaccess.jar;C:\Program Files\Java\java-1.8.0-openjdk-1.8\jre\lib\ext\localedata.jar;C:\Program Files\Java\java-1.8.0-openjdk-1.8\jre\lib\ext\nashorn.jar;C:\Program Files\Java\java-1.8.0-openjdk-1.8\jre\lib\ext\sunec.jar;C:\Program Files\Java\java-1.8.0-openjdk-1.8\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\java-1.8.0-openjdk-1.8\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\java-1.8.0-openjdk-1.8\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\java-1.8.0-openjdk-1.8\jre\lib\ext\zipfs.jar;C:\Program Files\Java\java-1.8.0-openjdk-1.8\jre\lib\jce.jar;C:\Program Files\Java\java-1.8.0-openjdk-1.8\jre\lib\jfr.jar;C:\Program Files\Java\java-1.8.0-openjdk-1.8\jre\lib\jsse.jar;C:\Program Files\Java\java-1.8.0-openjdk-1.8\jre\lib\management-agent.jar;C:\Program Files\Java\java-1.8.0-openjdk-1.8\jre\lib\resources.jar;C:\Program Files\Java\java-1.8.0-openjdk-1.8\jre\lib\rt.jar;C:\Users\Tmax\Desktop\tttttttttt\target\classes;C:\Users\Tmax\.m2\repository\org\springframework\boot\spring-boot-starter\2.4.5\spring-boot-starter-2.4.5.jar;C:\Users\Tmax\.m2\repository\org\springframework\boot\spring-boot\2.4.5\spring-boot-2.4.5.jar;C:\Users\Tmax\.m2\repository\org\springframework\spring-context\5.3.6\spring-context-5.3.6.jar;C:\Users\Tmax\.m2\repository\org\springframework\boot\spring-boot-autoconfigure\2.4.5\spring-boot-autoconfigure-2.4.5.jar;C:\Users\Tmax\.m2\repository\jakarta\annotation\jakarta.annotation-api\1.3.5\jakarta.annotation-api-1.3.5.jar;C:\Users\Tmax\.m2\repository\org\springframework\spring-core\5.3.6\spring-core-5.3.6.jar;C:\Users\Tmax\.m2\repository\org\springframework\spring-jcl\5.3.6\spring-jcl-5.3.6.jar;C:\Users\Tmax\.m2\repository\org\yaml\snakeyaml\1.27\snakeyaml-1.27.jar;C:\Users\Tmax\.m2\repository\org\projectlombok\lombok\1.18.30\lombok-1.18.30.jar;C:\Users\Tmax\.m2\repository\org\springframework\boot\spring-boot-starter-web\2.4.5\spring-boot-starter-web-2.4.5.jar;C:\Users\Tmax\.m2\repository\org\springframework\boot\spring-boot-starter-json\2.4.5\spring-boot-starter-json-2.4.5.jar;C:\Users\Tmax\.m2\repository\com\fasterxml\jackson\core\jackson-databind\2.11.4\jackson-databind-2.11.4.jar;C:\Users\Tmax\.m2\repository\com\fasterxml\jackson\core\jackson-annotations\2.11.4\jackson-annotations-2.11.4.jar;C:\Users\Tmax\.m2\repository\com\fasterxml\jackson\core\jackson-core\2.11.4\jackson-core-2.11.4.jar;C:\Users\Tmax\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.11.4\jackson-datatype-jdk8-2.11.4.jar;C:\Users\Tmax\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.11.4\jackson-datatype-jsr310-2.11.4.jar;C:\Users\Tmax\.m2\repository\com\fasterxml\jackson\module\jackson-module-parameter-names\2.11.4\jackson-module-parameter-names-2.11.4.jar;C:\Users\Tmax\.m2\repository\org\springframework\boot\spring-boot-starter-tomcat\2.4.5\spring-boot-starter-tomcat-2.4.5.jar;C:\Users\Tmax\.m2\repository\org\apache\tomcat\embed\tomcat-embed-core\9.0.45\tomcat-embed-core-9.0.45.jar;C:\Users\Tmax\.m2\repository\org\glassfish\jakarta.el\3.0.3\jakarta.el-3.0.3.jar;C:\Users\Tmax\.m2\repository\org\apache\tomcat\embed\tomcat-embed-websocket\9.0.45\tomcat-embed-websocket-9.0.45.jar;C:\Users\Tmax\.m2\repository\org\springframework\spring-web\5.3.6\spring-web-5.3.6.jar;C:\Users\Tmax\.m2\repository\org\springframework\spring-beans\5.3.6\spring-beans-5.3.6.jar;C:\Users\Tmax\.m2\repository\org\springframework\spring-webmvc\5.3.6\spring-webmvc-5.3.6.jar;C:\Users\Tmax\.m2\repository\org\springframework\spring-aop\5.3.6\spring-aop-5.3.6.jar;C:\Users\Tmax\.m2\repository\org\springframework\spring-expression\5.3.6\spring-expression-5.3.6.jar;C:\Users\Tmax\.m2\repository\org\springframework\boot\spring-boot-starter-log4j2\2.4.5\spring-boot-starter-log4j2-2.4.5.jar;C:\Users\Tmax\.m2\repository\org\apache\logging\log4j\log4j-slf4j-impl\2.13.3\log4j-slf4j-impl-2.13.3.jar;C:\Users\Tmax\.m2\repository\org\slf4j\slf4j-api\1.7.30\slf4j-api-1.7.30.jar;C:\Users\Tmax\.m2\repository\org\apache\logging\log4j\log4j-api\2.13.3\log4j-api-2.13.3.jar;C:\Users\Tmax\.m2\repository\org\apache\logging\log4j\log4j-core\2.13.3\log4j-core-2.13.3.jar;C:\Users\Tmax\.m2\repository\org\apache\logging\log4j\log4j-jul\2.13.3\log4j-jul-2.13.3.jar;C:\Users\Tmax\.m2\repository\org\slf4j\jul-to-slf4j\1.7.30\jul-to-slf4j-1.7.30.jar;C:\Users\Tmax\.m2\repository\mysql\mysql-connector-java\8.0.30\mysql-connector-java-8.0.30.jar;C:\Users\Tmax\.m2\repository\com\oracle\database\jdbc\ojdbc6\11.2.0.4\ojdbc6-11.2.0.4.jar;C:\Users\Tmax\.m2\repository\com\oracle\database\jdbc\ucp\19.8.0.0\ucp-19.8.0.0.jar;C:\Users\Tmax\.m2\repository\com\oracle\database\security\oraclepki\19.8.0.0\oraclepki-19.8.0.0.jar;C:\Users\Tmax\.m2\repository\com\oracle\database\security\osdt_cert\19.8.0.0\osdt_cert-19.8.0.0.jar;C:\Users\Tmax\.m2\repository\com\oracle\database\security\osdt_core\19.8.0.0\osdt_core-19.8.0.0.jar;C:\Users\Tmax\.m2\repository\com\oracle\database\ha\simplefan\19.8.0.0\simplefan-19.8.0.0.jar;C:\Users\Tmax\.m2\repository\com\oracle\database\ha\ons\19.8.0.0\ons-19.8.0.0.jar;C:\Users\Tmax\.m2\repository\org\postgresql\postgresql\42.7.4\postgresql-42.7.4.jar;C:\Users\Tmax\.m2\repository\org\checkerframework\checker-qual\3.42.0\checker-qual-3.42.0.jar" org.example.MainApplication . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.4.5) Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary. 2024-10-28 09:25:14,975 main ERROR Unable to write to database [JdbcManager{name=databaseAppender, bufferSize=10, tableName=logging_event, columnConfigs=[{ name=log_event_date, layout=%d, literal=null, timestamp=false }, { name=logger_name, layout=%c, literal=null, timestamp=false }, { name=log_level, layout=%p, literal=null, timestamp=false }, { name=thread_name, layout=%t, literal=null, timestamp=false }, { name=message, layout=%message, literal=null, timestamp=false }], columnMappings=[]}] for appender [databaseAppender]. org.apache.logging.log4j.core.appender.db.DbAppenderLoggingException: Failed to commit transaction logging event or flushing buffer [columnConfigs=[{ name=log_event_date, layout=%d, literal=null, timestamp=false }, { name=logger_name, layout=%c, literal=null, timestamp=false }, { name=log_level, layout=%p, literal=null, timestamp=false }, { name=thread_name, layout=%t, literal=null, timestamp=false }, { name=message, layout=%message, literal=null, timestamp=false }], sqlStatement=insert into logging_event (log_event_date,logger_name,log_level,thread_name,message) values (?,?,?,?,?), factoryData=FactoryData [connectionSource=jdbc:mysql://192.168.15.233:3306/logging_test, tableName=logging_event, columnConfigs=[{ name=log_event_date, layout=%d, literal=null, timestamp=false }, { name=logger_name, layout=%c, literal=null, timestamp=false }, { name=log_level, layout=%p, literal=null, timestamp=false }, { name=thread_name, layout=%t, literal=null, timestamp=false }, { name=message, layout=%message, literal=null, timestamp=false }], columnMappings=[], immediateFail=false, retry=true, reconnectIntervalMillis=5000, truncateStrings=true], connection=com.mysql.cj.jdbc.ConnectionImpl@5176d279, statement=com.mysql.cj.jdbc.ClientPreparedStatement: insert into logging_event (log_event_date,logger_name,log_level,thread_name,message) values (** NOT SPECIFIED **,** NOT SPECIFIED **,** NOT SPECIFIED **,** NOT SPECIFIED **,** NOT SPECIFIED **), reconnector=null, isBatchSupported=true, columnMetaData={MESSAGE=ColumnMetaData [schemaName=, catalogName=logging_test, tableName=logging_event, name=message, nameKey=MESSAGE, label=message, displaySize=536870911, type=-1, typeName=LONGTEXT, className=java.lang.String, precision=536870911, scale=0, isStringType=true], THREAD_NAME=ColumnMetaData [schemaName=, catalogName=logging_test, tableName=logging_event, name=thread_name, nameKey=THREAD_NAME, label=thread_name, displaySize=254, type=12, typeName=VARCHAR, className=java.lang.String, precision=254, scale=0, isStringType=true], LOG_EVENT_DATE=ColumnMetaData [schemaName=, catalogName=logging_test, tableName=logging_event, name=log_event_date, nameKey=LOG_EVENT_DATE, label=log_event_date, displaySize=254, type=12, typeName=VARCHAR, className=java.lang.String, precision=254, scale=0, isStringType=true], LOGGER_NAME=ColumnMetaData [schemaName=, catalogName=logging_test, tableName=logging_event, name=logger_name, nameKey=LOGGER_NAME, label=logger_name, displaySize=254, type=12, typeName=VARCHAR, className=java.lang.String, precision=254, scale=0, isStringType=true], LOG_LEVEL=ColumnMetaData [schemaName=, catalogName=logging_test, tableName=logging_event, name=log_level, nameKey=LOG_LEVEL, label=log_level, displaySize=254, type=12, typeName=VARCHAR, className=java.lang.String, precision=254, scale=0, isStringType=true]}] at org.apache.logging.log4j.core.appender.db.jdbc.JdbcDatabaseManager.commitAndClose(JdbcDatabaseManager.java:565) at org.apache.logging.log4j.core.appender.db.AbstractDatabaseManager.flush(AbstractDatabaseManager.java:158) at org.apache.logging.log4j.core.appender.db.AbstractDatabaseManager.buffer(AbstractDatabaseManager.java:125) at org.apache.logging.log4j.core.appender.db.AbstractDatabaseManager.write(AbstractDatabaseManager.java:262) at org.apache.logging.log4j.core.appender.db.AbstractDatabaseAppender.append(AbstractDatabaseAppender.java:110) at org.apache.logging.log4j.core.config.AppenderControl.tryCallAppender(AppenderControl.java:156) at org.apache.logging.log4j.core.config.AppenderControl.callAppender0(AppenderControl.java:129) at org.apache.logging.log4j.core.config.AppenderControl.callAppenderPreventRecursion(AppenderControl.java:120) at org.apache.logging.log4j.core.config.AppenderControl.callAppender(AppenderControl.java:84) at org.apache.logging.log4j.core.config.LoggerConfig.callAppenders(LoggerConfig.java:543) at org.apache.logging.log4j.core.config.LoggerConfig.processLogEvent(LoggerConfig.java:502) at org.apache.logging.log4j.core.config.LoggerConfig.log(LoggerConfig.java:485) at org.apache.logging.log4j.core.config.LoggerConfig.log(LoggerConfig.java:412) at org.apache.logging.log4j.core.config.AwaitCompletionReliabilityStrategy.log(AwaitCompletionReliabilityStrategy.java:63) at org.apache.logging.log4j.core.Logger.logMessage(Logger.java:153) at org.apache.logging.slf4j.Log4jLogger.log(Log4jLogger.java:376) at org.slf4j.bridge.SLF4JBridgeHandler.callLocationAwareLogger(SLF4JBridgeHandler.java:221) at org.slf4j.bridge.SLF4JBridgeHandler.publish(SLF4JBridgeHandler.java:303) at java.util.logging.Logger.log(Logger.java:738) at java.util.logging.Logger.doLog(Logger.java:765) at java.util.logging.Logger.logp(Logger.java:931) at org.apache.juli.logging.DirectJDKLog.log(DirectJDKLog.java:173) at org.apache.juli.logging.DirectJDKLog.info(DirectJDKLog.java:116) at org.apache.coyote.AbstractProtocol.start(AbstractProtocol.java:610) at org.apache.catalina.connector.Connector.startInternal(Connector.java:1071) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) at org.apache.catalina.core.StandardService.addConnector(StandardService.java:239) at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.addPreviouslyRemovedConnectors(TomcatWebServer.java:282) at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.start(TomcatWebServer.java:213) at org.springframework.boot.web.servlet.context.WebServerStartStopLifecycle.start(WebServerStartStopLifecycle.java:43) at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:178) at org.springframework.context.support.DefaultLifecycleProcessor.access$200(DefaultLifecycleProcessor.java:54) at org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.start(DefaultLifecycleProcessor.java:356) at java.lang.Iterable.forEach(Iterable.java:75) at org.springframework.context.support.DefaultLifecycleProcessor.startBeans(DefaultLifecycleProcessor.java:155) at org.springframework.context.support.DefaultLifecycleProcessor.onRefresh(DefaultLifecycleProcessor.java:123) at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:935) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:586) at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:144) at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:782) at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:774) at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:439) at org.springframework.boot.SpringApplication.run(SpringApplication.java:339) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1340) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1329) at org.example.MainApplication.main(MainApplication.java:9) Caused by: java.sql.BatchUpdateException: java.io.IOException: Stream closed at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at com.mysql.cj.util.Util.handleNewInstance(Util.java:192) at com.mysql.cj.util.Util.getInstance(Util.java:167) at com.mysql.cj.util.Util.getInstance(Util.java:174) at com.mysql.cj.jdbc.exceptions.SQLError.createBatchUpdateException(SQLError.java:224) at com.mysql.cj.jdbc.ClientPreparedStatement.executeBatchSerially(ClientPreparedStatement.java:816) at com.mysql.cj.jdbc.ClientPreparedStatement.executeBatchInternal(ClientPreparedStatement.java:418) at com.mysql.cj.jdbc.StatementImpl.executeBatch(StatementImpl.java:795) at org.apache.logging.log4j.core.appender.db.jdbc.JdbcDatabaseManager.commitAndClose(JdbcDatabaseManager.java:553) ... 45 more Caused by: java.sql.SQLException: java.io.IOException: Stream closed at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129) at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1084) at com.mysql.cj.jdbc.ClientPreparedStatement.executeBatchSerially(ClientPreparedStatement.java:795) ... 48 more Caused by: java.io.IOException: Stream closed at java.io.StringReader.ensureOpen(StringReader.java:56) at java.io.StringReader.read(StringReader.java:90) at java.io.Reader.read(Reader.java:140) at com.mysql.cj.protocol.a.ReaderValueEncoder.readBytes(ReaderValueEncoder.java:79) at com.mysql.cj.protocol.a.ReaderValueEncoder.getBytes(ReaderValueEncoder.java:49) at com.mysql.cj.protocol.a.AbstractValueEncoder.encodeAsText(AbstractValueEncoder.java:92) at com.mysql.cj.NativeQueryBindValue.writeAsText(NativeQueryBindValue.java:383) at com.mysql.cj.protocol.a.NativeMessageBuilder.buildComQuery(NativeMessageBuilder.java:175) at com.mysql.cj.protocol.a.NativeMessageBuilder.buildComQuery(NativeMessageBuilder.java:51) at com.mysql.cj.ClientPreparedQuery.fillSendPacket(ClientPreparedQuery.java:222) at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1047) ... 49 more 2024-10-28 09:25:14,977 main ERROR An exception occurred processing Appender databaseAppender org.apache.logging.log4j.core.appender.db.DbAppenderLoggingException: Failed to commit transaction logging event or flushing buffer [columnConfigs=[{ name=log_event_date, layout=%d, literal=null, timestamp=false }, { name=logger_name, layout=%c, literal=null, timestamp=false }, { name=log_level, layout=%p, literal=null, timestamp=false }, { name=thread_name, layout=%t, literal=null, timestamp=false }, { name=message, layout=%message, literal=null, timestamp=false }], sqlStatement=insert into logging_event (log_event_date,logger_name,log_level,thread_name,message) values (?,?,?,?,?), factoryData=FactoryData [connectionSource=jdbc:mysql://192.168.15.233:3306/logging_test, tableName=logging_event, columnConfigs=[{ name=log_event_date, layout=%d, literal=null, timestamp=false }, { name=logger_name, layout=%c, literal=null, timestamp=false }, { name=log_level, layout=%p, literal=null, timestamp=false }, { name=thread_name, layout=%t, literal=null, timestamp=false }, { name=message, layout=%message, literal=null, timestamp=false }], columnMappings=[], immediateFail=false, retry=true, reconnectIntervalMillis=5000, truncateStrings=true], connection=com.mysql.cj.jdbc.ConnectionImpl@5176d279, statement=com.mysql.cj.jdbc.ClientPreparedStatement: insert into logging_event (log_event_date,logger_name,log_level,thread_name,message) values (** NOT SPECIFIED **,** NOT SPECIFIED **,** NOT SPECIFIED **,** NOT SPECIFIED **,** NOT SPECIFIED **), reconnector=null, isBatchSupported=true, columnMetaData={MESSAGE=ColumnMetaData [schemaName=, catalogName=logging_test, tableName=logging_event, name=message, nameKey=MESSAGE, label=message, displaySize=536870911, type=-1, typeName=LONGTEXT, className=java.lang.String, precision=536870911, scale=0, isStringType=true], THREAD_NAME=ColumnMetaData [schemaName=, catalogName=logging_test, tableName=logging_event, name=thread_name, nameKey=THREAD_NAME, label=thread_name, displaySize=254, type=12, typeName=VARCHAR, className=java.lang.String, precision=254, scale=0, isStringType=true], LOG_EVENT_DATE=ColumnMetaData [schemaName=, catalogName=logging_test, tableName=logging_event, name=log_event_date, nameKey=LOG_EVENT_DATE, label=log_event_date, displaySize=254, type=12, typeName=VARCHAR, className=java.lang.String, precision=254, scale=0, isStringType=true], LOGGER_NAME=ColumnMetaData [schemaName=, catalogName=logging_test, tableName=logging_event, name=logger_name, nameKey=LOGGER_NAME, label=logger_name, displaySize=254, type=12, typeName=VARCHAR, className=java.lang.String, precision=254, scale=0, isStringType=true], LOG_LEVEL=ColumnMetaData [schemaName=, catalogName=logging_test, tableName=logging_event, name=log_level, nameKey=LOG_LEVEL, label=log_level, displaySize=254, type=12, typeName=VARCHAR, className=java.lang.String, precision=254, scale=0, isStringType=true]}] at org.apache.logging.log4j.core.appender.db.jdbc.JdbcDatabaseManager.commitAndClose(JdbcDatabaseManager.java:565) at org.apache.logging.log4j.core.appender.db.AbstractDatabaseManager.flush(AbstractDatabaseManager.java:158) at org.apache.logging.log4j.core.appender.db.AbstractDatabaseManager.buffer(AbstractDatabaseManager.java:125) at org.apache.logging.log4j.core.appender.db.AbstractDatabaseManager.write(AbstractDatabaseManager.java:262) at org.apache.logging.log4j.core.appender.db.AbstractDatabaseAppender.append(AbstractDatabaseAppender.java:110) at org.apache.logging.log4j.core.config.AppenderControl.tryCallAppender(AppenderControl.java:156) at org.apache.logging.log4j.core.config.AppenderControl.callAppender0(AppenderControl.java:129) at org.apache.logging.log4j.core.config.AppenderControl.callAppenderPreventRecursion(AppenderControl.java:120) at org.apache.logging.log4j.core.config.AppenderControl.callAppender(AppenderControl.java:84) at org.apache.logging.log4j.core.config.LoggerConfig.callAppenders(LoggerConfig.java:543) at org.apache.logging.log4j.core.config.LoggerConfig.processLogEvent(LoggerConfig.java:502) at org.apache.logging.log4j.core.config.LoggerConfig.log(LoggerConfig.java:485) at org.apache.logging.log4j.core.config.LoggerConfig.log(LoggerConfig.java:412) at org.apache.logging.log4j.core.config.AwaitCompletionReliabilityStrategy.log(AwaitCompletionReliabilityStrategy.java:63) at org.apache.logging.log4j.core.Logger.logMessage(Logger.java:153) at org.apache.logging.slf4j.Log4jLogger.log(Log4jLogger.java:376) at org.slf4j.bridge.SLF4JBridgeHandler.callLocationAwareLogger(SLF4JBridgeHandler.java:221) at org.slf4j.bridge.SLF4JBridgeHandler.publish(SLF4JBridgeHandler.java:303) at java.util.logging.Logger.log(Logger.java:738) at java.util.logging.Logger.doLog(Logger.java:765) at java.util.logging.Logger.logp(Logger.java:931) at org.apache.juli.logging.DirectJDKLog.log(DirectJDKLog.java:173) at org.apache.juli.logging.DirectJDKLog.info(DirectJDKLog.java:116) at org.apache.coyote.AbstractProtocol.start(AbstractProtocol.java:610) at org.apache.catalina.connector.Connector.startInternal(Connector.java:1071) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) at org.apache.catalina.core.StandardService.addConnector(StandardService.java:239) at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.addPreviouslyRemovedConnectors(TomcatWebServer.java:282) at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.start(TomcatWebServer.java:213) at org.springframework.boot.web.servlet.context.WebServerStartStopLifecycle.start(WebServerStartStopLifecycle.java:43) at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:178) at org.springframework.context.support.DefaultLifecycleProcessor.access$200(DefaultLifecycleProcessor.java:54) at org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.start(DefaultLifecycleProcessor.java:356) at java.lang.Iterable.forEach(Iterable.java:75) at org.springframework.context.support.DefaultLifecycleProcessor.startBeans(DefaultLifecycleProcessor.java:155) at org.springframework.context.support.DefaultLifecycleProcessor.onRefresh(DefaultLifecycleProcessor.java:123) at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:935) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:586) at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:144) at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:782) at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:774) at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:439) at org.springframework.boot.SpringApplication.run(SpringApplication.java:339) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1340) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1329) at org.example.MainApplication.main(MainApplication.java:9) Caused by: java.sql.BatchUpdateException: java.io.IOException: Stream closed at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at com.mysql.cj.util.Util.handleNewInstance(Util.java:192) at com.mysql.cj.util.Util.getInstance(Util.java:167) at com.mysql.cj.util.Util.getInstance(Util.java:174) at com.mysql.cj.jdbc.exceptions.SQLError.createBatchUpdateException(SQLError.java:224) at com.mysql.cj.jdbc.ClientPreparedStatement.executeBatchSerially(ClientPreparedStatement.java:816) at com.mysql.cj.jdbc.ClientPreparedStatement.executeBatchInternal(ClientPreparedStatement.java:418) at com.mysql.cj.jdbc.StatementImpl.executeBatch(StatementImpl.java:795) at org.apache.logging.log4j.core.appender.db.jdbc.JdbcDatabaseManager.commitAndClose(JdbcDatabaseManager.java:553) ... 45 more Caused by: java.sql.SQLException: java.io.IOException: Stream closed at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129) at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1084) at com.mysql.cj.jdbc.ClientPreparedStatement.executeBatchSerially(ClientPreparedStatement.java:795) ... 48 more Caused by: java.io.IOException: Stream closed at java.io.StringReader.ensureOpen(StringReader.java:56) at java.io.StringReader.read(StringReader.java:90) at java.io.Reader.read(Reader.java:140) at com.mysql.cj.protocol.a.ReaderValueEncoder.readBytes(ReaderValueEncoder.java:79) at com.mysql.cj.protocol.a.ReaderValueEncoder.getBytes(ReaderValueEncoder.java:49) at com.mysql.cj.protocol.a.AbstractValueEncoder.encodeAsText(AbstractValueEncoder.java:92) at com.mysql.cj.NativeQueryBindValue.writeAsText(NativeQueryBindValue.java:383) at com.mysql.cj.protocol.a.NativeMessageBuilder.buildComQuery(NativeMessageBuilder.java:175) at com.mysql.cj.protocol.a.NativeMessageBuilder.buildComQuery(NativeMessageBuilder.java:51) at com.mysql.cj.ClientPreparedQuery.fillSendPacket(ClientPreparedQuery.java:222) at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1047) ... 49 more 2024-10-28 09:25:15,007 main ERROR Unable to write to database [JdbcManager{name=databaseAppender, bufferSize=10, tableName=logging_event, columnConfigs=[{ name=log_event_date, layout=%d, literal=null, timestamp=false }, { name=logger_name, layout=%c, literal=null, timestamp=false }, { name=log_level, layout=%p, literal=null, timestamp=false }, { name=thread_name, layout=%t, literal=null, timestamp=false }, { name=message, layout=%message, literal=null, timestamp=false }], columnMappings=[]}] for appender [databaseAppender]. org.apache.logging.log4j.core.appender.db.DbAppenderLoggingException: Failed to commit transaction logging event or flushing buffer [columnConfigs=[{ name=log_event_date, layout=%d, literal=null, timestamp=false }, { name=logger_name, layout=%c, literal=null, timestamp=false }, { name=log_level, layout=%p, literal=null, timestamp=false }, { name=thread_name, layout=%t, literal=null, timestamp=false }, { name=message, layout=%message, literal=null, timestamp=false }], sqlStatement=insert into logging_event (log_event_date,logger_name,log_level,thread_name,message) values (?,?,?,?,?), factoryData=FactoryData [connectionSource=jdbc:mysql://192.168.15.233:3306/logging_test, tableName=logging_event, columnConfigs=[{ name=log_event_date, layout=%d, literal=null, timestamp=false }, { name=logger_name, layout=%c, literal=null, timestamp=false }, { name=log_level, layout=%p, literal=null, timestamp=false }, { name=thread_name, layout=%t, literal=null, timestamp=false }, { name=message, layout=%message, literal=null, timestamp=false }], columnMappings=[], immediateFail=false, retry=true, reconnectIntervalMillis=5000, truncateStrings=true], connection=com.mysql.cj.jdbc.ConnectionImpl@61d34b4, statement=com.mysql.cj.jdbc.ClientPreparedStatement: insert into logging_event (log_event_date,logger_name,log_level,thread_name,message) values (** NOT SPECIFIED **,** NOT SPECIFIED **,** NOT SPECIFIED **,** NOT SPECIFIED **,** NOT SPECIFIED **), reconnector=null, isBatchSupported=true, columnMetaData={MESSAGE=ColumnMetaData [schemaName=, catalogName=logging_test, tableName=logging_event, name=message, nameKey=MESSAGE, label=message, displaySize=536870911, type=-1, typeName=LONGTEXT, className=java.lang.String, precision=536870911, scale=0, isStringType=true], THREAD_NAME=ColumnMetaData [schemaName=, catalogName=logging_test, tableName=logging_event, name=thread_name, nameKey=THREAD_NAME, label=thread_name, displaySize=254, type=12, typeName=VARCHAR, className=java.lang.String, precision=254, scale=0, isStringType=true], LOG_EVENT_DATE=ColumnMetaData [schemaName=, catalogName=logging_test, tableName=logging_event, name=log_event_date, nameKey=LOG_EVENT_DATE, label=log_event_date, displaySize=254, type=12, typeName=VARCHAR, className=java.lang.String, precision=254, scale=0, isStringType=true], LOGGER_NAME=ColumnMetaData [schemaName=, catalogName=logging_test, tableName=logging_event, name=logger_name, nameKey=LOGGER_NAME, label=logger_name, displaySize=254, type=12, typeName=VARCHAR, className=java.lang.String, precision=254, scale=0, isStringType=true], LOG_LEVEL=ColumnMetaData [schemaName=, catalogName=logging_test, tableName=logging_event, name=log_level, nameKey=LOG_LEVEL, label=log_level, displaySize=254, type=12, typeName=VARCHAR, className=java.lang.String, precision=254, scale=0, isStringType=true]}] at org.apache.logging.log4j.core.appender.db.jdbc.JdbcDatabaseManager.commitAndClose(JdbcDatabaseManager.java:565) at org.apache.logging.log4j.core.appender.db.AbstractDatabaseManager.flush(AbstractDatabaseManager.java:158) at org.apache.logging.log4j.core.appender.db.AbstractDatabaseManager.buffer(AbstractDatabaseManager.java:125) at org.apache.logging.log4j.core.appender.db.AbstractDatabaseManager.write(AbstractDatabaseManager.java:262) at org.apache.logging.log4j.core.appender.db.AbstractDatabaseAppender.append(AbstractDatabaseAppender.java:110) at org.apache.logging.log4j.core.config.AppenderControl.tryCallAppender(AppenderControl.java:156) at org.apache.logging.log4j.core.config.AppenderControl.callAppender0(AppenderControl.java:129) at org.apache.logging.log4j.core.config.AppenderControl.callAppenderPreventRecursion(AppenderControl.java:120) at org.apache.logging.log4j.core.config.AppenderControl.callAppender(AppenderControl.java:84) at org.apache.logging.log4j.core.config.LoggerConfig.callAppenders(LoggerConfig.java:543) at org.apache.logging.log4j.core.config.LoggerConfig.processLogEvent(LoggerConfig.java:502) at org.apache.logging.log4j.core.config.LoggerConfig.log(LoggerConfig.java:485) at org.apache.logging.log4j.core.config.LoggerConfig.log(LoggerConfig.java:460) at org.apache.logging.log4j.core.config.AwaitCompletionReliabilityStrategy.log(AwaitCompletionReliabilityStrategy.java:82) at org.apache.logging.log4j.core.Logger.log(Logger.java:161) at org.apache.logging.log4j.spi.AbstractLogger.tryLogMessage(AbstractLogger.java:2198) at org.apache.logging.log4j.spi.AbstractLogger.logMessageTrackRecursion(AbstractLogger.java:2152) at org.apache.logging.log4j.spi.AbstractLogger.logMessageSafely(AbstractLogger.java:2135) at org.apache.logging.log4j.spi.AbstractLogger.logMessage(AbstractLogger.java:2016) at org.apache.logging.log4j.spi.AbstractLogger.logIfEnabled(AbstractLogger.java:1875) at org.apache.commons.logging.LogAdapter$Log4jLog.log(LogAdapter.java:266) at org.apache.commons.logging.LogAdapter$Log4jLog.info(LogAdapter.java:230) at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.start(TomcatWebServer.java:220) at org.springframework.boot.web.servlet.context.WebServerStartStopLifecycle.start(WebServerStartStopLifecycle.java:43) at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:178) at org.springframework.context.support.DefaultLifecycleProcessor.access$200(DefaultLifecycleProcessor.java:54) at org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.start(DefaultLifecycleProcessor.java:356) at java.lang.Iterable.forEach(Iterable.java:75) at org.springframework.context.support.DefaultLifecycleProcessor.startBeans(DefaultLifecycleProcessor.java:155) at org.springframework.context.support.DefaultLifecycleProcessor.onRefresh(DefaultLifecycleProcessor.java:123) at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:935) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:586) at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:144) at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:782) at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:774) at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:439) at org.springframework.boot.SpringApplication.run(SpringApplication.java:339) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1340) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1329) at org.example.MainApplication.main(MainApplication.java:9) Caused by: java.sql.BatchUpdateException: java.io.IOException: Stream closed at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at com.mysql.cj.util.Util.handleNewInstance(Util.java:192) at com.mysql.cj.util.Util.getInstance(Util.java:167) at com.mysql.cj.util.Util.getInstance(Util.java:174) at com.mysql.cj.jdbc.exceptions.SQLError.createBatchUpdateException(SQLError.java:224) at com.mysql.cj.jdbc.ClientPreparedStatement.executeBatchSerially(ClientPreparedStatement.java:816) at com.mysql.cj.jdbc.ClientPreparedStatement.executeBatchInternal(ClientPreparedStatement.java:418) at com.mysql.cj.jdbc.StatementImpl.executeBatch(StatementImpl.java:795) at org.apache.logging.log4j.core.appender.db.jdbc.JdbcDatabaseManager.commitAndClose(JdbcDatabaseManager.java:553) ... 39 more Caused by: java.sql.SQLException: java.io.IOException: Stream closed at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129) at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1084) at com.mysql.cj.jdbc.ClientPreparedStatement.executeBatchSerially(ClientPreparedStatement.java:795) ... 42 more Caused by: java.io.IOException: Stream closed at java.io.StringReader.ensureOpen(StringReader.java:56) at java.io.StringReader.read(StringReader.java:90) at java.io.Reader.read(Reader.java:140) at com.mysql.cj.protocol.a.ReaderValueEncoder.readBytes(ReaderValueEncoder.java:79) at com.mysql.cj.protocol.a.ReaderValueEncoder.getBytes(ReaderValueEncoder.java:49) at com.mysql.cj.protocol.a.AbstractValueEncoder.encodeAsText(AbstractValueEncoder.java:92) at com.mysql.cj.NativeQueryBindValue.writeAsText(NativeQueryBindValue.java:383) at com.mysql.cj.protocol.a.NativeMessageBuilder.buildComQuery(NativeMessageBuilder.java:175) at com.mysql.cj.protocol.a.NativeMessageBuilder.buildComQuery(NativeMessageBuilder.java:51) at com.mysql.cj.ClientPreparedQuery.fillSendPacket(ClientPreparedQuery.java:222) at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1047) ... 43 more 2024-10-28 09:25:15,007 main ERROR An exception occurred processing Appender databaseAppender org.apache.logging.log4j.core.appender.db.DbAppenderLoggingException: Failed to commit transaction logging event or flushing buffer [columnConfigs=[{ name=log_event_date, layout=%d, literal=null, timestamp=false }, { name=logger_name, layout=%c, literal=null, timestamp=false }, { name=log_level, layout=%p, literal=null, timestamp=false }, { name=thread_name, layout=%t, literal=null, timestamp=false }, { name=message, layout=%message, literal=null, timestamp=false }], sqlStatement=insert into logging_event (log_event_date,logger_name,log_level,thread_name,message) values (?,?,?,?,?), factoryData=FactoryData [connectionSource=jdbc:mysql://192.168.15.233:3306/logging_test, tableName=logging_event, columnConfigs=[{ name=log_event_date, layout=%d, literal=null, timestamp=false }, { name=logger_name, layout=%c, literal=null, timestamp=false }, { name=log_level, layout=%p, literal=null, timestamp=false }, { name=thread_name, layout=%t, literal=null, timestamp=false }, { name=message, layout=%message, literal=null, timestamp=false }], columnMappings=[], immediateFail=false, retry=true, reconnectIntervalMillis=5000, truncateStrings=true], connection=com.mysql.cj.jdbc.ConnectionImpl@61d34b4, statement=com.mysql.cj.jdbc.ClientPreparedStatement: insert into logging_event (log_event_date,logger_name,log_level,thread_name,message) values (** NOT SPECIFIED **,** NOT SPECIFIED **,** NOT SPECIFIED **,** NOT SPECIFIED **,** NOT SPECIFIED **), reconnector=null, isBatchSupported=true, columnMetaData={MESSAGE=ColumnMetaData [schemaName=, catalogName=logging_test, tableName=logging_event, name=message, nameKey=MESSAGE, label=message, displaySize=536870911, type=-1, typeName=LONGTEXT, className=java.lang.String, precision=536870911, scale=0, isStringType=true], THREAD_NAME=ColumnMetaData [schemaName=, catalogName=logging_test, tableName=logging_event, name=thread_name, nameKey=THREAD_NAME, label=thread_name, displaySize=254, type=12, typeName=VARCHAR, className=java.lang.String, precision=254, scale=0, isStringType=true], LOG_EVENT_DATE=ColumnMetaData [schemaName=, catalogName=logging_test, tableName=logging_event, name=log_event_date, nameKey=LOG_EVENT_DATE, label=log_event_date, displaySize=254, type=12, typeName=VARCHAR, className=java.lang.String, precision=254, scale=0, isStringType=true], LOGGER_NAME=ColumnMetaData [schemaName=, catalogName=logging_test, tableName=logging_event, name=logger_name, nameKey=LOGGER_NAME, label=logger_name, displaySize=254, type=12, typeName=VARCHAR, className=java.lang.String, precision=254, scale=0, isStringType=true], LOG_LEVEL=ColumnMetaData [schemaName=, catalogName=logging_test, tableName=logging_event, name=log_level, nameKey=LOG_LEVEL, label=log_level, displaySize=254, type=12, typeName=VARCHAR, className=java.lang.String, precision=254, scale=0, isStringType=true]}] at org.apache.logging.log4j.core.appender.db.jdbc.JdbcDatabaseManager.commitAndClose(JdbcDatabaseManager.java:565) at org.apache.logging.log4j.core.appender.db.AbstractDatabaseManager.flush(AbstractDatabaseManager.java:158) at org.apache.logging.log4j.core.appender.db.AbstractDatabaseManager.buffer(AbstractDatabaseManager.java:125) at org.apache.logging.log4j.core.appender.db.AbstractDatabaseManager.write(AbstractDatabaseManager.java:262) at org.apache.logging.log4j.core.appender.db.AbstractDatabaseAppender.append(AbstractDatabaseAppender.java:110) at org.apache.logging.log4j.core.config.AppenderControl.tryCallAppender(AppenderControl.java:156) at org.apache.logging.log4j.core.config.AppenderControl.callAppender0(AppenderControl.java:129) at org.apache.logging.log4j.core.config.AppenderControl.callAppenderPreventRecursion(AppenderControl.java:120) at org.apache.logging.log4j.core.config.AppenderControl.callAppender(AppenderControl.java:84) at org.apache.logging.log4j.core.config.LoggerConfig.callAppenders(LoggerConfig.java:543) at org.apache.logging.log4j.core.config.LoggerConfig.processLogEvent(LoggerConfig.java:502) at org.apache.logging.log4j.core.config.LoggerConfig.log(LoggerConfig.java:485) at org.apache.logging.log4j.core.config.LoggerConfig.log(LoggerConfig.java:460) at org.apache.logging.log4j.core.config.AwaitCompletionReliabilityStrategy.log(AwaitCompletionReliabilityStrategy.java:82) at org.apache.logging.log4j.core.Logger.log(Logger.java:161) at org.apache.logging.log4j.spi.AbstractLogger.tryLogMessage(AbstractLogger.java:2198) at org.apache.logging.log4j.spi.AbstractLogger.logMessageTrackRecursion(AbstractLogger.java:2152) at org.apache.logging.log4j.spi.AbstractLogger.logMessageSafely(AbstractLogger.java:2135) at org.apache.logging.log4j.spi.AbstractLogger.logMessage(AbstractLogger.java:2016) at org.apache.logging.log4j.spi.AbstractLogger.logIfEnabled(AbstractLogger.java:1875) at org.apache.commons.logging.LogAdapter$Log4jLog.log(LogAdapter.java:266) at org.apache.commons.logging.LogAdapter$Log4jLog.info(LogAdapter.java:230) at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.start(TomcatWebServer.java:220) at org.springframework.boot.web.servlet.context.WebServerStartStopLifecycle.start(WebServerStartStopLifecycle.java:43) at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:178) at org.springframework.context.support.DefaultLifecycleProcessor.access$200(DefaultLifecycleProcessor.java:54) at org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.start(DefaultLifecycleProcessor.java:356) at java.lang.Iterable.forEach(Iterable.java:75) at org.springframework.context.support.DefaultLifecycleProcessor.startBeans(DefaultLifecycleProcessor.java:155) at org.springframework.context.support.DefaultLifecycleProcessor.onRefresh(DefaultLifecycleProcessor.java:123) at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:935) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:586) at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:144) at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:782) at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:774) at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:439) at org.springframework.boot.SpringApplication.run(SpringApplication.java:339) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1340) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1329) at org.example.MainApplication.main(MainApplication.java:9) Caused by: java.sql.BatchUpdateException: java.io.IOException: Stream closed at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at com.mysql.cj.util.Util.handleNewInstance(Util.java:192) at com.mysql.cj.util.Util.getInstance(Util.java:167) at com.mysql.cj.util.Util.getInstance(Util.java:174) at com.mysql.cj.jdbc.exceptions.SQLError.createBatchUpdateException(SQLError.java:224) at com.mysql.cj.jdbc.ClientPreparedStatement.executeBatchSerially(ClientPreparedStatement.java:816) at com.mysql.cj.jdbc.ClientPreparedStatement.executeBatchInternal(ClientPreparedStatement.java:418) at com.mysql.cj.jdbc.StatementImpl.executeBatch(StatementImpl.java:795) at org.apache.logging.log4j.core.appender.db.jdbc.JdbcDatabaseManager.commitAndClose(JdbcDatabaseManager.java:553) ... 39 more Caused by: java.sql.SQLException: java.io.IOException: Stream closed at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129) at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1084) at com.mysql.cj.jdbc.ClientPreparedStatement.executeBatchSerially(ClientPreparedStatement.java:795) ... 42 more Caused by: java.io.IOException: Stream closed at java.io.StringReader.ensureOpen(StringReader.java:56) at java.io.StringReader.read(StringReader.java:90) at java.io.Reader.read(Reader.java:140) at com.mysql.cj.protocol.a.ReaderValueEncoder.readBytes(ReaderValueEncoder.java:79) at com.mysql.cj.protocol.a.ReaderValueEncoder.getBytes(ReaderValueEncoder.java:49) at com.mysql.cj.protocol.a.AbstractValueEncoder.encodeAsText(AbstractValueEncoder.java:92) at com.mysql.cj.NativeQueryBindValue.writeAsText(NativeQueryBindValue.java:383) at com.mysql.cj.protocol.a.NativeMessageBuilder.buildComQuery(NativeMessageBuilder.java:175) at com.mysql.cj.protocol.a.NativeMessageBuilder.buildComQuery(NativeMessageBuilder.java:51) at com.mysql.cj.ClientPreparedQuery.fillSendPacket(ClientPreparedQuery.java:222) at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1047) ... 43 more 2024-10-28 09:25:15,031 main ERROR Unable to write to database [JdbcManager{name=databaseAppender, bufferSize=10, tableName=logging_event, columnConfigs=[{ name=log_event_date, layout=%d, literal=null, timestamp=false }, { name=logger_name, layout=%c, literal=null, timestamp=false }, { name=log_level, layout=%p, literal=null, timestamp=false }, { name=thread_name, layout=%t, literal=null, timestamp=false }, { name=message, layout=%message, literal=null, timestamp=false }], columnMappings=[]}] for appender [databaseAppender]. org.apache.logging.log4j.core.appender.db.DbAppenderLoggingException: Failed to commit transaction logging event or flushing buffer [columnConfigs=[{ name=log_event_date, layout=%d, literal=null, timestamp=false }, { name=logger_name, layout=%c, literal=null, timestamp=false }, { name=log_level, layout=%p, literal=null, timestamp=false }, { name=thread_name, layout=%t, literal=null, timestamp=false }, { name=message, layout=%message, literal=null, timestamp=false }], sqlStatement=insert into logging_event (log_event_date,logger_name,log_level,thread_name,message) values (?,?,?,?,?), factoryData=FactoryData [connectionSource=jdbc:mysql://192.168.15.233:3306/logging_test, tableName=logging_event, columnConfigs=[{ name=log_event_date, layout=%d, literal=null, timestamp=false }, { name=logger_name, layout=%c, literal=null, timestamp=false }, { name=log_level, layout=%p, literal=null, timestamp=false }, { name=thread_name, layout=%t, literal=null, timestamp=false }, { name=message, layout=%message, literal=null, timestamp=false }], columnMappings=[], immediateFail=false, retry=true, reconnectIntervalMillis=5000, truncateStrings=true], connection=com.mysql.cj.jdbc.ConnectionImpl@5fb65013, statement=com.mysql.cj.jdbc.ClientPreparedStatement: insert into logging_event (log_event_date,logger_name,log_level,thread_name,message) values (** NOT SPECIFIED **,** NOT SPECIFIED **,** NOT SPECIFIED **,** NOT SPECIFIED **,** NOT SPECIFIED **), reconnector=null, isBatchSupported=true, columnMetaData={MESSAGE=ColumnMetaData [schemaName=, catalogName=logging_test, tableName=logging_event, name=message, nameKey=MESSAGE, label=message, displaySize=536870911, type=-1, typeName=LONGTEXT, className=java.lang.String, precision=536870911, scale=0, isStringType=true], THREAD_NAME=ColumnMetaData [schemaName=, catalogName=logging_test, tableName=logging_event, name=thread_name, nameKey=THREAD_NAME, label=thread_name, displaySize=254, type=12, typeName=VARCHAR, className=java.lang.String, precision=254, scale=0, isStringType=true], LOG_EVENT_DATE=ColumnMetaData [schemaName=, catalogName=logging_test, tableName=logging_event, name=log_event_date, nameKey=LOG_EVENT_DATE, label=log_event_date, displaySize=254, type=12, typeName=VARCHAR, className=java.lang.String, precision=254, scale=0, isStringType=true], LOGGER_NAME=ColumnMetaData [schemaName=, catalogName=logging_test, tableName=logging_event, name=logger_name, nameKey=LOGGER_NAME, label=logger_name, displaySize=254, type=12, typeName=VARCHAR, className=java.lang.String, precision=254, scale=0, isStringType=true], LOG_LEVEL=ColumnMetaData [schemaName=, catalogName=logging_test, tableName=logging_event, name=log_level, nameKey=LOG_LEVEL, label=log_level, displaySize=254, type=12, typeName=VARCHAR, className=java.lang.String, precision=254, scale=0, isStringType=true]}] at org.apache.logging.log4j.core.appender.db.jdbc.JdbcDatabaseManager.commitAndClose(JdbcDatabaseManager.java:565) at org.apache.logging.log4j.core.appender.db.AbstractDatabaseManager.flush(AbstractDatabaseManager.java:158) at org.apache.logging.log4j.core.appender.db.AbstractDatabaseManager.buffer(AbstractDatabaseManager.java:125) at org.apache.logging.log4j.core.appender.db.AbstractDatabaseManager.write(AbstractDatabaseManager.java:262) at org.apache.logging.log4j.core.appender.db.AbstractDatabaseAppender.append(AbstractDatabaseAppender.java:110) at org.apache.logging.log4j.core.config.AppenderControl.tryCallAppender(AppenderControl.java:156) at org.apache.logging.log4j.core.config.AppenderControl.callAppender0(AppenderControl.java:129) at org.apache.logging.log4j.core.config.AppenderControl.callAppenderPreventRecursion(AppenderControl.java:120) at org.apache.logging.log4j.core.config.AppenderControl.callAppender(AppenderControl.java:84) at org.apache.logging.log4j.core.config.LoggerConfig.callAppenders(LoggerConfig.java:543) at org.apache.logging.log4j.core.config.LoggerConfig.processLogEvent(LoggerConfig.java:502) at org.apache.logging.log4j.core.config.LoggerConfig.log(LoggerConfig.java:485) at org.apache.logging.log4j.core.config.LoggerConfig.log(LoggerConfig.java:460) at org.apache.logging.log4j.core.config.AwaitCompletionReliabilityStrategy.log(AwaitCompletionReliabilityStrategy.java:82) at org.apache.logging.log4j.core.Logger.log(Logger.java:161) at org.apache.logging.log4j.spi.AbstractLogger.tryLogMessage(AbstractLogger.java:2198) at org.apache.logging.log4j.spi.AbstractLogger.logMessageTrackRecursion(AbstractLogger.java:2152) at org.apache.logging.log4j.spi.AbstractLogger.logMessageSafely(AbstractLogger.java:2135) at org.apache.logging.log4j.spi.AbstractLogger.logMessage(AbstractLogger.java:1994) at org.apache.logging.log4j.spi.AbstractLogger.logIfEnabled(AbstractLogger.java:1852) at org.apache.commons.logging.LogAdapter$Log4jLog.log(LogAdapter.java:270) at org.apache.commons.logging.LogAdapter$Log4jLog.info(LogAdapter.java:230) at org.springframework.boot.StartupInfoLogger.logStarted(StartupInfoLogger.java:61) at org.springframework.boot.SpringApplication.run(SpringApplication.java:343) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1340) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1329) at org.example.MainApplication.main(MainApplication.java:9) Caused by: java.sql.BatchUpdateException: java.io.IOException: Stream closed at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at com.mysql.cj.util.Util.handleNewInstance(Util.java:192) at com.mysql.cj.util.Util.getInstance(Util.java:167) at com.mysql.cj.util.Util.getInstance(Util.java:174) at com.mysql.cj.jdbc.exceptions.SQLError.createBatchUpdateException(SQLError.java:224) at com.mysql.cj.jdbc.ClientPreparedStatement.executeBatchSerially(ClientPreparedStatement.java:816) at com.mysql.cj.jdbc.ClientPreparedStatement.executeBatchInternal(ClientPreparedStatement.java:418) at com.mysql.cj.jdbc.StatementImpl.executeBatch(StatementImpl.java:795) at org.apache.logging.log4j.core.appender.db.jdbc.JdbcDatabaseManager.commitAndClose(JdbcDatabaseManager.java:553) ... 26 more Caused by: java.sql.SQLException: java.io.IOException: Stream closed at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129) at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1084) at com.mysql.cj.jdbc.ClientPreparedStatement.executeBatchSerially(ClientPreparedStatement.java:795) ... 29 more Caused by: java.io.IOException: Stream closed at java.io.StringReader.ensureOpen(StringReader.java:56) at java.io.StringReader.read(StringReader.java:90) at java.io.Reader.read(Reader.java:140) at com.mysql.cj.protocol.a.ReaderValueEncoder.readBytes(ReaderValueEncoder.java:79) at com.mysql.cj.protocol.a.ReaderValueEncoder.getBytes(ReaderValueEncoder.java:49) at com.mysql.cj.protocol.a.AbstractValueEncoder.encodeAsText(AbstractValueEncoder.java:92) at com.mysql.cj.NativeQueryBindValue.writeAsText(NativeQueryBindValue.java:383) at com.mysql.cj.protocol.a.NativeMessageBuilder.buildComQuery(NativeMessageBuilder.java:175) at com.mysql.cj.protocol.a.NativeMessageBuilder.buildComQuery(NativeMessageBuilder.java:51) at com.mysql.cj.ClientPreparedQuery.fillSendPacket(ClientPreparedQuery.java:222) at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1047) ... 30 more 2024-10-28 09:25:15,031 main ERROR An exception occurred processing Appender databaseAppender org.apache.logging.log4j.core.appender.db.DbAppenderLoggingException: Failed to commit transaction logging event or flushing buffer [columnConfigs=[{ name=log_event_date, layout=%d, literal=null, timestamp=false }, { name=logger_name, layout=%c, literal=null, timestamp=false }, { name=log_level, layout=%p, literal=null, timestamp=false }, { name=thread_name, layout=%t, literal=null, timestamp=false }, { name=message, layout=%message, literal=null, timestamp=false }], sqlStatement=insert into logging_event (log_event_date,logger_name,log_level,thread_name,message) values (?,?,?,?,?), factoryData=FactoryData [connectionSource=jdbc:mysql://192.168.15.233:3306/logging_test, tableName=logging_event, columnConfigs=[{ name=log_event_date, layout=%d, literal=null, timestamp=false }, { name=logger_name, layout=%c, literal=null, timestamp=false }, { name=log_level, layout=%p, literal=null, timestamp=false }, { name=thread_name, layout=%t, literal=null, timestamp=false }, { name=message, layout=%message, literal=null, timestamp=false }], columnMappings=[], immediateFail=false, retry=true, reconnectIntervalMillis=5000, truncateStrings=true], connection=com.mysql.cj.jdbc.ConnectionImpl@5fb65013, statement=com.mysql.cj.jdbc.ClientPreparedStatement: insert into logging_event (log_event_date,logger_name,log_level,thread_name,message) values (** NOT SPECIFIED **,** NOT SPECIFIED **,** NOT SPECIFIED **,** NOT SPECIFIED **,** NOT SPECIFIED **), reconnector=null, isBatchSupported=true, columnMetaData={MESSAGE=ColumnMetaData [schemaName=, catalogName=logging_test, tableName=logging_event, name=message, nameKey=MESSAGE, label=message, displaySize=536870911, type=-1, typeName=LONGTEXT, className=java.lang.String, precision=536870911, scale=0, isStringType=true], THREAD_NAME=ColumnMetaData [schemaName=, catalogName=logging_test, tableName=logging_event, name=thread_name, nameKey=THREAD_NAME, label=thread_name, displaySize=254, type=12, typeName=VARCHAR, className=java.lang.String, precision=254, scale=0, isStringType=true], LOG_EVENT_DATE=ColumnMetaData [schemaName=, catalogName=logging_test, tableName=logging_event, name=log_event_date, nameKey=LOG_EVENT_DATE, label=log_event_date, displaySize=254, type=12, typeName=VARCHAR, className=java.lang.String, precision=254, scale=0, isStringType=true], LOGGER_NAME=ColumnMetaData [schemaName=, catalogName=logging_test, tableName=logging_event, name=logger_name, nameKey=LOGGER_NAME, label=logger_name, displaySize=254, type=12, typeName=VARCHAR, className=java.lang.String, precision=254, scale=0, isStringType=true], LOG_LEVEL=ColumnMetaData [schemaName=, catalogName=logging_test, tableName=logging_event, name=log_level, nameKey=LOG_LEVEL, label=log_level, displaySize=254, type=12, typeName=VARCHAR, className=java.lang.String, precision=254, scale=0, isStringType=true]}] at org.apache.logging.log4j.core.appender.db.jdbc.JdbcDatabaseManager.commitAndClose(JdbcDatabaseManager.java:565) at org.apache.logging.log4j.core.appender.db.AbstractDatabaseManager.flush(AbstractDatabaseManager.java:158) at org.apache.logging.log4j.core.appender.db.AbstractDatabaseManager.buffer(AbstractDatabaseManager.java:125) at org.apache.logging.log4j.core.appender.db.AbstractDatabaseManager.write(AbstractDatabaseManager.java:262) at org.apache.logging.log4j.core.appender.db.AbstractDatabaseAppender.append(AbstractDatabaseAppender.java:110) at org.apache.logging.log4j.core.config.AppenderControl.tryCallAppender(AppenderControl.java:156) at org.apache.logging.log4j.core.config.AppenderControl.callAppender0(AppenderControl.java:129) at org.apache.logging.log4j.core.config.AppenderControl.callAppenderPreventRecursion(AppenderControl.java:120) at org.apache.logging.log4j.core.config.AppenderControl.callAppender(AppenderControl.java:84) at org.apache.logging.log4j.core.config.LoggerConfig.callAppenders(LoggerConfig.java:543) at org.apache.logging.log4j.core.config.LoggerConfig.processLogEvent(LoggerConfig.java:502) at org.apache.logging.log4j.core.config.LoggerConfig.log(LoggerConfig.java:485) at org.apache.logging.log4j.core.config.LoggerConfig.log(LoggerConfig.java:460) at org.apache.logging.log4j.core.config.AwaitCompletionReliabilityStrategy.log(AwaitCompletionReliabilityStrategy.java:82) at org.apache.logging.log4j.core.Logger.log(Logger.java:161) at org.apache.logging.log4j.spi.AbstractLogger.tryLogMessage(AbstractLogger.java:2198) at org.apache.logging.log4j.spi.AbstractLogger.logMessageTrackRecursion(AbstractLogger.java:2152) at org.apache.logging.log4j.spi.AbstractLogger.logMessageSafely(AbstractLogger.java:2135) at org.apache.logging.log4j.spi.AbstractLogger.logMessage(AbstractLogger.java:1994) at org.apache.logging.log4j.spi.AbstractLogger.logIfEnabled(AbstractLogger.java:1852) at org.apache.commons.logging.LogAdapter$Log4jLog.log(LogAdapter.java:270) at org.apache.commons.logging.LogAdapter$Log4jLog.info(LogAdapter.java:230) at org.springframework.boot.StartupInfoLogger.logStarted(StartupInfoLogger.java:61) at org.springframework.boot.SpringApplication.run(SpringApplication.java:343) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1340) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1329) at org.example.MainApplication.main(MainApplication.java:9) Caused by: java.sql.BatchUpdateException: java.io.IOException: Stream closed at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at com.mysql.cj.util.Util.handleNewInstance(Util.java:192) at com.mysql.cj.util.Util.getInstance(Util.java:167) at com.mysql.cj.util.Util.getInstance(Util.java:174) at com.mysql.cj.jdbc.exceptions.SQLError.createBatchUpdateException(SQLError.java:224) at com.mysql.cj.jdbc.ClientPreparedStatement.executeBatchSerially(ClientPreparedStatement.java:816) at com.mysql.cj.jdbc.ClientPreparedStatement.executeBatchInternal(ClientPreparedStatement.java:418) at com.mysql.cj.jdbc.StatementImpl.executeBatch(StatementImpl.java:795) at org.apache.logging.log4j.core.appender.db.jdbc.JdbcDatabaseManager.commitAndClose(JdbcDatabaseManager.java:553) ... 26 more Caused by: java.sql.SQLException: java.io.IOException: Stream closed at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129) at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1084) at com.mysql.cj.jdbc.ClientPreparedStatement.executeBatchSerially(ClientPreparedStatement.java:795) ... 29 more Caused by: java.io.IOException: Stream closed at java.io.StringReader.ensureOpen(StringReader.java:56) at java.io.StringReader.read(StringReader.java:90) at java.io.Reader.read(Reader.java:140) at com.mysql.cj.protocol.a.ReaderValueEncoder.readBytes(ReaderValueEncoder.java:79) at com.mysql.cj.protocol.a.ReaderValueEncoder.getBytes(ReaderValueEncoder.java:49) at com.mysql.cj.protocol.a.AbstractValueEncoder.encodeAsText(AbstractValueEncoder.java:92) at com.mysql.cj.NativeQueryBindValue.writeAsText(NativeQueryBindValue.java:383) at com.mysql.cj.protocol.a.NativeMessageBuilder.buildComQuery(NativeMessageBuilder.java:175) at com.mysql.cj.protocol.a.NativeMessageBuilder.buildComQuery(NativeMessageBuilder.java:51) at com.mysql.cj.ClientPreparedQuery.fillSendPacket(ClientPreparedQuery.java:222) at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1047) ... 30 more Reproduction
[An isolated test reproducing the test.
JUnit tests similar to the ones in the code base are extremely appreciated.]