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