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