10c96e05ef24dc72fa31b6915ed40f09dc7238276mukesh agrawal/* 20c96e05ef24dc72fa31b6915ed40f09dc7238276mukesh agrawal * Copyright (C) 2016 The Android Open Source Project 30c96e05ef24dc72fa31b6915ed40f09dc7238276mukesh agrawal * 40c96e05ef24dc72fa31b6915ed40f09dc7238276mukesh agrawal * Licensed under the Apache License, Version 2.0 (the "License"); 50c96e05ef24dc72fa31b6915ed40f09dc7238276mukesh agrawal * you may not use this file except in compliance with the License. 60c96e05ef24dc72fa31b6915ed40f09dc7238276mukesh agrawal * You may obtain a copy of the License at 70c96e05ef24dc72fa31b6915ed40f09dc7238276mukesh agrawal * 80c96e05ef24dc72fa31b6915ed40f09dc7238276mukesh agrawal * http://www.apache.org/licenses/LICENSE-2.0 90c96e05ef24dc72fa31b6915ed40f09dc7238276mukesh agrawal * 100c96e05ef24dc72fa31b6915ed40f09dc7238276mukesh agrawal * Unless required by applicable law or agreed to in writing, software 110c96e05ef24dc72fa31b6915ed40f09dc7238276mukesh agrawal * distributed under the License is distributed on an "AS IS" BASIS, 120c96e05ef24dc72fa31b6915ed40f09dc7238276mukesh agrawal * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130c96e05ef24dc72fa31b6915ed40f09dc7238276mukesh agrawal * See the License for the specific language governing permissions and 140c96e05ef24dc72fa31b6915ed40f09dc7238276mukesh agrawal * limitations under the License. 150c96e05ef24dc72fa31b6915ed40f09dc7238276mukesh agrawal */ 160c96e05ef24dc72fa31b6915ed40f09dc7238276mukesh agrawal 170c96e05ef24dc72fa31b6915ed40f09dc7238276mukesh agrawalpackage com.android.server.wifi; 180c96e05ef24dc72fa31b6915ed40f09dc7238276mukesh agrawal 19573de1504ea684a2a647613659d4771c2a315eeamukesh agrawalimport android.annotation.NonNull; 20573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal 21a50f2679f56650a8ac34160e6c4ba31e1c2ea232mukesh agrawalimport com.google.errorprone.annotations.CompileTimeConstant; 22a50f2679f56650a8ac34160e6c4ba31e1c2ea232mukesh agrawal 23e4c87d4f40bbbcd0ba1d0d8d17953763b2ad320emukesh agrawalimport javax.annotation.CheckReturnValue; 24e4c87d4f40bbbcd0ba1d0d8d17953763b2ad320emukesh agrawal 25573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal/** 26573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * Provides an abstraction of logging back-ends. 27573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * 28573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * The abstraction is designed to 29573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * a) minimize the cost of disabled log messages, 30573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * b) allow callers to tag message parameters as containing sensitive 31573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * information, 32573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * c) avoid the use of format codes, and 33573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * d) easily support additional data types. 34573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * 35573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * Implementations of WifiLog may or may not be thread-safe. 36573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * Implementations of LogMessage are expected _not_ to be thread-safe, 37573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * as LogMessage instances are not expected to be shared between threads. 38573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal */ 39a50f2679f56650a8ac34160e6c4ba31e1c2ea232mukesh agrawal@SuppressWarnings("NonFinalCompileTimeConstant") // See below. 400c96e05ef24dc72fa31b6915ed40f09dc7238276mukesh agrawalpublic interface WifiLog { 41a50f2679f56650a8ac34160e6c4ba31e1c2ea232mukesh agrawal // Explanation of SuppressWarnings above: 42a50f2679f56650a8ac34160e6c4ba31e1c2ea232mukesh agrawal // 43a50f2679f56650a8ac34160e6c4ba31e1c2ea232mukesh agrawal // We use @CompileTimeConstant to verify that our callers do not stringify 44a50f2679f56650a8ac34160e6c4ba31e1c2ea232mukesh agrawal // arguments into the |format| parameter. And, by default, error-prone 45a50f2679f56650a8ac34160e6c4ba31e1c2ea232mukesh agrawal // requires that CompileTimeConstant parameters are declared final. 46a50f2679f56650a8ac34160e6c4ba31e1c2ea232mukesh agrawal // 47a50f2679f56650a8ac34160e6c4ba31e1c2ea232mukesh agrawal // However, declaring an interface parameter as final has no effect, since 48a50f2679f56650a8ac34160e6c4ba31e1c2ea232mukesh agrawal // classes implementing the interface are free to declare their parameters 49a50f2679f56650a8ac34160e6c4ba31e1c2ea232mukesh agrawal // as non-final. Moreover, to avoid such confusing situations (interface says 50a50f2679f56650a8ac34160e6c4ba31e1c2ea232mukesh agrawal // final, implementation does not), checkstyle rejects |final| qualification 51a50f2679f56650a8ac34160e6c4ba31e1c2ea232mukesh agrawal // of method parameters in interface methods. 52a50f2679f56650a8ac34160e6c4ba31e1c2ea232mukesh agrawal // 53a50f2679f56650a8ac34160e6c4ba31e1c2ea232mukesh agrawal // To avoid making empty promises. we override error-prone's default behavior, 54a50f2679f56650a8ac34160e6c4ba31e1c2ea232mukesh agrawal // and allow the CompileTimeConstant parameters to be non-final. 55a50f2679f56650a8ac34160e6c4ba31e1c2ea232mukesh agrawal 56573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal char PLACEHOLDER = '%'; 57573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal 58573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal // New-style API. 59573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal /** 60573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * Allocate an error-level log message, which the caller will fill with 61573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * additional parameters according to |format|. After filling the message 62573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * with parameters, the caller must call flush(), to actually log the message. 63573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * 64573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * Error-level messages should be used when a malfunction has occurred, 65573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * and the malfunction is likely to cause an externally visible problem. 66573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * For example: we failed to initialize the Wifi interface. 67573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * 68573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * Typical usage is as follows: 69573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * WifiDevice() { 70573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * mLog = new LogcatLog("ModuleName"); 71573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * } 72573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * 73573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * void start() { 74573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * // ... 75573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * mLog.err("error % while starting interface %").c(errNum).c(ifaceName).flush(); 76573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * } 77573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * 78573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * void stop() { 79573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * // ... 80573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * mLog.err("error % while stopping interface %").c(errNum).c(ifaceName).flush(); 81573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * } 82573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal */ 83e4c87d4f40bbbcd0ba1d0d8d17953763b2ad320emukesh agrawal @CheckReturnValue 84573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal @NonNull 85a50f2679f56650a8ac34160e6c4ba31e1c2ea232mukesh agrawal LogMessage err(@CompileTimeConstant @NonNull String format); 86573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal 87573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal /** 88573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * Like {@link #err(String) err()}, except that a warning-level message is 89573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * allocated. 90573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * 91573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * Warning-level messages should be used when a malfunction has occurred, 92573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * but the malfunction is _unlikely_ to cause an externally visible problem 93573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * on its own. For example: if we fail to start the debugging subsystem. 94573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal */ 95e4c87d4f40bbbcd0ba1d0d8d17953763b2ad320emukesh agrawal @CheckReturnValue 96573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal @NonNull 97a50f2679f56650a8ac34160e6c4ba31e1c2ea232mukesh agrawal LogMessage warn(@CompileTimeConstant @NonNull String format); 98573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal 99573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal /** 100573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * Like {@link #err(String) err()}, except that a info-level message is 101573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * allocated. 102573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * 103573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * Info-level messages should be used to report progress or status messages 104573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * that help understand the program's external behavior. For example: we 105573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * might log an info message before initiating a Wifi association. 106573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal */ 107e4c87d4f40bbbcd0ba1d0d8d17953763b2ad320emukesh agrawal @CheckReturnValue 108573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal @NonNull 109a50f2679f56650a8ac34160e6c4ba31e1c2ea232mukesh agrawal LogMessage info(@CompileTimeConstant @NonNull String format); 110573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal 111573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal /** 112bd9be6d8cab19c78a6bf14b62c4bbb6ef8d13769mukesh agrawal * Like {@link #err(String) err()}, except: 113bd9be6d8cab19c78a6bf14b62c4bbb6ef8d13769mukesh agrawal * - a trace-level message is allocated 114bd9be6d8cab19c78a6bf14b62c4bbb6ef8d13769mukesh agrawal * - the log message is prefixed with the caller's name 115573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * 116573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * Trace-level messages should be used to report progress or status messages 117573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * that help understand the program's internal behavior. For example: 118bd9be6d8cab19c78a6bf14b62c4bbb6ef8d13769mukesh agrawal * "invoked with verbose=%". 119573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal */ 120e4c87d4f40bbbcd0ba1d0d8d17953763b2ad320emukesh agrawal @CheckReturnValue 121573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal @NonNull 122a50f2679f56650a8ac34160e6c4ba31e1c2ea232mukesh agrawal LogMessage trace(@CompileTimeConstant @NonNull String format); 123573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal 124573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal /** 125bd9be6d8cab19c78a6bf14b62c4bbb6ef8d13769mukesh agrawal * Like {@link #trace(String) trace(String)}, except that, rather than logging 126bd9be6d8cab19c78a6bf14b62c4bbb6ef8d13769mukesh agrawal * the immediate caller, the |numFramesToIgnore + 1|-th caller will be logged. 127bd9be6d8cab19c78a6bf14b62c4bbb6ef8d13769mukesh agrawal * 128bd9be6d8cab19c78a6bf14b62c4bbb6ef8d13769mukesh agrawal * E.g. if numFramesToIgnore == 1, then the caller's caller will be logged. 129bd9be6d8cab19c78a6bf14b62c4bbb6ef8d13769mukesh agrawal * 130bd9be6d8cab19c78a6bf14b62c4bbb6ef8d13769mukesh agrawal * Trace-level messages should be used to report progress or status messages 131bd9be6d8cab19c78a6bf14b62c4bbb6ef8d13769mukesh agrawal * that help understand the program's internal behavior. For example: 132bd9be6d8cab19c78a6bf14b62c4bbb6ef8d13769mukesh agrawal * "invoked with verbose=%". 133bd9be6d8cab19c78a6bf14b62c4bbb6ef8d13769mukesh agrawal */ 134bd9be6d8cab19c78a6bf14b62c4bbb6ef8d13769mukesh agrawal @CheckReturnValue 135bd9be6d8cab19c78a6bf14b62c4bbb6ef8d13769mukesh agrawal @NonNull 136bd9be6d8cab19c78a6bf14b62c4bbb6ef8d13769mukesh agrawal LogMessage trace(@NonNull String format, int numFramesToIgnore); 137bd9be6d8cab19c78a6bf14b62c4bbb6ef8d13769mukesh agrawal 138bd9be6d8cab19c78a6bf14b62c4bbb6ef8d13769mukesh agrawal /** 139573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * Like {@link #err(String) err()}, except that a dump-level message is 140573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * allocated. 141573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * 142573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * Dump-level messages should be used to report detailed internal state. 143573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal */ 144e4c87d4f40bbbcd0ba1d0d8d17953763b2ad320emukesh agrawal @CheckReturnValue 145573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal @NonNull 146a50f2679f56650a8ac34160e6c4ba31e1c2ea232mukesh agrawal LogMessage dump(@CompileTimeConstant @NonNull String format); 147573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal 148573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal /** 149f5d90be206db98bbd5894afc8d757dd32360b2d9mukesh agrawal * Log a warning using the default tag for this WifiLog instance. Mark 150f5d90be206db98bbd5894afc8d757dd32360b2d9mukesh agrawal * the message as 'clean' (i.e. _not_ containing any sensitive data). 151f5d90be206db98bbd5894afc8d757dd32360b2d9mukesh agrawal * 152f5d90be206db98bbd5894afc8d757dd32360b2d9mukesh agrawal * NOTE: this method should only be used for literal strings. For messages with 153f5d90be206db98bbd5894afc8d757dd32360b2d9mukesh agrawal * parameters, use err(). 154f5d90be206db98bbd5894afc8d757dd32360b2d9mukesh agrawal * 155f5d90be206db98bbd5894afc8d757dd32360b2d9mukesh agrawal * @param msg the message to be logged 156f5d90be206db98bbd5894afc8d757dd32360b2d9mukesh agrawal */ 157a50f2679f56650a8ac34160e6c4ba31e1c2ea232mukesh agrawal void eC(@CompileTimeConstant String msg); 158f5d90be206db98bbd5894afc8d757dd32360b2d9mukesh agrawal 159f5d90be206db98bbd5894afc8d757dd32360b2d9mukesh agrawal /** 160f5d90be206db98bbd5894afc8d757dd32360b2d9mukesh agrawal * Like {@link #eC(String)} eC()}, except that a warning-level message 161f5d90be206db98bbd5894afc8d757dd32360b2d9mukesh agrawal * is logged. 162f5d90be206db98bbd5894afc8d757dd32360b2d9mukesh agrawal */ 163a50f2679f56650a8ac34160e6c4ba31e1c2ea232mukesh agrawal void wC(@CompileTimeConstant String msg); 164f5d90be206db98bbd5894afc8d757dd32360b2d9mukesh agrawal 165f5d90be206db98bbd5894afc8d757dd32360b2d9mukesh agrawal /** 166f5d90be206db98bbd5894afc8d757dd32360b2d9mukesh agrawal * Like {@link #eC(String)} eC()}, except that an info-level message 167f5d90be206db98bbd5894afc8d757dd32360b2d9mukesh agrawal * is logged. 168f5d90be206db98bbd5894afc8d757dd32360b2d9mukesh agrawal */ 169a50f2679f56650a8ac34160e6c4ba31e1c2ea232mukesh agrawal void iC(@CompileTimeConstant String msg); 170f5d90be206db98bbd5894afc8d757dd32360b2d9mukesh agrawal 171f5d90be206db98bbd5894afc8d757dd32360b2d9mukesh agrawal /** 172f5d90be206db98bbd5894afc8d757dd32360b2d9mukesh agrawal * Like {@link #eC(String)} eC()}, except that a trace-level message 173f5d90be206db98bbd5894afc8d757dd32360b2d9mukesh agrawal * is logged. 174f5d90be206db98bbd5894afc8d757dd32360b2d9mukesh agrawal */ 175a50f2679f56650a8ac34160e6c4ba31e1c2ea232mukesh agrawal void tC(@CompileTimeConstant String msg); 176f5d90be206db98bbd5894afc8d757dd32360b2d9mukesh agrawal 177f5d90be206db98bbd5894afc8d757dd32360b2d9mukesh agrawal /** 178f5d90be206db98bbd5894afc8d757dd32360b2d9mukesh agrawal * Note: dC() is deliberately omitted, as "dumping" is inherently at 179f5d90be206db98bbd5894afc8d757dd32360b2d9mukesh agrawal * odds with the intention that the caller pass in a literal string. 180f5d90be206db98bbd5894afc8d757dd32360b2d9mukesh agrawal */ 181f5d90be206db98bbd5894afc8d757dd32360b2d9mukesh agrawal 182f5d90be206db98bbd5894afc8d757dd32360b2d9mukesh agrawal /** 183573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * Represents a single log message. 184573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * 185573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * Implementations are expected _not_ to be thread-safe. 186573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal */ 187573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal interface LogMessage { 188573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal /** 189573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * Replace the first available placeholder in this LogMessage's format 190573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * with the specified value. Mark the value as 'raw', to inform the 191573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * logging daemon that the value may contain sensitive data. 192573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * 193573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * @return |this|, to allow chaining of calls 194573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal */ 195e4c87d4f40bbbcd0ba1d0d8d17953763b2ad320emukesh agrawal @CheckReturnValue 196573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal @NonNull 197573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal LogMessage r(String value); 198573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal 199573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal /** 200573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * Like {@link #r(String) r()}, except that the value is marked 201573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * as 'clean', to inform the logging daemon that the value does _not_ 202573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * contain sensitive data. 203573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal */ 204e4c87d4f40bbbcd0ba1d0d8d17953763b2ad320emukesh agrawal @CheckReturnValue 205573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal @NonNull 206573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal LogMessage c(String value); 207573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal 208573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal /** 209573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * Like {@link #c(String) c(String)}, except that the value is a long. 210573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal */ 211e4c87d4f40bbbcd0ba1d0d8d17953763b2ad320emukesh agrawal @CheckReturnValue 212573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal @NonNull 213573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal LogMessage c(long value); 214573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal 215573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal /** 216573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * Like {@link #c(String) c(String)}, except that the value is a char. 217573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal */ 218e4c87d4f40bbbcd0ba1d0d8d17953763b2ad320emukesh agrawal @CheckReturnValue 219573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal @NonNull 220573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal LogMessage c(char value); 221573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal 222573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal /** 22364acb4210ced1920fc29caa98a353b2968fd33b5Sohani Rao * Like {@link #c(String) c(String)}, except that the value is a boolean. 22464acb4210ced1920fc29caa98a353b2968fd33b5Sohani Rao */ 22564acb4210ced1920fc29caa98a353b2968fd33b5Sohani Rao @CheckReturnValue 22664acb4210ced1920fc29caa98a353b2968fd33b5Sohani Rao @NonNull 22764acb4210ced1920fc29caa98a353b2968fd33b5Sohani Rao LogMessage c(boolean value); 22864acb4210ced1920fc29caa98a353b2968fd33b5Sohani Rao 22964acb4210ced1920fc29caa98a353b2968fd33b5Sohani Rao /** 230573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * Write this LogMessage to the logging daemon. Writing the 231573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * message is best effort. More specifically: 232573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * 1) The operation is non-blocking. If we’re unable to write 233573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * the log message to the IPC channel, the message is 234573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * dropped silently. 235573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * 2) If the number of |value|s provided exceeds the number of 236573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * placeholders in the |format|, then extraneous |value|s 237573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * are silently dropped. 238573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * 3) If the number of placeholders in the |format| exceeds 239573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * the number of |value|s provided, the message is sent to 240573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * the logging daemon without generating an Exception. 241573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * 4) If the total message length exceeds the logging 242573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * protocol’s maximum message length, the message is 243573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * silently truncated. 244573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal */ 245573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal void flush(); 246573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal } 247573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal 248573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal // Legacy API. 2490c96e05ef24dc72fa31b6915ed40f09dc7238276mukesh agrawal /** 2500c96e05ef24dc72fa31b6915ed40f09dc7238276mukesh agrawal * Log an error using the default tag for this WifiLog instance. 2510c96e05ef24dc72fa31b6915ed40f09dc7238276mukesh agrawal * @param msg the message to be logged 252573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * TODO(b/30736737): Remove this method, once all code has migrated to alternatives. 2530c96e05ef24dc72fa31b6915ed40f09dc7238276mukesh agrawal */ 2540c96e05ef24dc72fa31b6915ed40f09dc7238276mukesh agrawal void e(String msg); 2550c96e05ef24dc72fa31b6915ed40f09dc7238276mukesh agrawal 2560c96e05ef24dc72fa31b6915ed40f09dc7238276mukesh agrawal /** 2570c96e05ef24dc72fa31b6915ed40f09dc7238276mukesh agrawal * Log a warning using the default tag for this WifiLog instance. 2580c96e05ef24dc72fa31b6915ed40f09dc7238276mukesh agrawal * @param msg the message to be logged 259573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * TODO(b/30736737): Remove this method, once all code has migrated to alternatives. 2600c96e05ef24dc72fa31b6915ed40f09dc7238276mukesh agrawal */ 2610c96e05ef24dc72fa31b6915ed40f09dc7238276mukesh agrawal void w(String msg); 2620c96e05ef24dc72fa31b6915ed40f09dc7238276mukesh agrawal 2630c96e05ef24dc72fa31b6915ed40f09dc7238276mukesh agrawal /** 2640c96e05ef24dc72fa31b6915ed40f09dc7238276mukesh agrawal * Log an informational message using the default tag for this WifiLog instance. 2650c96e05ef24dc72fa31b6915ed40f09dc7238276mukesh agrawal * @param msg the message to be logged 266573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * TODO(b/30736737): Remove this method, once all code has migrated to alternatives. 2670c96e05ef24dc72fa31b6915ed40f09dc7238276mukesh agrawal */ 2680c96e05ef24dc72fa31b6915ed40f09dc7238276mukesh agrawal void i(String msg); 2690c96e05ef24dc72fa31b6915ed40f09dc7238276mukesh agrawal 2700c96e05ef24dc72fa31b6915ed40f09dc7238276mukesh agrawal /** 2710c96e05ef24dc72fa31b6915ed40f09dc7238276mukesh agrawal * Log a debug message using the default tag for this WifiLog instance. 2720c96e05ef24dc72fa31b6915ed40f09dc7238276mukesh agrawal * @param msg the message to be logged 273573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * TODO(b/30736737): Remove this method, once all code has migrated to alternatives. 2740c96e05ef24dc72fa31b6915ed40f09dc7238276mukesh agrawal */ 2750c96e05ef24dc72fa31b6915ed40f09dc7238276mukesh agrawal void d(String msg); 2760c96e05ef24dc72fa31b6915ed40f09dc7238276mukesh agrawal 2770c96e05ef24dc72fa31b6915ed40f09dc7238276mukesh agrawal /** 2780c96e05ef24dc72fa31b6915ed40f09dc7238276mukesh agrawal * Log a verbose message using the default tag for this WifiLog instance. 2790c96e05ef24dc72fa31b6915ed40f09dc7238276mukesh agrawal * @param msg the message to be logged 280573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * TODO(b/30736737): Remove this method, once all code has migrated to alternatives. 2810c96e05ef24dc72fa31b6915ed40f09dc7238276mukesh agrawal */ 2820c96e05ef24dc72fa31b6915ed40f09dc7238276mukesh agrawal void v(String msg); 2830c96e05ef24dc72fa31b6915ed40f09dc7238276mukesh agrawal} 284