diff --git a/core-it-suite/src/test/java/org/apache/maven/it/IntegrationTestSuite.java b/core-it-suite/src/test/java/org/apache/maven/it/IntegrationTestSuite.java
index 6d61985..10951b6 100644
--- a/core-it-suite/src/test/java/org/apache/maven/it/IntegrationTestSuite.java
+++ b/core-it-suite/src/test/java/org/apache/maven/it/IntegrationTestSuite.java
@@ -119,6 +119,7 @@
         suite.addTestSuite( MavenITmng6223FindBasedir.class );
         suite.addTestSuite( MavenITmng6189SiteReportPluginsWarningTest.class );
         suite.addTestSuite( MavenITmng6127PluginExecutionConfigurationInterferenceTest.class );
+        suite.addTestSuite( MavenITmng6065FailOnSeverityTest.class );
         suite.addTestSuite( MavenITmng6057CheckReactorOrderTest.class );
         suite.addTestSuite( MavenITmng5895CIFriendlyUsageWithPropertyTest.class );
         suite.addTestSuite( MavenITmng6090CIFriendlyTest.class );
diff --git a/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng6065FailOnSeverityTest.java b/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng6065FailOnSeverityTest.java
new file mode 100644
index 0000000..b2f2ef8
--- /dev/null
+++ b/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng6065FailOnSeverityTest.java
@@ -0,0 +1,82 @@
+package org.apache.maven.it;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.it.util.ResourceExtractor;
+
+import java.io.File;
+
+/**
+ * An integration test to verify that builds fail when logs occur
+ * above or equal to the --fail-on-severity cli property.
+ *
+ * <a href="https://issues.apache.org/jira/browse/MNG-6065">MNG-6065</a>.
+ *
+ */
+public class MavenITmng6065FailOnSeverityTest
+    extends AbstractMavenIntegrationTestCase
+{
+
+    public MavenITmng6065FailOnSeverityTest()
+    {
+        super( "[3.7.0-SNAPSHOT,)" );
+    }
+
+    public void testItShouldFailOnWarnLogMessages()
+            throws Exception
+    {
+        File testDir = ResourceExtractor.simpleExtractResources( getClass(), "/mng-6065-fail-on-severity" );
+
+        Verifier verifier = newVerifier( testDir.getAbsolutePath(), false );
+        verifier.setForkJvm( true );
+        verifier.addCliOption( "--fail-on-severity" );
+        verifier.addCliOption( "WARN" );
+
+        boolean failed = false;
+
+        try
+        {
+            verifier.executeGoal( "compile" );
+        }
+        catch ( VerificationException e )
+        {
+            failed = true;
+            verifier.verifyTextInLog( "Enabled to break the build on log level WARN." );
+            verifier.verifyTextInLog( "Build failed due to log statements with a higher severity than allowed." );
+        }
+
+        assertTrue( "Build should have failed", failed );
+    }
+
+    public void testItShouldSucceedOnWarnLogMessagesWhenFailLevelIsError()
+            throws Exception
+    {
+        File testDir = ResourceExtractor.simpleExtractResources( getClass(), "/mng-6065-fail-on-severity" );
+
+        Verifier verifier = newVerifier( testDir.getAbsolutePath(), false );
+        verifier.setForkJvm( true );
+        verifier.addCliOption( "--fail-on-severity" );
+        verifier.addCliOption( "ERROR" );
+
+        verifier.executeGoal( "compile" );
+
+        verifier.verifyTextInLog( "Enabled to break the build on log level ERROR." );
+    }
+}
diff --git a/core-it-suite/src/test/resources/mng-6065-fail-on-severity/pom.xml b/core-it-suite/src/test/resources/mng-6065-fail-on-severity/pom.xml
new file mode 100644
index 0000000..d08153d
--- /dev/null
+++ b/core-it-suite/src/test/resources/mng-6065-fail-on-severity/pom.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+  <modelVersion>4.0.0</modelVersion>
+
+  <groupId>org.apache.maven.its.mng6065</groupId>
+  <artifactId>test</artifactId>
+  <version>0.1</version>
+  <packaging>jar</packaging>
+
+  <name>Maven Integration Test :: MNG-6065</name>
+  <description>
+    An integration test to verify that builds fail when logs occur above or equal to the --fail-on-severity cli property.
+    An empty project like this will already log warnings about the platform encoding and the empty jar.
+  </description>
+</project>
