blob: 8c2980d88af072654ddc8ac564e978807e231749 [file] [log] [blame]
Angus Kong2bca2102014-03-11 16:27:30 -07001/*
2 * Copyright (C) 2014 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 com.android.camera.debug;
18
19public class Log {
20 public static final String CAMERA_LOGTAG_PREFIX = "CAM_";
21 private static final Log.Tag TAG = new Log.Tag("Log");
22
23 /**
24 * This class restricts the length of the log tag to be less than the
25 * framework limit and also prepends the common tag prefix defined by
26 * {@code CAMERA_LOGTAG_PREFIX}.
27 */
28 public static final class Tag {
29
30 // The length limit from Android framework is 23.
31 private static final int MAX_TAG_LEN = 23 - CAMERA_LOGTAG_PREFIX.length();
32
33 final String mValue;
34
35 public Tag(String tag) {
36 final int lenDiff = tag.length() - MAX_TAG_LEN;
37 if (lenDiff > 0) {
38 w(TAG, "Tag " + tag + " is " + lenDiff + " chars longer than limit.");
39 }
40 mValue = CAMERA_LOGTAG_PREFIX + (lenDiff > 0 ? tag.substring(0, MAX_TAG_LEN) : tag);
41 }
42
43 @Override
44 public String toString() {
45 return mValue;
46 }
47 }
48
49 private interface Logger {
50 void log(Tag tag, String msg);
51 void log(Tag tag, String msg, Throwable tr);
52 }
53
54 private static final Logger SILENT_LOGGER = new Logger() {
55 @Override
56 public void log(Tag tag, String msg) {
57 // Do nothing.
58 }
59
60 @Override
61 public void log(Tag tag, String msg, Throwable tr) {
62 // Do nothing.
63 }
64 };
65
66 private static final Logger LOGGER_D = (!CurrentConfig.get().logDebug() ? SILENT_LOGGER : new Logger() {
67 final int level = android.util.Log.DEBUG;
68
69 @Override
70 public void log(Tag tag, String msg) {
71 if (isLoggable(tag, level)) {
72 android.util.Log.d(tag.toString(), msg);
73 }
74 }
75
76 @Override
77 public void log(Tag tag, String msg, Throwable tr) {
78 if (isLoggable(tag, level)) {
79 android.util.Log.d(tag.toString(), msg, tr);
80 }
81 }
82 });
83
84 private static final Logger LOGGER_E = (!CurrentConfig.get().logError() ? SILENT_LOGGER : new Logger() {
85 final int level = android.util.Log.ERROR;
86
87 @Override
88 public void log(Tag tag, String msg) {
89 if (isLoggable(tag, level)) {
90 android.util.Log.e(tag.toString(), msg);
91 }
92 }
93
94 @Override
95 public void log(Tag tag, String msg, Throwable tr) {
96 if (isLoggable(tag, level)) {
97 android.util.Log.e(tag.toString(), msg, tr);
98 }
99 }
100 });
101
102 private static final Logger LOGGER_I = (!CurrentConfig.get().logInfo() ? SILENT_LOGGER : new Logger() {
103 final int level = android.util.Log.INFO;
104
105 @Override
106 public void log(Tag tag, String msg) {
107 if (isLoggable(tag, level)) {
108 android.util.Log.i(tag.toString(), msg);
109 }
110 }
111
112 @Override
113 public void log(Tag tag, String msg, Throwable tr) {
114 if (isLoggable(tag, level)) {
115 android.util.Log.i(tag.toString(), msg, tr);
116 }
117 }
118 });
119
120 private static final Logger LOGGER_V = (!CurrentConfig.get().logVerbose() ? SILENT_LOGGER : new Logger() {
121 final int level = android.util.Log.VERBOSE;
122
123 @Override
124 public void log(Tag tag, String msg) {
125 if (isLoggable(tag, level)) {
126 android.util.Log.v(tag.toString(), msg);
127 }
128 }
129
130 @Override
131 public void log(Tag tag, String msg, Throwable tr) {
132 if (isLoggable(tag, level)) {
133 android.util.Log.v(tag.toString(), msg, tr);
134 }
135 }
136 });
137
138 private static final Logger LOGGER_W = (!CurrentConfig.get().logWarn() ? SILENT_LOGGER : new Logger() {
139 final int level = android.util.Log.WARN;
140
141 @Override
142 public void log(Tag tag, String msg) {
143 if (isLoggable(tag, level)) {
144 android.util.Log.w(tag.toString(), msg);
145 }
146 }
147
148 @Override
149 public void log(Tag tag, String msg, Throwable tr) {
150 if (isLoggable(tag, level)) {
151 android.util.Log.w(tag.toString(), msg, tr);
152 }
153 }
154 });
155
156
157 public static void d(Tag tag, String msg) {
158 LOGGER_D.log(tag, msg);
159 }
160
161 public static void d(Tag tag, String msg, Throwable tr) {
162 LOGGER_D.log(tag, msg, tr);
163 }
164
165 public static void e(Tag tag, String msg) {
166 LOGGER_E.log(tag, msg);
167 }
168
169 public static void e(Tag tag, String msg, Throwable tr) {
170 LOGGER_E.log(tag, msg, tr);
171 }
172
173 public static void i(Tag tag, String msg) {
174 LOGGER_I.log(tag, msg);
175 }
176
177 public static void i(Tag tag, String msg, Throwable tr) {
178 LOGGER_I.log(tag, msg, tr);
179 }
180
181 public static void v(Tag tag, String msg) {
182 LOGGER_V.log(tag, msg);
183 }
184
185 public static void v(Tag tag, String msg, Throwable tr) {
186 LOGGER_V.log(tag, msg, tr);
187 }
188
189 public static void w(Tag tag, String msg) {
190 LOGGER_W.log(tag, msg);
191 }
192
193 public static void w(Tag tag, String msg, Throwable tr) {
194 LOGGER_W.log(tag, msg, tr);
195 }
196
197 private static boolean isLoggable(Tag tag, int level) {
198 try {
199 return android.util.Log.isLoggable(tag.toString(), level);
200 } catch (IllegalArgumentException ex) {
201 e(TAG, "Tag too long:" + tag);
202 return false;
203 }
204 }
205}