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