1/*
2 * Copyright (C) 2006 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package android.util;
18
19import java.io.PrintWriter;
20import java.io.StringWriter;
21import java.net.UnknownHostException;
22
23/**
24 * Mock Log implementation for testing on non android host.
25 */
26public final class Log {
27
28    /**
29     * Priority constant for the println method; use Log.v.
30     */
31    public static final int VERBOSE = 2;
32
33    /**
34     * Priority constant for the println method; use Log.d.
35     */
36    public static final int DEBUG = 3;
37
38    /**
39     * Priority constant for the println method; use Log.i.
40     */
41    public static final int INFO = 4;
42
43    /**
44     * Priority constant for the println method; use Log.w.
45     */
46    public static final int WARN = 5;
47
48    /**
49     * Priority constant for the println method; use Log.e.
50     */
51    public static final int ERROR = 6;
52
53    /**
54     * Priority constant for the println method.
55     */
56    public static final int ASSERT = 7;
57
58    private Log() {
59    }
60
61    /**
62     * Send a {@link #VERBOSE} log message.
63     * @param tag Used to identify the source of a log message.  It usually identifies
64     *        the class or activity where the log call occurs.
65     * @param msg The message you would like logged.
66     */
67    public static int v(String tag, String msg) {
68        return println(LOG_ID_MAIN, VERBOSE, tag, msg);
69    }
70
71    /**
72     * Send a {@link #VERBOSE} log message and log the exception.
73     * @param tag Used to identify the source of a log message.  It usually identifies
74     *        the class or activity where the log call occurs.
75     * @param msg The message you would like logged.
76     * @param tr An exception to log
77     */
78    public static int v(String tag, String msg, Throwable tr) {
79        return println(LOG_ID_MAIN, VERBOSE, tag, msg + '\n' + getStackTraceString(tr));
80    }
81
82    /**
83     * Send a {@link #DEBUG} log message.
84     * @param tag Used to identify the source of a log message.  It usually identifies
85     *        the class or activity where the log call occurs.
86     * @param msg The message you would like logged.
87     */
88    public static int d(String tag, String msg) {
89        return println(LOG_ID_MAIN, DEBUG, tag, msg);
90    }
91
92    /**
93     * Send a {@link #DEBUG} log message and log the exception.
94     * @param tag Used to identify the source of a log message.  It usually identifies
95     *        the class or activity where the log call occurs.
96     * @param msg The message you would like logged.
97     * @param tr An exception to log
98     */
99    public static int d(String tag, String msg, Throwable tr) {
100        return println(LOG_ID_MAIN, DEBUG, tag, msg + '\n' + getStackTraceString(tr));
101    }
102
103    /**
104     * Send an {@link #INFO} log message.
105     * @param tag Used to identify the source of a log message.  It usually identifies
106     *        the class or activity where the log call occurs.
107     * @param msg The message you would like logged.
108     */
109    public static int i(String tag, String msg) {
110        return println(LOG_ID_MAIN, INFO, tag, msg);
111    }
112
113    /**
114     * Send a {@link #INFO} log message and log the exception.
115     * @param tag Used to identify the source of a log message.  It usually identifies
116     *        the class or activity where the log call occurs.
117     * @param msg The message you would like logged.
118     * @param tr An exception to log
119     */
120    public static int i(String tag, String msg, Throwable tr) {
121        return println(LOG_ID_MAIN, INFO, tag, msg + '\n' + getStackTraceString(tr));
122    }
123
124    /**
125     * Send a {@link #WARN} log message.
126     * @param tag Used to identify the source of a log message.  It usually identifies
127     *        the class or activity where the log call occurs.
128     * @param msg The message you would like logged.
129     */
130    public static int w(String tag, String msg) {
131        return println(LOG_ID_MAIN, WARN, tag, msg);
132    }
133
134    /**
135     * Send a {@link #WARN} log message and log the exception.
136     * @param tag Used to identify the source of a log message.  It usually identifies
137     *        the class or activity where the log call occurs.
138     * @param msg The message you would like logged.
139     * @param tr An exception to log
140     */
141    public static int w(String tag, String msg, Throwable tr) {
142        return println(LOG_ID_MAIN, WARN, tag, msg + '\n' + getStackTraceString(tr));
143    }
144
145    /*
146     * Send a {@link #WARN} log message and log the exception.
147     * @param tag Used to identify the source of a log message.  It usually identifies
148     *        the class or activity where the log call occurs.
149     * @param tr An exception to log
150     */
151    public static int w(String tag, Throwable tr) {
152        return println(LOG_ID_MAIN, WARN, tag, getStackTraceString(tr));
153    }
154
155    /**
156     * Send an {@link #ERROR} log message.
157     * @param tag Used to identify the source of a log message.  It usually identifies
158     *        the class or activity where the log call occurs.
159     * @param msg The message you would like logged.
160     */
161    public static int e(String tag, String msg) {
162        return println(LOG_ID_MAIN, ERROR, tag, msg);
163    }
164
165    /**
166     * Send a {@link #ERROR} log message and log the exception.
167     * @param tag Used to identify the source of a log message.  It usually identifies
168     *        the class or activity where the log call occurs.
169     * @param msg The message you would like logged.
170     * @param tr An exception to log
171     */
172    public static int e(String tag, String msg, Throwable tr) {
173        return println(LOG_ID_MAIN, ERROR, tag, msg + '\n' + getStackTraceString(tr));
174    }
175
176    /**
177     * Handy function to get a loggable stack trace from a Throwable
178     * @param tr An exception to log
179     */
180    public static String getStackTraceString(Throwable tr) {
181        if (tr == null) {
182            return "";
183        }
184
185        // This is to reduce the amount of log spew that apps do in the non-error
186        // condition of the network being unavailable.
187        Throwable t = tr;
188        while (t != null) {
189            if (t instanceof UnknownHostException) {
190                return "";
191            }
192            t = t.getCause();
193        }
194
195        StringWriter sw = new StringWriter();
196        PrintWriter pw = new PrintWriter(sw);
197        tr.printStackTrace(pw);
198        pw.flush();
199        return sw.toString();
200    }
201
202    /**
203     * Low-level logging call.
204     * @param priority The priority/type of this log message
205     * @param tag Used to identify the source of a log message.  It usually identifies
206     *        the class or activity where the log call occurs.
207     * @param msg The message you would like logged.
208     * @return The number of bytes written.
209     */
210    public static int println(int priority, String tag, String msg) {
211        return println(LOG_ID_MAIN, priority, tag, msg);
212    }
213
214    /** @hide */ public static final int LOG_ID_MAIN = 0;
215    /** @hide */ public static final int LOG_ID_RADIO = 1;
216    /** @hide */ public static final int LOG_ID_EVENTS = 2;
217    /** @hide */ public static final int LOG_ID_SYSTEM = 3;
218    /** @hide */ public static final int LOG_ID_CRASH = 4;
219
220    /** @hide */ @SuppressWarnings("unused")
221    public static int println(int bufID,
222            int priority, String tag, String msg) {
223        return 0;
224    }
225}
226