1f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes/* 2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one or more 3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * contributor license agreements. See the NOTICE file distributed with 4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * this work for additional information regarding copyright ownership. 5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0 6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * (the "License"); you may not use this file except in compliance with 7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the License. You may obtain a copy of the License at 8f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 10f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * See the License for the specific language governing permissions and 15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * limitations under the License. 16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage java.util.logging; 19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.PrintWriter; 21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.StringWriter; 22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.text.MessageFormat; 23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Date; 24a7a70410e26802f3ab480b08a1ab499338cb6f7eJesse Wilsonimport libcore.io.IoUtils; 25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/** 27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code SimpleFormatter} can be used to print a summary of the information 28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * contained in a {@code LogRecord} object in a human readable format. 29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class SimpleFormatter extends Formatter { 31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Constructs a new {@code SimpleFormatter}. 33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public SimpleFormatter() { 35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Converts a {@link LogRecord} object into a human readable string 39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * representation. 409a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * 41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param r 42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the log record to be formatted into a string. 43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the formatted string. 44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public String format(LogRecord r) { 47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project StringBuilder sb = new StringBuilder(); 48f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes sb.append(MessageFormat.format("{0, date} {0, time} ", 49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new Object[] { new Date(r.getMillis()) })); 50f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes sb.append(r.getSourceClassName()).append(" "); 51b4acb463582a510894aeb85f4fa8f35b339449c8Elliott Hughes sb.append(r.getSourceMethodName()).append(System.lineSeparator()); 52f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes sb.append(r.getLevel().getName()).append(": "); 53b4acb463582a510894aeb85f4fa8f35b339449c8Elliott Hughes sb.append(formatMessage(r)).append(System.lineSeparator()); 54b46dab348e2007bc08abaf7ecae34d89a2474e50Elliott Hughes if (r.getThrown() != null) { 55f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes sb.append("Throwable occurred: "); 56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Throwable t = r.getThrown(); 57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project PrintWriter pw = null; 58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project StringWriter sw = new StringWriter(); 60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project pw = new PrintWriter(sw); 61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project t.printStackTrace(pw); 62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sb.append(sw.toString()); 63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } finally { 64a7a70410e26802f3ab480b08a1ab499338cb6f7eJesse Wilson IoUtils.closeQuietly(pw); 65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return sb.toString(); 68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 70