Coverage Report

Created: 2025-07-01 06:08

/src/logging-log4cxx/src/main/cpp/level.cpp
Line
Count
Source (jump to first uncovered line)
1
/*
2
 * Licensed to the Apache Software Foundation (ASF) under one or more
3
 * contributor license agreements.  See the NOTICE file distributed with
4
 * this work for additional information regarding copyright ownership.
5
 * The ASF licenses this file to You under the Apache License, Version 2.0
6
 * (the "License"); you may not use this file except in compliance with
7
 * the License.  You may obtain a copy of the License at
8
 *
9
 *      http://www.apache.org/licenses/LICENSE-2.0
10
 *
11
 * Unless required by applicable law or agreed to in writing, software
12
 * distributed under the License is distributed on an "AS IS" BASIS,
13
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
 * See the License for the specific language governing permissions and
15
 * limitations under the License.
16
 */
17
18
#include <log4cxx/logstring.h>
19
#include <log4cxx/level.h>
20
#include <log4cxx/helpers/stringhelper.h>
21
#include <log4cxx/helpers/transcoder.h>
22
#if !defined(LOG4CXX)
23
  #define LOG4CXX 1
24
#endif
25
#include <log4cxx/helpers/aprinitializer.h>
26
#include <mutex>
27
28
using namespace LOG4CXX_NS;
29
using namespace LOG4CXX_NS::helpers;
30
31
IMPLEMENT_LOG4CXX_OBJECT_WITH_CUSTOM_CLASS(Level, LevelClass)
32
33
LevelPtr Level::getOff()
34
0
{
35
0
  static WideLife<LevelPtr> offLevel = std::make_shared<Level>(Level::OFF_INT, LOG4CXX_STR("OFF"), 0);
36
0
  return offLevel;
37
0
}
38
39
LevelPtr Level::getFatal()
40
0
{
41
0
  static WideLife<LevelPtr> fatalLevel = std::make_shared<Level>(Level::FATAL_INT, LOG4CXX_STR("FATAL"), 0);
42
0
  return fatalLevel;
43
0
}
44
45
LevelPtr Level::getError()
46
0
{
47
0
  static WideLife<LevelPtr> errorLevel = std::make_shared<Level>(Level::ERROR_INT, LOG4CXX_STR("ERROR"), 3);
48
0
  return errorLevel;
49
0
}
50
51
LevelPtr Level::getWarn()
52
0
{
53
0
  static WideLife<LevelPtr> warnLevel = std::make_shared<Level>(Level::WARN_INT, LOG4CXX_STR("WARN"), 4);
54
0
  return warnLevel;
55
0
}
56
57
LevelPtr Level::getInfo()
58
2.45k
{
59
2.45k
  static WideLife<LevelPtr> infoLevel = std::make_shared<Level>(Level::INFO_INT, LOG4CXX_STR("INFO"), 6);
60
2.45k
  return infoLevel;
61
2.45k
}
62
63
LevelPtr Level::getDebug()
64
0
{
65
0
  static WideLife<LevelPtr> debugLevel = std::make_shared<Level>(Level::DEBUG_INT, LOG4CXX_STR("DEBUG"), 7);
66
0
  return debugLevel;
67
0
}
68
69
LevelPtr Level::getTrace()
70
0
{
71
0
  static WideLife<LevelPtr> traceLevel = std::make_shared<Level>(Level::TRACE_INT, LOG4CXX_STR("TRACE"), 7);
72
0
  return traceLevel;
73
0
}
74
75
76
LevelPtr Level::getAll()
77
0
{
78
0
  static WideLife<LevelPtr> allLevel = std::make_shared<Level>(Level::ALL_INT, LOG4CXX_STR("ALL"), 7);
79
0
  return allLevel;
80
0
}
81
82
83
84
Level::Level(int level1,
85
  const LogString& name1, int syslogEquivalent1)
86
1
  : level(level1), name(name1), syslogEquivalent(syslogEquivalent1)
