Skip to content

Commit 3eb6f3c

Browse files
committed
[XEN-3155] allow configuration of log levels with env variable
1 parent 522e5dc commit 3eb6f3c

File tree

3 files changed

+109
-0
lines changed

3 files changed

+109
-0
lines changed

2repository/build.gradle

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,12 @@ subprojects {
5555

5656
environmentVariable('ALFRESCO_FLAVOR', "${project.alfresco.flavor}")
5757
environmentVariable('ALFRESCO_VERSION', "${project.alfresco.version.major}.${project.alfresco.version.minor}.${project.alfresco.version.rev}")
58+
59+
if (project.alfresco.version.major == 7 && project.alfresco.version.minor <= 3) {
60+
environmentVariable('LOG4J_VERSION', '1')
61+
} else {
62+
environmentVariable('LOG4J_VERSION', '2')
63+
}
5864
}
5965

6066
createDockerFile.dependsOn(parentImage)

2share/build.gradle

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,12 @@ subprojects {
2222
createDockerFile {
2323
environmentVariable('SHARE_FLAVOR', "${project.share.flavor}")
2424
environmentVariable('SHARE_VERSION', "${project.share.version.major}.${project.share.version.minor}.${project.share.version.rev}")
25+
26+
if (project.share.version.major == 7 && project.share.version.minor <= 3) {
27+
environmentVariable('LOG4J_VERSION', '1')
28+
} else {
29+
environmentVariable('LOG4J_VERSION', '2')
30+
}
2531
}
2632

2733
createDockerFile.dependsOn(parentImage)
Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
#!/bin/bash
2+
set -e
3+
4+
# This script generates a complete log4j configuration file based on
5+
# LOG_LEVEL_ environment variables and tells the Java process to use it.
6+
7+
LOG_CONFIG_FILE="/generated-log-config.properties"
8+
9+
echo "Generating log config at: ${LOG_CONFIG_FILE}"
10+
echo "Using Log4j Version: ${LOG4J_VERSION}"
11+
12+
# Start with a clean file
13+
touch "${LOG_CONFIG_FILE}"
14+
15+
# Now generate logger configs from env variables
16+
# We need to pre-process for log4j2's 'loggers = name1,name2' syntax
17+
logger_list=""
18+
logger_configs=""
19+
20+
for var in $(env); do
21+
if echo "$var" | grep -q "^LOG_LEVEL_"; then
22+
var_name=$(echo "$var" | cut -d= -f1)
23+
var_value=$(echo "$var" | cut -d= -f2)
24+
25+
# Convert LOG_LEVEL_org_alfresco -> org.alfresco
26+
logger_name=$(echo "$var_name" | sed 's/LOG_LEVEL_//' | sed 's/_/./g')
27+
28+
if [ -n "$logger_name" ] && [ -n "$var_value" ]; then
29+
echo "Applying log level: ${logger_name}=${var_value}"
30+
31+
if [ "$LOG4J_VERSION" = "1" ]; then
32+
# Log4j 1.x syntax
33+
logger_configs="${logger_configs}log4j.logger.${logger_name}=${var_value}\n"
34+
else
35+
# Log4j 2.x syntax
36+
logger_list="${logger_list}${logger_name},"
37+
# Add the logger definition
38+
logger_configs="${logger_configs}logger.${logger_name}.name = ${logger_name}\n"
39+
logger_configs="${logger_configs}logger.${logger_name}.level = ${var_value}\n"
40+
fi
41+
fi
42+
fi
43+
done
44+
45+
# Add default appender and root configuration
46+
# TODO: Specify a base configuration file somewhere in the project instead and use that
47+
48+
if [ "$LOG4J_VERSION" = "1" ]; then
49+
# --- Log4j 1.x Config ---
50+
echo "Generating Log4j config."
51+
echo "# Auto-generated Log4j 1.x config" >> "${LOG_CONFIG_FILE}"
52+
53+
# Add a basic console appender
54+
echo "log4j.rootLogger = WARN, CONSOLE" >> "${LOG_CONFIG_FILE}"
55+
echo "log4j.appender.CONSOLE = org.apache.log4j.ConsoleAppender" >> "${LOG_CONFIG_FILE}"
56+
echo "log4j.appender.CONSOLE.layout = org.apache.log4j.PatternLayout" >> "${LOG_CONFIG_FILE}"
57+
echo "log4j.appender.CONSOLE.layout.ConversionPattern = %d{ISO8601} [%t] %-5p %c - %m%n" >> "${LOG_CONFIG_FILE}"
58+
59+
# Add the custom loggers
60+
echo -e "\n# Custom Log Levels" >> "${LOG_CONFIG_FILE}"
61+
echo -e "${logger_configs}" >> "${LOG_CONFIG_FILE}"
62+
63+
# Tell Java to use this file
64+
JAVA_OPTS="$JAVA_OPTS -Dlog4j.configuration=file://${LOG_CONFIG_FILE}"
65+
else
66+
# --- Log4j 2.x Config ---
67+
echo "# Auto-generated Log4j 2.x config" >> "${LOG_CONFIG_FILE}"
68+
69+
# Add a basic console appender
70+
echo "appenders = console" >> "${LOG_CONFIG_FILE}"
71+
echo "appender.console.type = Console" >> "${LOG_CONFIG_FILE}"
72+
echo "appender.console.name = STDOUT" >> "${LOG_CONFIG_FILE}"
73+
echo "appender.console.layout.type = PatternLayout" >> "${LOG_CONFIG_FILE}"
74+
echo "appender.console.layout.pattern = %d{ISO8601} [%t] %-5p %c - %m%n" >> "${LOG_CONFIG_FILE}"
75+
76+
# Add root logger
77+
echo "rootLogger.level = WARN" >> "${LOG_CONFIG_FILE}"
78+
echo "rootLogger.appenderRefs = console" >> "${LOG_CONFIG_FILE}"
79+
echo "rootLogger.appenderRef.console.ref = STDOUT" >> "${LOG_CONFIG_FILE}"
80+
81+
# Add the custom loggers
82+
echo -e "\n# Custom Log Levels" >> "${LOG_CONFIG_FILE}"
83+
if [ -n "$logger_list" ]; then
84+
# Add the 'loggers = name1,name2' list (stripping last comma)
85+
echo "loggers = ${logger_list%,}" >> "${LOG_CONFIG_FILE}"
86+
# Add the logger definitions
87+
echo -e "${logger_configs}" >> "${LOG_CONFIG_FILE}"
88+
fi
89+
90+
# Tell Java to use this file
91+
JAVA_OPTS="$JAVA_OPTS -Dlog4j.configurationFile=${LOG_CONFIG_FILE}"
92+
fi
93+
94+
# Export new Java options with updated log config
95+
export JAVA_OPTS
96+
97+
echo "Log configuration complete. JAVA_OPTS updated."

0 commit comments

Comments
 (0)