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