87
1
{
88
1
}
89
90
91
LevelPtr Level::toLevelLS(const LogString& sArg)
92
0
{
93
0
  return toLevelLS(sArg, Level::getDebug());
94
0
}
95
96
LogString Level::toString() const
97
15
{
98
15
  return name;
99
15
}
100
101
102
LevelPtr Level::toLevel(int val)
103
0
{
104
0
  return toLevel(val, Level::getDebug());
105
0
}
106
107
const Level::DataPtr& Level::getData()
108
0
{
109
0
  static WideLife<DataPtr> data = std::make_shared<Data>(Data
110
0
    { getOff()
111
0
    , getFatal()
112
0
    , getError()
113
0
    , getWarn()
114
0
    , getInfo()
115
0
    , getDebug()
116
0
    , getTrace()
117
0
    , getAll()
118
0
    });
119
0
  return data;
120
0
}
121
122
123
LevelPtr Level::toLevel(int val, const LevelPtr& defaultLevel)
124
0
{
125
0
  switch (val)
126
0
  {
127
0
    case ALL_INT:
128
0
      return getAll();
129
130
0
    case DEBUG_INT:
131
0
      return getDebug();
132
133
0
    case TRACE_INT:
134
0
      return getTrace();
135
136
0
    case INFO_INT:
137
0
      return getInfo();
138
139
0
    case WARN_INT:
140
0
      return getWarn();
141
142
0
    case ERROR_INT:
143
0
      return getError();
144
145
0
    case FATAL_INT:
146
0
      return getFatal();
147
148
0
    case OFF_INT:
149
0
      return getOff();
150
151
0
    default:
152
0
      return defaultLevel;
153
0
  }
154
0
}
155
156
LevelPtr Level::toLevel(const std::string& sArg)
157
0
{
158
0
  return toLevel(sArg, Level::getDebug());
159
0
}
160
161
LevelPtr Level::toLevel(const std::string& sArg, const LevelPtr& defaultLevel)
162
0
{
163
0
  LOG4CXX_DECODE_CHAR(s, sArg);
164
0
  return toLevelLS(s, defaultLevel);
165
0
}
166
167
void Level::toString(std::string& dst) const
168
0
{
169
0
  Transcoder::encode(name, dst);
170
0
}
171
172
#if LOG4CXX_WCHAR_T_API
173
LevelPtr Level::toLevel(const std::wstring& sArg)
174
0
{
175
0
  return toLevel(sArg, Level::getDebug());
176
0
}
177
178
LevelPtr Level::toLevel(const std::wstring& sArg, const LevelPtr& defaultLevel)
179
0
{
180
0
  LOG4CXX_DECODE_WCHAR(s, sArg);
181
0
  return toLevelLS(s, defaultLevel);
182
0
}
183
184
void Level::toString(std::wstring& dst) const
185
0
{
186
0
  Transcoder::encode(name, dst);
187
0
}
188
189
#endif
190
191
#if LOG4CXX_UNICHAR_API || LOG4CXX_LOGCHAR_IS_UNICHAR
192
LevelPtr Level::toLevel(const std::basic_string<UniChar>& sArg)
193
{
194
  return toLevel(sArg, Level::getDebug());
195
}
196
197
LevelPtr Level::toLevel(const std::basic_string<UniChar>& sArg, const LevelPtr& defaultLevel)
198
{
199
  LOG4CXX_DECODE_UNICHAR(s, sArg);
200
  return toLevelLS(s, defaultLevel);
201
}
202
203
void Level::toString(std::basic_string<UniChar>& dst) const
204
{
205
  Transcoder::encode(name, dst);
206
}
207
208
#endif
209
210
#if LOG4CXX_CFSTRING_API
211
LevelPtr Level::toLevel(const CFStringRef& sArg)
212
{
213
  return toLevel(sArg, Level::getDebug());
214
}
215
216
LevelPtr Level::toLevel(const CFStringRef& sArg, const LevelPtr& defaultLevel)
217
{
218
  LogString s;
219
  Transcoder::decode(sArg, s);
220
  return toLevelLS(s, defaultLevel);
221
}
222
223
void Level::toString(CFStringRef& dst) const
224
{
225
  dst = Transcoder::encode(name);
226
}
227
#endif
228
229
230
LevelPtr Level::toLevelLS(const LogString& sArg, const LevelPtr& defaultLevel)
231
0
{
232
0
  const LogString trimmed(StringHelper::trim(sArg));
233
0
  const size_t len = trimmed.length();
234
235
0
  if (len == 4)
236
0
  {
237
0
    if (StringHelper::equalsIgnoreCase(trimmed, LOG4CXX_STR("INFO"), LOG4CXX_STR("info")))
238
0
    {
239
0
      return getInfo();
240
0
    }
241
242
0
    if (StringHelper::equalsIgnoreCase(trimmed, LOG4CXX_STR("WARN"), LOG4CXX_STR("warn")))
243
0
    {
244
0
      return getWarn();
245
0
    }
246
0
  }
247
0
  else
248
0
  {
249
0
    if (len == 5)
250
0
    {
251
0
      if (StringHelper::equalsIgnoreCase(trimmed, LOG4CXX_STR("DEBUG"), LOG4CXX_STR("debug")))
252
0
      {
253
0
        return getDebug();
254
0
      }
255
256
0
      if (StringHelper::equalsIgnoreCase(trimmed, LOG4CXX_STR("TRACE"), LOG4CXX_STR("trace")))
257
0
      {
258
0
        return getTrace();
259
0
      }
260
261
0
      if (StringHelper::equalsIgnoreCase(trimmed, LOG4CXX_STR("ERROR"), LOG4CXX_STR("error")))
262
0
      {
263
0
        return getError();
264
0
      }
265
266
0
      if (StringHelper::equalsIgnoreCase(trimmed, LOG4CXX_STR("FATAL"), LOG4CXX_STR("fatal")))
267
0
      {
268
0
        return getFatal();
269
0
      }
270
0
    }
271
0
    else
272
0
    {
273
0
      if (len == 3)
274
0
      {
275
0
        if (StringHelper::equalsIgnoreCase(trimmed, LOG4CXX_STR("OFF"), LOG4CXX_STR("off")))
276
0
        {
277
0
          return getOff();
278
0
        }
279
280
0
        if (StringHelper::equalsIgnoreCase(trimmed, LOG4CXX_STR("ALL"), LOG4CXX_STR("all")))
281
0
        {
282
0
          return getAll();
283
0
        }
284
0
      }
285
0
    }
286
0
  }
287
288
0
  return defaultLevel;
289
0
}
290
291
292
bool Level::equals(const LevelPtr& level1) const
293
0
{
294
0
  return level1 && this->level == level1->level;
295
0
}
296
297
bool Level::isGreaterOrEqual(const LevelPtr& level1) const
298
0
{
299
0
  return level1 && this->level >= level1->level;
300
0
}
301