152dc295e93679baa72f95b5b873dd21d5a2ccb32Geremy Condra/* 252dc295e93679baa72f95b5b873dd21d5a2ccb32Geremy Condra * Copyright (C) 2012 The Android Open Source Project 352dc295e93679baa72f95b5b873dd21d5a2ccb32Geremy Condra * 452dc295e93679baa72f95b5b873dd21d5a2ccb32Geremy Condra * Licensed under the Apache License, Version 2.0 (the "License"); 552dc295e93679baa72f95b5b873dd21d5a2ccb32Geremy Condra * you may not use this file except in compliance with the License. 652dc295e93679baa72f95b5b873dd21d5a2ccb32Geremy Condra * You may obtain a copy of the License at 752dc295e93679baa72f95b5b873dd21d5a2ccb32Geremy Condra * 852dc295e93679baa72f95b5b873dd21d5a2ccb32Geremy Condra * http://www.apache.org/licenses/LICENSE-2.0 952dc295e93679baa72f95b5b873dd21d5a2ccb32Geremy Condra * 1052dc295e93679baa72f95b5b873dd21d5a2ccb32Geremy Condra * Unless required by applicable law or agreed to in writing, software 1152dc295e93679baa72f95b5b873dd21d5a2ccb32Geremy Condra * distributed under the License is distributed on an "AS IS" BASIS, 1252dc295e93679baa72f95b5b873dd21d5a2ccb32Geremy Condra * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1352dc295e93679baa72f95b5b873dd21d5a2ccb32Geremy Condra * See the License for the specific language governing permissions and 1452dc295e93679baa72f95b5b873dd21d5a2ccb32Geremy Condra * limitations under the License. 1552dc295e93679baa72f95b5b873dd21d5a2ccb32Geremy Condra */ 1652dc295e93679baa72f95b5b873dd21d5a2ccb32Geremy Condra 1752dc295e93679baa72f95b5b873dd21d5a2ccb32Geremy Condrapackage libcore.io; 1852dc295e93679baa72f95b5b873dd21d5a2ccb32Geremy Condra 1952dc295e93679baa72f95b5b873dd21d5a2ccb32Geremy Condrapublic final class EventLogger { 2052dc295e93679baa72f95b5b873dd21d5a2ccb32Geremy Condra 2152dc295e93679baa72f95b5b873dd21d5a2ccb32Geremy Condra /** 2252dc295e93679baa72f95b5b873dd21d5a2ccb32Geremy Condra * Hook for customizing how events are reported. 2352dc295e93679baa72f95b5b873dd21d5a2ccb32Geremy Condra */ 2452dc295e93679baa72f95b5b873dd21d5a2ccb32Geremy Condra private static volatile Reporter REPORTER = new DefaultReporter(); 2552dc295e93679baa72f95b5b873dd21d5a2ccb32Geremy Condra 2652dc295e93679baa72f95b5b873dd21d5a2ccb32Geremy Condra /** 2752dc295e93679baa72f95b5b873dd21d5a2ccb32Geremy Condra * Used to replace default Reporter for logging events. Must be non-null. 2852dc295e93679baa72f95b5b873dd21d5a2ccb32Geremy Condra */ 2952dc295e93679baa72f95b5b873dd21d5a2ccb32Geremy Condra public static void setReporter(Reporter reporter) { 3052dc295e93679baa72f95b5b873dd21d5a2ccb32Geremy Condra if (reporter == null) { 3152dc295e93679baa72f95b5b873dd21d5a2ccb32Geremy Condra throw new NullPointerException("reporter == null"); 3252dc295e93679baa72f95b5b873dd21d5a2ccb32Geremy Condra } 3352dc295e93679baa72f95b5b873dd21d5a2ccb32Geremy Condra REPORTER = reporter; 3452dc295e93679baa72f95b5b873dd21d5a2ccb32Geremy Condra } 3552dc295e93679baa72f95b5b873dd21d5a2ccb32Geremy Condra 3652dc295e93679baa72f95b5b873dd21d5a2ccb32Geremy Condra /** 3752dc295e93679baa72f95b5b873dd21d5a2ccb32Geremy Condra * Returns non-null Reporter. 3852dc295e93679baa72f95b5b873dd21d5a2ccb32Geremy Condra */ 3952dc295e93679baa72f95b5b873dd21d5a2ccb32Geremy Condra public static Reporter getReporter() { 4052dc295e93679baa72f95b5b873dd21d5a2ccb32Geremy Condra return REPORTER; 4152dc295e93679baa72f95b5b873dd21d5a2ccb32Geremy Condra } 4252dc295e93679baa72f95b5b873dd21d5a2ccb32Geremy Condra 4352dc295e93679baa72f95b5b873dd21d5a2ccb32Geremy Condra /** 4452dc295e93679baa72f95b5b873dd21d5a2ccb32Geremy Condra * Interface to allow customization of reporting behavior. 4552dc295e93679baa72f95b5b873dd21d5a2ccb32Geremy Condra */ 4652dc295e93679baa72f95b5b873dd21d5a2ccb32Geremy Condra public static interface Reporter { 4752dc295e93679baa72f95b5b873dd21d5a2ccb32Geremy Condra public void report (int code, Object... list); 4852dc295e93679baa72f95b5b873dd21d5a2ccb32Geremy Condra } 4952dc295e93679baa72f95b5b873dd21d5a2ccb32Geremy Condra 5052dc295e93679baa72f95b5b873dd21d5a2ccb32Geremy Condra /** 5152dc295e93679baa72f95b5b873dd21d5a2ccb32Geremy Condra * Default Reporter which reports events to the log. 5252dc295e93679baa72f95b5b873dd21d5a2ccb32Geremy Condra */ 5352dc295e93679baa72f95b5b873dd21d5a2ccb32Geremy Condra private static final class DefaultReporter implements Reporter { 5452dc295e93679baa72f95b5b873dd21d5a2ccb32Geremy Condra @Override 5552dc295e93679baa72f95b5b873dd21d5a2ccb32Geremy Condra public void report (int code, Object... list) { 5652dc295e93679baa72f95b5b873dd21d5a2ccb32Geremy Condra StringBuilder sb = new StringBuilder(); 5752dc295e93679baa72f95b5b873dd21d5a2ccb32Geremy Condra sb.append(code); 5852dc295e93679baa72f95b5b873dd21d5a2ccb32Geremy Condra for (Object o : list) { 5952dc295e93679baa72f95b5b873dd21d5a2ccb32Geremy Condra sb.append(","); 6052dc295e93679baa72f95b5b873dd21d5a2ccb32Geremy Condra sb.append(o.toString()); 6152dc295e93679baa72f95b5b873dd21d5a2ccb32Geremy Condra } 6252dc295e93679baa72f95b5b873dd21d5a2ccb32Geremy Condra System.out.println(sb); 6352dc295e93679baa72f95b5b873dd21d5a2ccb32Geremy Condra } 6452dc295e93679baa72f95b5b873dd21d5a2ccb32Geremy Condra } 6552dc295e93679baa72f95b5b873dd21d5a2ccb32Geremy Condra 6652dc295e93679baa72f95b5b873dd21d5a2ccb32Geremy Condra public static void writeEvent(int code, Object... list) { 6752dc295e93679baa72f95b5b873dd21d5a2ccb32Geremy Condra getReporter().report(code, list); 6852dc295e93679baa72f95b5b873dd21d5a2ccb32Geremy Condra } 6952dc295e93679baa72f95b5b873dd21d5a2ccb32Geremy Condra} 70