You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by pc...@apache.org on 2024/04/02 10:13:18 UTC

(camel-k) branch main updated: feat(traits): logging refactoring

This is an automated email from the ASF dual-hosted git repository.

pcongiusti pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-k.git


The following commit(s) were added to refs/heads/main by this push:
     new f06b03d28 feat(traits): logging refactoring
f06b03d28 is described below

commit f06b03d28bf6ad0f43103107db5246e1e4a8643b
Author: Pasquale Congiusti <pa...@gmail.com>
AuthorDate: Fri Mar 22 10:45:30 2024 +0100

    feat(traits): logging refactoring
---
 e2e/advanced/platform_traits_test.go |  11 ----
 pkg/trait/logging.go                 |  39 ++++++++++++-
 pkg/trait/logging_test.go            | 110 ++++++++---------------------------
 3 files changed, 61 insertions(+), 99 deletions(-)

diff --git a/e2e/advanced/platform_traits_test.go b/e2e/advanced/platform_traits_test.go
index 662d1f4e1..56e9a7689 100644
--- a/e2e/advanced/platform_traits_test.go
+++ b/e2e/advanced/platform_traits_test.go
@@ -59,18 +59,7 @@ func TestTraitOnIntegrationPlatform(t *testing.T) {
 			g.Eventually(IntegrationPodPhase(t, ctx, ns, name), TestTimeoutLong).Should(Equal(corev1.PodRunning))
 			g.Eventually(IntegrationConditionStatus(t, ctx, ns, name, v1.IntegrationConditionReady), TestTimeoutShort).Should(Equal(corev1.ConditionTrue))
 			g.Eventually(IntegrationLogs(t, ctx, ns, name), TestTimeoutShort).Should(ContainSubstring("Magicstring!"))
-
 			g.Expect(IntegrationPod(t, ctx, ns, name)().Spec.Containers[0].Name).To(BeEquivalentTo(containerTestName))
-
-			found := false
-			for _, env := range IntegrationPod(t, ctx, ns, name)().Spec.Containers[0].Env {
-				if env.Name == "QUARKUS_LOG_LEVEL" {
-					g.Expect(env.Value).To(BeEquivalentTo("DEBUG"))
-					found = true
-					break
-				}
-			}
-			g.Expect(found).To(BeTrue(), "Can't find QUARKUS_LOG_LEVEL ENV variable")
 			g.Eventually(IntegrationLogs(t, ctx, ns, name), TestTimeoutShort).Should(ContainSubstring("DEBUG"))
 
 			g.Expect(Kamel(t, ctx, "delete", "--all", "-n", ns).Execute()).To(Succeed())
diff --git a/pkg/trait/logging.go b/pkg/trait/logging.go
index 97b028b85..00d26369c 100644
--- a/pkg/trait/logging.go
+++ b/pkg/trait/logging.go
@@ -61,6 +61,17 @@ func (l loggingTrait) Configure(e *Environment) (bool, *TraitCondition, error) {
 }
 
 func (l loggingTrait) Apply(e *Environment) error {
+	if e.CamelCatalog.Runtime.Capabilities["logging"].RuntimeProperties != nil {
+		l.setCatalogConfiguration(e)
+	} else {
+		l.setEnvConfiguration(e)
+	}
+
+	return nil
+}
+
+// Deprecated: to be removed in future release in favor of func setCatalogConfiguration().
+func (l loggingTrait) setEnvConfiguration(e *Environment) {
 	envvar.SetVal(&e.EnvVars, envVarQuarkusLogLevel, l.Level)
 
 	if l.Format != "" {
@@ -80,6 +91,32 @@ func (l loggingTrait) Apply(e *Environment) error {
 			envvar.SetVal(&e.EnvVars, envVarQuarkusConsoleColor, True)
 		}
 	}
+}
 
-	return nil
+func (l loggingTrait) setCatalogConfiguration(e *Environment) {
+	if e.ApplicationProperties == nil {
+		e.ApplicationProperties = make(map[string]string)
+	}
+	e.ApplicationProperties["camel.k.logging.level"] = l.Level
+	if l.Format != "" {
+		e.ApplicationProperties["camel.k.logging.format"] = l.Format
+	}
+	if pointer.BoolDeref(l.JSON, false) {
+		e.ApplicationProperties["camel.k.logging.json"] = True
+		if pointer.BoolDeref(l.JSONPrettyPrint, false) {
+			e.ApplicationProperties["camel.k.logging.jsonPrettyPrint"] = True
+		}
+	} else {
+		// If the trait is false OR unset, we default to false.
+		e.ApplicationProperties["camel.k.logging.json"] = False
+		if pointer.BoolDeref(l.Color, true) {
+			e.ApplicationProperties["camel.k.logging.color"] = True
+		}
+	}
+
+	for _, cp := range e.CamelCatalog.Runtime.Capabilities["logging"].RuntimeProperties {
+		if CapabilityPropertyKey(cp.Value, e.ApplicationProperties) != "" {
+			e.ApplicationProperties[CapabilityPropertyKey(cp.Key, e.ApplicationProperties)] = cp.Value
+		}
+	}
 }
diff --git a/pkg/trait/logging_test.go b/pkg/trait/logging_test.go
index 0947cb132..507cb2b46 100644
--- a/pkg/trait/logging_test.go
+++ b/pkg/trait/logging_test.go
@@ -117,101 +117,37 @@ func TestEmptyLoggingTrait(t *testing.T) {
 	assert.NotEmpty(t, conditions)
 	assert.NotEmpty(t, env.ExecutedTraits)
 
-	quarkusConsoleColor := false
-	jsonFormat := false
-	jsonPrettyPrint := false
-	logLevelIsInfo := false
-	logFormatIsNotDefault := false
-
-	for _, e := range env.EnvVars {
-		if e.Name == envVarQuarkusConsoleColor {
-			if e.Value == "true" {
-				quarkusConsoleColor = true
-			}
-		}
-
-		if e.Name == envVarQuarkusLogConsoleJSON {
-			if e.Value == "true" {
-				jsonFormat = true
-			}
-		}
-
-		if e.Name == envVarQuarkusLogConsoleJSONPrettyPrint {
-			if e.Value == "true" {
-				jsonPrettyPrint = true
-			}
-		}
-
-		if e.Name == envVarQuarkusLogLevel {
-			if e.Value == "INFO" {
-				logLevelIsInfo = true
-			}
-		}
-
-		if e.Name == envVarQuarkusLogConsoleFormat {
-			logFormatIsNotDefault = true
-		}
-	}
-
-	assert.True(t, quarkusConsoleColor)
-	assert.True(t, logLevelIsInfo)
-	assert.False(t, jsonFormat)
-	assert.False(t, jsonPrettyPrint)
-	assert.False(t, logFormatIsNotDefault)
-	assert.NotEmpty(t, env.ExecutedTraits)
+	assert.Equal(t, "INFO", env.ApplicationProperties["camel.k.logging.level"])
+	assert.Equal(t, "", env.ApplicationProperties["camel.k.logging.format"])
+	assert.Equal(t, "false", env.ApplicationProperties["camel.k.logging.json"])
+	assert.Equal(t, "", env.ApplicationProperties["camel.k.logging.jsonPrettyPrint"])
+	assert.Equal(t, "true", env.ApplicationProperties["camel.k.logging.color"])
+
+	assert.Equal(t, "${camel.k.logging.level}", env.ApplicationProperties["quarkus.log.level"])
+	assert.Equal(t, "", env.ApplicationProperties["quarkus.log.console.format"])
+	assert.Equal(t, "${camel.k.logging.json}", env.ApplicationProperties["quarkus.log.console.json"])
+	assert.Equal(t, "", env.ApplicationProperties["quarkus.log.console.json.pretty-print"])
+	assert.Equal(t, "${camel.k.logging.color}", env.ApplicationProperties["quarkus.console.color"])
 }
 
 func TestJsonLoggingTrait(t *testing.T) {
 	// When running, this log should look like "09:07:00 INFO  (main) Profile prod activated."
-	env := createLoggingTestEnv(t, true, true, false, "TRACE", "%d{HH:mm:ss} %-5p (%t) %s%e%n")
+	env := createLoggingTestEnv(t, true, true, true, "TRACE", "%d{HH:mm:ss} %-5p (%t) %s%e%n")
 	conditions, err := NewLoggingTestCatalog().apply(env)
 
 	require.NoError(t, err)
 	assert.NotEmpty(t, conditions)
 	assert.NotEmpty(t, env.ExecutedTraits)
 
-	quarkusConsoleColor := false
-	jsonFormat := true
-	jsonPrettyPrint := false
-	logLevelIsTrace := false
-	logFormatIsNotDefault := false
-
-	for _, e := range env.EnvVars {
-		if e.Name == envVarQuarkusConsoleColor {
-			if e.Value == "true" {
-				quarkusConsoleColor = true
-			}
-		}
-
-		if e.Name == envVarQuarkusLogConsoleJSON {
-			if e.Value == "true" {
-				jsonFormat = true
-			}
-		}
-
-		if e.Name == envVarQuarkusLogConsoleJSONPrettyPrint {
-			if e.Value == "true" {
-				jsonPrettyPrint = true
-			}
-		}
-
-		if e.Name == envVarQuarkusLogLevel {
-			if e.Value == "TRACE" {
-				logLevelIsTrace = true
-			}
-		}
-
-		if e.Name == envVarQuarkusLogConsoleFormat {
-			if e.Value == "%d{HH:mm:ss} %-5p (%t) %s%e%n" {
-				logFormatIsNotDefault = true
-			}
-		}
-	}
-
-	assert.False(t, quarkusConsoleColor)
-	assert.True(t, jsonFormat)
-	assert.False(t, jsonPrettyPrint)
-	assert.True(t, logLevelIsTrace)
-	assert.True(t, logFormatIsNotDefault)
-	assert.NotEmpty(t, env.ExecutedTraits)
+	assert.Equal(t, "TRACE", env.ApplicationProperties["camel.k.logging.level"])
+	assert.Equal(t, "%d{HH:mm:ss} %-5p (%t) %s%e%n", env.ApplicationProperties["camel.k.logging.format"])
+	assert.Equal(t, "true", env.ApplicationProperties["camel.k.logging.json"])
+	assert.Equal(t, "true", env.ApplicationProperties["camel.k.logging.jsonPrettyPrint"])
+	assert.Equal(t, "", env.ApplicationProperties["camel.k.logging.color"])
+
+	assert.Equal(t, "${camel.k.logging.level}", env.ApplicationProperties["quarkus.log.level"])
+	assert.Equal(t, "${camel.k.logging.format}", env.ApplicationProperties["quarkus.log.console.format"])
+	assert.Equal(t, "${camel.k.logging.json}", env.ApplicationProperties["quarkus.log.console.json"])
+	assert.Equal(t, "${camel.k.logging.jsonPrettyPrint}", env.ApplicationProperties["quarkus.log.console.json.pretty-print"])
+	assert.Equal(t, "", env.ApplicationProperties["quarkus.console.color"])
 }