Skip to content

Commit bde4d14

Browse files
author
Mohammed Ehab
committed
Use Try with Resources for logger.
1 parent 4ec2a23 commit bde4d14

File tree

2 files changed

+46
-40
lines changed

2 files changed

+46
-40
lines changed

aws-lambda-java-runtime-interface-client/src/main/java/com/amazonaws/services/lambda/runtime/api/client/AWSLambda.java

+37-39
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@
3131
import java.io.IOError;
3232
import java.io.IOException;
3333
import java.io.PrintStream;
34-
import java.io.UnsupportedEncodingException;
3534
import java.lang.reflect.Constructor;
3635
import java.net.URLClassLoader;
3736
import java.security.Security;
@@ -138,6 +137,42 @@ private static LambdaRequestHandler findRequestHandler(final String handlerStrin
138137
return requestHandler;
139138
}
140139

140+
private static LambdaRequestHandler getLambdaRequestHandlerObject(String handler, LambdaContextLogger lambdaLogger) throws ClassNotFoundException, IOException {
141+
UnsafeUtil.disableIllegalAccessWarning();
142+
143+
System.setOut(new PrintStream(new LambdaOutputStream(System.out), false, "UTF-8"));
144+
System.setErr(new PrintStream(new LambdaOutputStream(System.err), false, "UTF-8"));
145+
setupRuntimeLogger(lambdaLogger);
146+
147+
runtimeClient = new LambdaRuntimeApiClientImpl(LambdaEnvironment.RUNTIME_API);
148+
149+
String taskRoot = System.getProperty("user.dir");
150+
String libRoot = "/opt/java";
151+
// Make system classloader the customer classloader's parent to ensure any aws-lambda-java-core classes
152+
// are loaded from the system classloader.
153+
customerClassLoader = new CustomerClassLoader(taskRoot, libRoot, ClassLoader.getSystemClassLoader());
154+
Thread.currentThread().setContextClassLoader(customerClassLoader);
155+
156+
// Load the user's handler
157+
LambdaRequestHandler requestHandler = null;
158+
try {
159+
requestHandler = findRequestHandler(handler, customerClassLoader);
160+
} catch (UserFault userFault) {
161+
lambdaLogger.log(userFault.reportableError(), lambdaLogger.getLogFormat() == LogFormat.JSON ? LogLevel.ERROR : LogLevel.UNDEFINED);
162+
LambdaError error = new LambdaError(
163+
LambdaErrorConverter.fromUserFault(userFault),
164+
RapidErrorType.BadFunctionCode);
165+
runtimeClient.reportInitError(error);
166+
System.exit(1);
167+
}
168+
169+
if (INIT_TYPE_SNAP_START.equals(AWS_LAMBDA_INITIALIZATION_TYPE)) {
170+
onInitComplete(lambdaLogger);
171+
}
172+
173+
return requestHandler;
174+
}
175+
141176
public static void setupRuntimeLogger(LambdaLogger lambdaLogger)
142177
throws ClassNotFoundException {
143178
ReflectUtil.setStaticField(
@@ -178,8 +213,7 @@ private static LogSink createLogSink() {
178213
}
179214

180215
public static void main(String[] args) throws Throwable {
181-
try {
182-
LambdaContextLogger logger = initLogger();
216+
try (LambdaContextLogger logger = initLogger()){
183217
LambdaRequestHandler lambdaRequestHandler = getLambdaRequestHandlerObject(args[0], logger);
184218
startRuntimeLoop(lambdaRequestHandler, logger);
185219

@@ -198,42 +232,6 @@ private static LambdaContextLogger initLogger() {
198232
return logger;
199233
}
200234

201-
private static LambdaRequestHandler getLambdaRequestHandlerObject(String handler, LambdaContextLogger lambdaLogger) throws UnsupportedEncodingException, ClassNotFoundException, IOException {
202-
UnsafeUtil.disableIllegalAccessWarning();
203-
204-
System.setOut(new PrintStream(new LambdaOutputStream(System.out), false, "UTF-8"));
205-
System.setErr(new PrintStream(new LambdaOutputStream(System.err), false, "UTF-8"));
206-
setupRuntimeLogger(lambdaLogger);
207-
208-
runtimeClient = new LambdaRuntimeApiClientImpl(LambdaEnvironment.RUNTIME_API);
209-
210-
String taskRoot = System.getProperty("user.dir");
211-
String libRoot = "/opt/java";
212-
// Make system classloader the customer classloader's parent to ensure any aws-lambda-java-core classes
213-
// are loaded from the system classloader.
214-
customerClassLoader = new CustomerClassLoader(taskRoot, libRoot, ClassLoader.getSystemClassLoader());
215-
Thread.currentThread().setContextClassLoader(customerClassLoader);
216-
217-
// Load the user's handler
218-
LambdaRequestHandler requestHandler = null;
219-
try {
220-
requestHandler = findRequestHandler(handler, customerClassLoader);
221-
} catch (UserFault userFault) {
222-
lambdaLogger.log(userFault.reportableError(), lambdaLogger.getLogFormat() == LogFormat.JSON ? LogLevel.ERROR : LogLevel.UNDEFINED);
223-
LambdaError error = new LambdaError(
224-
LambdaErrorConverter.fromUserFault(userFault),
225-
RapidErrorType.BadFunctionCode);
226-
runtimeClient.reportInitError(error);
227-
System.exit(1);
228-
}
229-
230-
if (INIT_TYPE_SNAP_START.equals(AWS_LAMBDA_INITIALIZATION_TYPE)) {
231-
onInitComplete(lambdaLogger);
232-
}
233-
234-
return requestHandler;
235-
}
236-
237235
private static void startRuntimeLoop(LambdaRequestHandler requestHandler, LambdaContextLogger lambdaLogger) throws Throwable {
238236
boolean shouldExit = false;
239237
while (!shouldExit) {

aws-lambda-java-runtime-interface-client/src/main/java/com/amazonaws/services/lambda/runtime/api/client/logging/LambdaContextLogger.java

+9-1
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,10 @@
88
import com.amazonaws.services.lambda.runtime.logging.LogFormat;
99
import com.amazonaws.services.lambda.runtime.logging.LogLevel;
1010
import static java.nio.charset.StandardCharsets.UTF_8;
11+
import java.io.Closeable;
12+
import java.io.IOException;
1113

12-
public class LambdaContextLogger extends AbstractLambdaLogger {
14+
public class LambdaContextLogger extends AbstractLambdaLogger implements Closeable{
1315
// If a null string is passed in, replace it with "null",
1416
// replicating the behavior of System.out.println(null);
1517
private static final byte[] NULL_BYTES_VALUE = "null".getBytes(UTF_8);
@@ -29,4 +31,10 @@ protected void logMessage(byte[] message, LogLevel logLevel) {
2931
sink.log(logLevel, this.logFormat, message);
3032
}
3133
}
34+
35+
@Override
36+
public void close() throws IOException {
37+
sink.close();
38+
39+
}
3240
}

0 commit comments

Comments
 (0)