diff --git a/build.gradle b/build.gradle index 2a33ecb311..14c1b970ee 100644 --- a/build.gradle +++ b/build.gradle @@ -67,8 +67,8 @@ buildscript { ext.jersey_version = '2.25' ext.servlet_version = '4.0.1' ext.assertj_version = '3.12.2' - ext.slf4j_version = '1.7.26' - ext.log4j_version = '2.11.2' + ext.slf4j_version = '1.7.30' + ext.log4j_version = '2.12.1' ext.bouncycastle_version = constants.getProperty("bouncycastleVersion") ext.guava_version = constants.getProperty("guavaVersion") ext.caffeine_version = constants.getProperty("caffeineVersion") diff --git a/common/logging/src/main/kotlin/net/corda/common/logging/ErrorCodeRewritePolicy.kt b/common/logging/src/main/kotlin/net/corda/common/logging/ErrorCodeRewritePolicy.kt deleted file mode 100644 index 5f0e24bef9..0000000000 --- a/common/logging/src/main/kotlin/net/corda/common/logging/ErrorCodeRewritePolicy.kt +++ /dev/null @@ -1,28 +0,0 @@ -package net.corda.common.logging - -import org.apache.logging.log4j.core.Core -import org.apache.logging.log4j.core.LogEvent -import org.apache.logging.log4j.core.appender.rewrite.RewritePolicy -import org.apache.logging.log4j.core.config.plugins.Plugin -import org.apache.logging.log4j.core.config.plugins.PluginFactory -import org.apache.logging.log4j.core.impl.Log4jLogEvent - -@Plugin(name = "ErrorCodeRewritePolicy", category = Core.CATEGORY_NAME, elementType = "rewritePolicy", printObject = false) -class ErrorCodeRewritePolicy : RewritePolicy { - override fun rewrite(source: LogEvent): LogEvent? { - val newMessage = source.message?.withErrorCodeFor(source.thrown, source.level) - return if (newMessage == source.message) { - source - } else { - Log4jLogEvent.Builder(source).setMessage(newMessage).build() - } - } - - companion object { - @JvmStatic - @PluginFactory - fun createPolicy(): ErrorCodeRewritePolicy { - return ErrorCodeRewritePolicy() - } - } -} \ No newline at end of file diff --git a/config/dev/log4j2.xml b/config/dev/log4j2.xml index fe67301f84..6593f84ae8 100644 --- a/config/dev/log4j2.xml +++ b/config/dev/log4j2.xml @@ -1,5 +1,5 @@ - + ${sys:log-path:-logs} @@ -172,21 +172,17 @@ - - - - diff --git a/constants.properties b/constants.properties index 6cf6942c4d..362ac6b643 100644 --- a/constants.properties +++ b/constants.properties @@ -22,8 +22,8 @@ quasarVersion11=0.8.0 # Specify a classifier for Java 11 built artifacts jdkClassifier11=jdk11 proguardVersion=6.1.1 -bouncycastleVersion=1.61 -classgraphVersion=4.8.41 +bouncycastleVersion=1.66 +classgraphVersion=4.8.78 disruptorVersion=3.4.2 typesafeConfigVersion=1.3.4 jsr305Version=3.0.2 diff --git a/node/src/integration-test/kotlin/net/corda/node/logging/ErrorCodeLoggingTests.kt b/node/src/integration-test/kotlin/net/corda/node/logging/ErrorCodeLoggingTests.kt deleted file mode 100644 index e0532911f0..0000000000 --- a/node/src/integration-test/kotlin/net/corda/node/logging/ErrorCodeLoggingTests.kt +++ /dev/null @@ -1,62 +0,0 @@ -package net.corda.node.logging - -import net.corda.core.flows.FlowException -import net.corda.core.flows.FlowLogic -import net.corda.core.flows.InitiatingFlow -import net.corda.core.flows.StartableByRPC -import net.corda.core.internal.div -import net.corda.core.messaging.FlowHandle -import net.corda.core.messaging.startFlow -import net.corda.core.utilities.getOrThrow -import net.corda.testing.driver.DriverParameters -import net.corda.testing.driver.NodeHandle -import net.corda.testing.driver.driver -import org.assertj.core.api.Assertions.assertThat -import org.junit.Test -import java.io.File - -class ErrorCodeLoggingTests { - @Test - fun `log entries with a throwable and ERROR or WARN get an error code appended`() { - driver(DriverParameters(notarySpecs = emptyList())) { - val node = startNode(startInSameProcess = false).getOrThrow() - node.rpc.startFlow(::MyFlow).waitForCompletion() - val logFile = node.logFile() - - val linesWithErrorCode = logFile.useLines { lines -> lines.filter { line -> line.contains("[errorCode=") }.filter { line -> line.contains("moreInformationAt=https://errors.corda.net/") }.toList() } - - assertThat(linesWithErrorCode).isNotEmpty - } - } - - // This is used to detect broken logging which can be caused by loggers being initialized - // before the initLogging() call is made - @Test - fun `When logging is set to error level, there are no other levels logged after node startup`() { - driver(DriverParameters(notarySpecs = emptyList())) { - val node = startNode(startInSameProcess = false, logLevelOverride = "ERROR").getOrThrow() - node.rpc.startFlow(::MyFlow).waitForCompletion() - val logFile = node.logFile() - // An exception thrown in a flow will log at the "INFO" level. - assertThat(logFile.length()).isEqualTo(0) - } - } - - @StartableByRPC - @InitiatingFlow - class MyFlow : FlowLogic() { - override fun call(): String { - throw IllegalArgumentException("Mwahahahah") - } - } -} - -private fun FlowHandle<*>.waitForCompletion() { - try { - returnValue.getOrThrow() - } catch (e: Exception) { - // This is expected to throw an exception, using getOrThrow() just to wait until done. - } -} - -fun NodeHandle.logFile(): File = (baseDirectory / "logs").toFile().walk().filter { it.name.startsWith("node-") && it.extension == "log" }.single() \ No newline at end of file diff --git a/testing/node-driver/src/main/kotlin/net/corda/testing/driver/Driver.kt b/testing/node-driver/src/main/kotlin/net/corda/testing/driver/Driver.kt index a5085085d4..33953c76df 100644 --- a/testing/node-driver/src/main/kotlin/net/corda/testing/driver/Driver.kt +++ b/testing/node-driver/src/main/kotlin/net/corda/testing/driver/Driver.kt @@ -26,6 +26,7 @@ import net.corda.testing.node.internal.genericDriver import net.corda.testing.node.internal.getTimestampAsDirectoryName import net.corda.testing.node.internal.newContext import rx.Observable +import java.io.File import java.nio.file.Path import java.nio.file.Paths import java.util.concurrent.atomic.AtomicInteger @@ -66,6 +67,8 @@ interface NodeHandle : AutoCloseable { fun stop() } +fun NodeHandle.logFile(): File = (baseDirectory / "logs").toFile().walk().filter { it.name.startsWith("node-") && it.extension == "log" }.single() + /** Interface which represents an out of process node and exposes its process handle. **/ @DoNotImplement interface OutOfProcess : NodeHandle { diff --git a/testing/test-common/src/main/resources/log4j2-test.xml b/testing/test-common/src/main/resources/log4j2-test.xml index d8d489af1f..45910c8ca5 100644 --- a/testing/test-common/src/main/resources/log4j2-test.xml +++ b/testing/test-common/src/main/resources/log4j2-test.xml @@ -1,5 +1,5 @@ - + ${sys:log-path:-logs} @@ -63,17 +63,14 @@ - - - diff --git a/testing/test-db/src/test/resources/log4j2-test.xml b/testing/test-db/src/test/resources/log4j2-test.xml index d0941363a9..35b51709ed 100644 --- a/testing/test-db/src/test/resources/log4j2-test.xml +++ b/testing/test-db/src/test/resources/log4j2-test.xml @@ -1,5 +1,5 @@ - + ${sys:log-path:-logs} @@ -65,17 +65,14 @@ - - -