/* * Copyright 2010 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ package com.google.web.bindery.requestfactory.gwt.client; import com.google.gwt.logging.client.JsonLogRecordClientUtil; import com.google.gwt.logging.client.RemoteLogHandlerBase; import com.google.web.bindery.requestfactory.shared.LoggingRequest; import com.google.web.bindery.requestfactory.shared.Receiver; import java.util.List; import java.util.logging.Level; import java.util.logging.LogRecord; /** * A Handler that does remote logging for applications using RequestFactory. */ public class RequestFactoryLogHandler extends RemoteLogHandlerBase { /** * Provides a logging request. */ public static interface LoggingRequestProvider { /** * Returns the logging request. * * @return a {@link LoggingRequest} instance */ LoggingRequest getLoggingRequest(); } private LoggingRequestProvider requestProvider; /** * Since records from this handler go accross the wire, it should only be used * for important messages, and it's Level will often be higher than the Level * being used app-wide. This handler also takes string which it will use to * exclude the messages from some loggers. This usually includes the name of * the logger(s) which will be used to log acknowledgements of activity going * accross the wire. If we did not exclude these loggers, an infinite loop * would occur. * * @param requestProvider a {@link LoggingRequestProvider} instance * @param level a logging {@link Level} * @param ignoredLoggerNames a List of Strings */ public RequestFactoryLogHandler(LoggingRequestProvider requestProvider, Level level, List<String> ignoredLoggerNames) { super(ignoredLoggerNames); this.requestProvider = requestProvider; setLevel(level); } @Override public void publish(LogRecord record) { if (!isLoggable(record)) { return; } String json = JsonLogRecordClientUtil.logRecordAsJson(record); requestProvider.getLoggingRequest().logMessage(json).fire(new Receiver<Void>() { @Override public void onSuccess(Void response) { // Do nothing } }); } }