1/*
2 * Copyright (C) 2013 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 */
16package com.example.android.common.logger;
17
18/**
19 * Helper class for a list (or tree) of LoggerNodes.
20 *
21 * <p>When this is set as the head of the list,
22 * an instance of it can function as a drop-in replacement for {@link android.util.Log}.
23 * Most of the methods in this class server only to map a method call in Log to its equivalent
24 * in LogNode.</p>
25 */
26public class Log {
27    // Grabbing the native values from Android's native logging facilities,
28    // to make for easy migration and interop.
29    public static final int NONE = -1;
30    public static final int VERBOSE = android.util.Log.VERBOSE;
31    public static final int DEBUG = android.util.Log.DEBUG;
32    public static final int INFO = android.util.Log.INFO;
33    public static final int WARN = android.util.Log.WARN;
34    public static final int ERROR = android.util.Log.ERROR;
35    public static final int ASSERT = android.util.Log.ASSERT;
36
37    // Stores the beginning of the LogNode topology.
38    private static LogNode mLogNode;
39
40    /**
41     * Returns the next LogNode in the linked list.
42     */
43    public static LogNode getLogNode() {
44        return mLogNode;
45    }
46
47    /**
48     * Sets the LogNode data will be sent to.
49     */
50    public static void setLogNode(LogNode node) {
51        mLogNode = node;
52    }
53
54    /**
55     * Instructs the LogNode to print the log data provided. Other LogNodes can
56     * be chained to the end of the LogNode as desired.
57     *
58     * @param priority Log level of the data being logged. Verbose, Error, etc.
59     * @param tag Tag for for the log data. Can be used to organize log statements.
60     * @param msg The actual message to be logged.
61     * @param tr If an exception was thrown, this can be sent along for the logging facilities
62     *           to extract and print useful information.
63     */
64    public static void println(int priority, String tag, String msg, Throwable tr) {
65        if (mLogNode != null) {
66            mLogNode.println(priority, tag, msg, tr);
67        }
68    }
69
70    /**
71     * Instructs the LogNode to print the log data provided. Other LogNodes can
72     * be chained to the end of the LogNode as desired.
73     *
74     * @param priority Log level of the data being logged. Verbose, Error, etc.
75     * @param tag Tag for for the log data. Can be used to organize log statements.
76     * @param msg The actual message to be logged. The actual message to be logged.
77     */
78    public static void println(int priority, String tag, String msg) {
79        println(priority, tag, msg, null);
80    }
81
82   /**
83     * Prints a message at VERBOSE priority.
84     *
85     * @param tag Tag for for the log data. Can be used to organize log statements.
86     * @param msg The actual message to be logged.
87     * @param tr If an exception was thrown, this can be sent along for the logging facilities
88     *           to extract and print useful information.
89     */
90    public static void v(String tag, String msg, Throwable tr) {
91        println(VERBOSE, tag, msg, tr);
92    }
93
94    /**
95     * Prints a message at VERBOSE priority.
96     *
97     * @param tag Tag for for the log data. Can be used to organize log statements.
98     * @param msg The actual message to be logged.
99     */
100    public static void v(String tag, String msg) {
101        v(tag, msg, null);
102    }
103
104
105    /**
106     * Prints a message at DEBUG priority.
107     *
108     * @param tag Tag for for the log data. Can be used to organize log statements.
109     * @param msg The actual message to be logged.
110     * @param tr If an exception was thrown, this can be sent along for the logging facilities
111     *           to extract and print useful information.
112     */
113    public static void d(String tag, String msg, Throwable tr) {
114        println(DEBUG, tag, msg, tr);
115    }
116
117    /**
118     * Prints a message at DEBUG priority.
119     *
120     * @param tag Tag for for the log data. Can be used to organize log statements.
121     * @param msg The actual message to be logged.
122     */
123    public static void d(String tag, String msg) {
124        d(tag, msg, null);
125    }
126
127    /**
128     * Prints a message at INFO priority.
129     *
130     * @param tag Tag for for the log data. Can be used to organize log statements.
131     * @param msg The actual message to be logged.
132     * @param tr If an exception was thrown, this can be sent along for the logging facilities
133     *           to extract and print useful information.
134     */
135    public static void i(String tag, String msg, Throwable tr) {
136        println(INFO, tag, msg, tr);
137    }
138
139    /**
140     * Prints a message at INFO priority.
141     *
142     * @param tag Tag for for the log data. Can be used to organize log statements.
143     * @param msg The actual message to be logged.
144     */
145    public static void i(String tag, String msg) {
146        i(tag, msg, null);
147    }
148
149    /**
150     * Prints a message at WARN priority.
151     *
152     * @param tag Tag for for the log data. Can be used to organize log statements.
153     * @param msg The actual message to be logged.
154     * @param tr If an exception was thrown, this can be sent along for the logging facilities
155     *           to extract and print useful information.
156     */
157    public static void w(String tag, String msg, Throwable tr) {
158        println(WARN, tag, msg, tr);
159    }
160
161    /**
162     * Prints a message at WARN priority.
163     *
164     * @param tag Tag for for the log data. Can be used to organize log statements.
165     * @param msg The actual message to be logged.
166     */
167    public static void w(String tag, String msg) {
168        w(tag, msg, null);
169    }
170
171    /**
172     * Prints a message at WARN priority.
173     *
174     * @param tag Tag for for the log data. Can be used to organize log statements.
175     * @param tr If an exception was thrown, this can be sent along for the logging facilities
176     *           to extract and print useful information.
177     */
178    public static void w(String tag, Throwable tr) {
179        w(tag, null, tr);
180    }
181
182    /**
183     * Prints a message at ERROR priority.
184     *
185     * @param tag Tag for for the log data. Can be used to organize log statements.
186     * @param msg The actual message to be logged.
187     * @param tr If an exception was thrown, this can be sent along for the logging facilities
188     *           to extract and print useful information.
189     */
190    public static void e(String tag, String msg, Throwable tr) {
191        println(ERROR, tag, msg, tr);
192    }
193
194    /**
195     * Prints a message at ERROR priority.
196     *
197     * @param tag Tag for for the log data. Can be used to organize log statements.
198     * @param msg The actual message to be logged.
199     */
200    public static void e(String tag, String msg) {
201        e(tag, msg, null);
202    }
203
204    /**
205     * Prints a message at ASSERT priority.
206     *
207     * @param tag Tag for for the log data. Can be used to organize log statements.
208     * @param msg The actual message to be logged.
209     * @param tr If an exception was thrown, this can be sent along for the logging facilities
210     *           to extract and print useful information.
211     */
212    public static void wtf(String tag, String msg, Throwable tr) {
213        println(ASSERT, tag, msg, tr);
214    }
215
216    /**
217     * Prints a message at ASSERT priority.
218     *
219     * @param tag Tag for for the log data. Can be used to organize log statements.
220     * @param msg The actual message to be logged.
221     */
222    public static void wtf(String tag, String msg) {
223        wtf(tag, msg, null);
224    }
225
226    /**
227     * Prints a message at ASSERT priority.
228     *
229     * @param tag Tag for for the log data. Can be used to organize log statements.
230     * @param tr If an exception was thrown, this can be sent along for the logging facilities
231     *           to extract and print useful information.
232     */
233    public static void wtf(String tag, Throwable tr) {
234        wtf(tag, null, tr);
235    }
236}
237