|
27 | 27 | import static software.amazon.lambda.powertools.common.internal.LambdaHandlerProcessor.serviceName;
|
28 | 28 | import static software.amazon.lambda.powertools.logging.LoggingUtils.appendKey;
|
29 | 29 | import static software.amazon.lambda.powertools.logging.LoggingUtils.appendKeys;
|
| 30 | +import static software.amazon.lambda.powertools.logging.internal.LoggingConstants.POWERTOOLS_LOG_EVENT; |
| 31 | +import static software.amazon.lambda.powertools.logging.internal.LoggingConstants.POWERTOOLS_LOG_LEVEL; |
| 32 | +import static software.amazon.lambda.powertools.logging.internal.LoggingConstants.POWERTOOLS_SAMPLING_RATE; |
30 | 33 | import static software.amazon.lambda.powertools.logging.internal.PowertoolsLoggedFields.FUNCTION_COLD_START;
|
31 | 34 | import static software.amazon.lambda.powertools.logging.internal.PowertoolsLoggedFields.FUNCTION_TRACE_ID;
|
32 | 35 | import static software.amazon.lambda.powertools.logging.internal.PowertoolsLoggedFields.SERVICE;
|
|
67 | 70 | @DeclarePrecedence("*, software.amazon.lambda.powertools.logging.internal.LambdaLoggingAspect")
|
68 | 71 | public final class LambdaLoggingAspect {
|
69 | 72 | private static final Logger LOG = LoggerFactory.getLogger(LambdaLoggingAspect.class);
|
70 |
| - private static final String POWERTOOLS_LOG_LEVEL = System.getenv("POWERTOOLS_LOG_LEVEL"); |
71 |
| - |
72 | 73 | private static final Random SAMPLER = new Random();
|
73 |
| - private static String SAMPLING_RATE = System.getenv("POWERTOOLS_LOGGER_SAMPLE_RATE"); /* not final for test purpose */ |
74 |
| - |
75 |
| - private static String LOG_EVENT = System.getenv("POWERTOOLS_LOGGER_LOG_EVENT"); /* not final for test purpose */ |
76 |
| - |
77 |
| - private static Level LEVEL_AT_INITIALISATION; |
| 74 | + static Level LEVEL_AT_INITIALISATION; /* not final for test purpose */ |
78 | 75 |
|
79 |
| - private static final LoggingManager loggingManager; |
| 76 | + private static final LoggingManager LOGGING_MANAGER; |
80 | 77 |
|
81 | 78 | static {
|
82 |
| - loggingManager = getLoggingManagerFromServiceLoader(); |
| 79 | + LOGGING_MANAGER = getLoggingManagerFromServiceLoader(); |
83 | 80 |
|
84 |
| - LEVEL_AT_INITIALISATION = loggingManager.getLogLevel(LOG); |
| 81 | + setLogLevel(); |
| 82 | + |
| 83 | + LEVEL_AT_INITIALISATION = LOGGING_MANAGER.getLogLevel(LOG); |
| 84 | + } |
85 | 85 |
|
| 86 | + static void setLogLevel() { |
86 | 87 | if (POWERTOOLS_LOG_LEVEL != null) {
|
87 |
| - Level powertoolsLevel = getLevel(POWERTOOLS_LOG_LEVEL); |
| 88 | + Level powertoolsLevel = getLevelFromEnvironmentVariable(POWERTOOLS_LOG_LEVEL); |
88 | 89 | if (LAMBDA_LOG_LEVEL != null) {
|
89 |
| - Level lambdaLevel = getLevel(LAMBDA_LOG_LEVEL); |
| 90 | + Level lambdaLevel = getLevelFromEnvironmentVariable(LAMBDA_LOG_LEVEL); |
90 | 91 | if (powertoolsLevel.toInt() < lambdaLevel.toInt()) {
|
91 | 92 | LOG.warn("Current log level ({}) does not match AWS Lambda Advanced Logging Controls minimum log level ({}). This can lead to data loss, consider adjusting them.",
|
92 | 93 | POWERTOOLS_LOG_LEVEL, LAMBDA_LOG_LEVEL);
|
93 | 94 | }
|
94 | 95 | }
|
95 | 96 | resetLogLevels(powertoolsLevel);
|
96 | 97 | } else if (LAMBDA_LOG_LEVEL != null) {
|
97 |
| - resetLogLevels(getLevel(LAMBDA_LOG_LEVEL)); |
| 98 | + resetLogLevels(getLevelFromEnvironmentVariable(LAMBDA_LOG_LEVEL)); |
98 | 99 | }
|
99 | 100 | }
|
100 | 101 |
|
101 |
| - private static Level getLevel(String level) { |
102 |
| - if (Arrays.stream(Level.values()).anyMatch(slf4jLevel -> slf4jLevel.name().equals(level))) { |
103 |
| - return Level.valueOf(level); |
| 102 | + private static Level getLevelFromEnvironmentVariable(String level) { |
| 103 | + if (Arrays.stream(Level.values()).anyMatch(slf4jLevel -> slf4jLevel.name().equalsIgnoreCase(level))) { |
| 104 | + return Level.valueOf(level.toUpperCase()); |
104 | 105 | } else {
|
105 |
| - if ("FATAL".equals(level)) { |
| 106 | + // FATAL does not exist in slf4j |
| 107 | + if ("FATAL".equalsIgnoreCase(level)) { |
106 | 108 | return Level.ERROR;
|
107 | 109 | }
|
108 | 110 | }
|
@@ -142,7 +144,7 @@ private static LoggingManager getLoggingManagerFromServiceLoader() {
|
142 | 144 | }
|
143 | 145 |
|
144 | 146 | private static void resetLogLevels(Level logLevel) {
|
145 |
| - loggingManager.resetLogLevel(logLevel); |
| 147 | + LOGGING_MANAGER.resetLogLevel(logLevel); |
146 | 148 | }
|
147 | 149 |
|
148 | 150 | @SuppressWarnings({"EmptyMethod"})
|
@@ -170,7 +172,7 @@ public Object around(ProceedingJoinPoint pjp,
|
170 | 172 |
|
171 | 173 | getXrayTraceId().ifPresent(xRayTraceId -> appendKey(FUNCTION_TRACE_ID.getName(), xRayTraceId));
|
172 | 174 |
|
173 |
| - if (logging.logEvent() || "true".equals(LOG_EVENT)) { |
| 175 | + if (logging.logEvent() || "true".equals(POWERTOOLS_LOG_EVENT)) { |
174 | 176 | proceedArgs = logEvent(pjp);
|
175 | 177 | }
|
176 | 178 |
|
@@ -213,14 +215,14 @@ private void setLogLevelBasedOnSamplingRate(final ProceedingJoinPoint pjp,
|
213 | 215 |
|
214 | 216 | LOG.debug("Changed log level to DEBUG based on Sampling configuration. "
|
215 | 217 | + "Sampling Rate: {}, Sampler Value: {}.", samplingRate, sample);
|
216 |
| - } else if (LEVEL_AT_INITIALISATION != loggingManager.getLogLevel(LOG)) { |
| 218 | + } else if (LEVEL_AT_INITIALISATION != LOGGING_MANAGER.getLogLevel(LOG)) { |
217 | 219 | resetLogLevels(LEVEL_AT_INITIALISATION);
|
218 | 220 | }
|
219 | 221 | }
|
220 | 222 | }
|
221 | 223 |
|
222 | 224 | private double samplingRate(final Logging logging) {
|
223 |
| - String sampleRate = SAMPLING_RATE; |
| 225 | + String sampleRate = POWERTOOLS_SAMPLING_RATE; |
224 | 226 | if (null != sampleRate) {
|
225 | 227 | try {
|
226 | 228 | return Double.parseDouble(sampleRate);
|
|
0 commit comments