xref: /aosp_15_r20/external/libtextclassifier/native/utils/base/logging_raw.cc (revision 993b0882672172b81d12fad7a7ac0c3e5c824a12)
1*993b0882SAndroid Build Coastguard Worker /*
2*993b0882SAndroid Build Coastguard Worker  * Copyright (C) 2018 The Android Open Source Project
3*993b0882SAndroid Build Coastguard Worker  *
4*993b0882SAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*993b0882SAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*993b0882SAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*993b0882SAndroid Build Coastguard Worker  *
8*993b0882SAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
9*993b0882SAndroid Build Coastguard Worker  *
10*993b0882SAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*993b0882SAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*993b0882SAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*993b0882SAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*993b0882SAndroid Build Coastguard Worker  * limitations under the License.
15*993b0882SAndroid Build Coastguard Worker  */
16*993b0882SAndroid Build Coastguard Worker 
17*993b0882SAndroid Build Coastguard Worker #include "utils/base/logging_raw.h"
18*993b0882SAndroid Build Coastguard Worker 
19*993b0882SAndroid Build Coastguard Worker #include <stdio.h>
20*993b0882SAndroid Build Coastguard Worker 
21*993b0882SAndroid Build Coastguard Worker #include <string>
22*993b0882SAndroid Build Coastguard Worker 
23*993b0882SAndroid Build Coastguard Worker #define TC3_RETURN_IF_NOT_ERROR_OR_FATAL        \
24*993b0882SAndroid Build Coastguard Worker   if (severity != ERROR && severity != FATAL) { \
25*993b0882SAndroid Build Coastguard Worker     return;                                     \
26*993b0882SAndroid Build Coastguard Worker   }
27*993b0882SAndroid Build Coastguard Worker 
28*993b0882SAndroid Build Coastguard Worker // NOTE: this file contains two implementations: one for Android, one for all
29*993b0882SAndroid Build Coastguard Worker // other cases.  We always build exactly one implementation.
30*993b0882SAndroid Build Coastguard Worker #if defined(__ANDROID__)
31*993b0882SAndroid Build Coastguard Worker 
32*993b0882SAndroid Build Coastguard Worker // Compiled as part of Android.
33*993b0882SAndroid Build Coastguard Worker #include <android/log.h>
34*993b0882SAndroid Build Coastguard Worker 
35*993b0882SAndroid Build Coastguard Worker namespace libtextclassifier3 {
36*993b0882SAndroid Build Coastguard Worker namespace logging {
37*993b0882SAndroid Build Coastguard Worker 
38*993b0882SAndroid Build Coastguard Worker namespace {
39*993b0882SAndroid Build Coastguard Worker // Converts LogSeverity to level for __android_log_write.
GetAndroidLogLevel(LogSeverity severity)40*993b0882SAndroid Build Coastguard Worker int GetAndroidLogLevel(LogSeverity severity) {
41*993b0882SAndroid Build Coastguard Worker   switch (severity) {
42*993b0882SAndroid Build Coastguard Worker     case FATAL:
43*993b0882SAndroid Build Coastguard Worker       return ANDROID_LOG_FATAL;
44*993b0882SAndroid Build Coastguard Worker     case ERROR:
45*993b0882SAndroid Build Coastguard Worker       return ANDROID_LOG_ERROR;
46*993b0882SAndroid Build Coastguard Worker     case WARNING:
47*993b0882SAndroid Build Coastguard Worker       return ANDROID_LOG_WARN;
48*993b0882SAndroid Build Coastguard Worker     case INFO:
49*993b0882SAndroid Build Coastguard Worker       return ANDROID_LOG_INFO;
50*993b0882SAndroid Build Coastguard Worker     default:
51*993b0882SAndroid Build Coastguard Worker       return ANDROID_LOG_DEBUG;
52*993b0882SAndroid Build Coastguard Worker   }
53*993b0882SAndroid Build Coastguard Worker }
54*993b0882SAndroid Build Coastguard Worker }  // namespace
55*993b0882SAndroid Build Coastguard Worker 
LowLevelLogging(LogSeverity severity,const std::string & tag,const std::string & message)56*993b0882SAndroid Build Coastguard Worker void LowLevelLogging(LogSeverity severity, const std::string& tag,
57*993b0882SAndroid Build Coastguard Worker                      const std::string& message) {
58*993b0882SAndroid Build Coastguard Worker #if !defined(TC3_DEBUG_LOGGING)
59*993b0882SAndroid Build Coastguard Worker   TC3_RETURN_IF_NOT_ERROR_OR_FATAL
60*993b0882SAndroid Build Coastguard Worker #endif
61*993b0882SAndroid Build Coastguard Worker   const int android_log_level = GetAndroidLogLevel(severity);
62*993b0882SAndroid Build Coastguard Worker   __android_log_write(android_log_level, tag.c_str(), message.c_str());
63*993b0882SAndroid Build Coastguard Worker }
64*993b0882SAndroid Build Coastguard Worker 
65*993b0882SAndroid Build Coastguard Worker }  // namespace logging
66*993b0882SAndroid Build Coastguard Worker }  // namespace libtextclassifier3
67*993b0882SAndroid Build Coastguard Worker 
68*993b0882SAndroid Build Coastguard Worker #else  // if defined(__ANDROID__)
69*993b0882SAndroid Build Coastguard Worker 
70*993b0882SAndroid Build Coastguard Worker // Not on Android: implement LowLevelLogging to print to stderr (see below).
71*993b0882SAndroid Build Coastguard Worker namespace libtextclassifier3 {
72*993b0882SAndroid Build Coastguard Worker namespace logging {
73*993b0882SAndroid Build Coastguard Worker 
74*993b0882SAndroid Build Coastguard Worker namespace {
75*993b0882SAndroid Build Coastguard Worker // Converts LogSeverity to human-readable text.
LogSeverityToString(LogSeverity severity)76*993b0882SAndroid Build Coastguard Worker const char *LogSeverityToString(LogSeverity severity) {
77*993b0882SAndroid Build Coastguard Worker   switch (severity) {
78*993b0882SAndroid Build Coastguard Worker     case INFO:
79*993b0882SAndroid Build Coastguard Worker       return "INFO";
80*993b0882SAndroid Build Coastguard Worker     case WARNING:
81*993b0882SAndroid Build Coastguard Worker       return "WARNING";
82*993b0882SAndroid Build Coastguard Worker     case ERROR:
83*993b0882SAndroid Build Coastguard Worker       return "ERROR";
84*993b0882SAndroid Build Coastguard Worker     case FATAL:
85*993b0882SAndroid Build Coastguard Worker       return "FATAL";
86*993b0882SAndroid Build Coastguard Worker     default:
87*993b0882SAndroid Build Coastguard Worker       return "UNKNOWN";
88*993b0882SAndroid Build Coastguard Worker   }
89*993b0882SAndroid Build Coastguard Worker }
90*993b0882SAndroid Build Coastguard Worker }  // namespace
91*993b0882SAndroid Build Coastguard Worker 
LowLevelLogging(LogSeverity severity,const std::string & tag,const std::string & message)92*993b0882SAndroid Build Coastguard Worker void LowLevelLogging(LogSeverity severity, const std::string &tag,
93*993b0882SAndroid Build Coastguard Worker                      const std::string &message) {
94*993b0882SAndroid Build Coastguard Worker #if !defined(TC3_DEBUG_LOGGING)
95*993b0882SAndroid Build Coastguard Worker   TC3_RETURN_IF_NOT_ERROR_OR_FATAL
96*993b0882SAndroid Build Coastguard Worker #endif
97*993b0882SAndroid Build Coastguard Worker   fprintf(stderr, "[%s] %s : %s\n", LogSeverityToString(severity), tag.c_str(),
98*993b0882SAndroid Build Coastguard Worker           message.c_str());
99*993b0882SAndroid Build Coastguard Worker   fflush(stderr);
100*993b0882SAndroid Build Coastguard Worker }
101*993b0882SAndroid Build Coastguard Worker 
102*993b0882SAndroid Build Coastguard Worker }  // namespace logging
103*993b0882SAndroid Build Coastguard Worker }  // namespace libtextclassifier3
104*993b0882SAndroid Build Coastguard Worker 
105*993b0882SAndroid Build Coastguard Worker #endif  // if defined(__ANDROID__)
106