java-school logo

구글 앱 엔진에서 로그 기록하는 방법

appengine-web.xml에서 다음이 추가되어 있어야 한다.

<system-properties>
	<property name="java.util.logging.config.file" value="WEB-INF/logging.properties"/>
</system-properties>

logging.properties 파일을 열고 .level = WARNING을 .level = INFO로 변경한다.

로그가 필요한 코드에서 java.util.logging.Logger를 아래와 같이 사용한다.

import java.util.logging.Logger;

public class MyClass {
    private static final Logger log = Logger.getLogger(MyClass.class.getName());
    log.info("log message");
    ...
}

웹 콘솔 https://console.cloud.google.com/logs에서 로그를 볼 수 있다.

참고로, 구글 클라우드의 파일 시스템을 사용할 수 없다. 따라서 로그를 파일에 쌓이도록 하는 코드는 사용할 수 없다.

Guestbook 예제에서 로그 확인

//.. omit ..

import java.util.logging.Logger;

public class SignGuestbookServlet extends HttpServlet {
	private static final Logger log = Logger.getLogger(SignGuestbookServlet.class.getName());
	
	@Override
	public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
		Greeting greeting;

		UserService userService = UserServiceFactory.getUserService();
		User user = userService.getCurrentUser();
		String guestbookName = req.getParameter("guestbookName");
		String content = req.getParameter("content");
		if (user != null) {
			log.info("Google User: " + user.getUserId() + ":" + user.getEmail() + ":" + user.getNickname());
			greeting = new Greeting(guestbookName, content, user.getUserId(), user.getEmail());
		} else { 
			greeting = new Greeting(guestbookName, content);
		}
		// Use Objectify to save the greeting and now() is used to make the call synchronously as we
		// will immediately get a new page using redirect and we want the data to be present.
		ObjectifyService.ofy().save().entity(greeting).now();

		resp.sendRedirect("/guestbook.jsp?guestbookName=" + guestbookName);
	}
}

https://your-app-id.appspot.com/guestbook.jsp?guestbookName=default를 방문하여 Sign In를 클릭해 구글 계정에 로그인한 후, 방명록에 글을 써야 로그가 기록된다. 웹 콘솔 로그 뷰https://console.cloud.google.com/logs에서 로그를 확인한다. GAE Logging Test 로컬 테스트인 경우 명령 프롬프트에서 로그를 확인할 수 있다.

참고