Coverage Report

Created: 2026-03-19 06:57

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/logging-log4cxx/src/main/cpp/level.cpp
Line
Count
Source
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
7
{
35
7
  static WideLife<LevelPtr> offLevel = std::make_shared<Level>(Level::OFF_INT, LOG4CXX_STR("OFF"), 0);
36
7
  return offLevel;
37
7
}
38
39
LevelPtr Level::getFatal()
40
7
{
41
7
  static WideLife<LevelPtr> fatalLevel = std::make_shared<Level>(Level::FATAL_INT, LOG4CXX_STR("FATAL"), 0);
42
7
  return fatalLevel;
43
7
}
44
45
LevelPtr Level::getError()
46
5
{
47
5
  static WideLife<LevelPtr> errorLevel = std::make_shared<Level>(Level::ERROR_INT, LOG4CXX_STR("ERROR"), 3);
48
5
  return errorLevel;
49
5
}
50
51
LevelPtr Level::getWarn()
52
7.70k
{
53
7.70k
  static WideLife<LevelPtr> warnLevel = std::make_shared<Level>(Level::WARN_INT, LOG4CXX_STR("WARN"), 4);
54
7.70k
  return warnLevel;
55
7.70k
}
56
57
LevelPtr Level::getInfo()
58
30.0k
{
59
30.0k
  static WideLife<LevelPtr> infoLevel = std::make_shared<Level>(Level::INFO_INT, LOG4CXX_STR("INFO"), 6);
60
30.0k
  return infoLevel;
61
30.0k
}
62
63
LevelPtr Level::getDebug()
64
36.3k
{
65
36.3k
  static WideLife<LevelPtr> debugLevel = std::make_shared<Level>(Level::DEBUG_INT, LOG4CXX_STR("DEBUG"), 7);
66
36.3k
  return debugLevel;
67
36.3k
}
68
69
LevelPtr Level::getTrace()
70
3
{
71
3
  static WideLife<LevelPtr> traceLevel = std::make_shared<Level>(Level::TRACE_INT, LOG4CXX_STR("TRACE"), 7);
72
3
  return traceLevel;
73
3
}
74
75
76
LevelPtr Level::getAll()
77
1.06k
{
78
1.06k
  static WideLife<LevelPtr> allLevel = std::make_shared<Level>(Level::ALL_INT, LOG4CXX_STR("ALL"), 7);
79
1.06k
  return allLevel;
80
1.06k
}
81
82
83
84
Level::Level(int level1,
85
  const LogString& name1, int syslogEquivalent1)
86
52
  : level(level1), name(name1), syslogEquivalent(syslogEquivalent1)
87
52
{
88
52
}
log4cxx::Level::Level(int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, int)
Line
Count
Source
86
30
  : level(level1), name(name1), syslogEquivalent(syslogEquivalent1)
87
30
{
88
30
}
log4cxx::Level::Level(int, std::__1::basic_string<wchar_t, std::__1::char_traits<wchar_t>, std::__1::allocator<wchar_t> > const&, int)
Line
Count
Source
86
22
  : level(level1), name(name1), syslogEquivalent(syslogEquivalent1)
87
22
{
88
22
}
89
90
91
LevelPtr Level::toLevelLS(const LogString& sArg)
92
2
{
93
2
  return toLevelLS(sArg, Level::getDebug());
94
2
}
log4cxx::Level::toLevelLS(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)
Line
Count
Source
92
1
{
93
1
  return toLevelLS(sArg, Level::getDebug());
94
1
}
log4cxx::Level::toLevelLS(std::__1::basic_string<wchar_t, std::__1::char_traits<wchar_t>, std::__1::allocator<wchar_t> > const&)
Line
Count
Source
92
1
{
93
1
  return toLevelLS(sArg, Level::getDebug());
94
1
}
95
96
LogString Level::toString() const
97
123k
{
98
123k
  return name;
99
123k
}
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
4
{
109
4
  static WideLife<DataPtr> data = std::make_shared<Data>(Data
110
4
    { getOff()
111
4
    , getFatal()
112
4
    , getError()
113
4
    , getWarn()
114
4
    , getInfo()
115
4
    , getDebug()
116
4
    , getTrace()
117
4
    , getAll()
118
4
    });
119
4
  return data;
120
4
}
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
}
Unexecuted instantiation: log4cxx::Level::toLevel(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::shared_ptr<log4cxx::Level> const&)
Unexecuted instantiation: log4cxx::Level::toLevel(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::shared_ptr<log4cxx::Level> const&)
166
167
void Level::toString(std::string& dst) const
168
1.77k
{
169
1.77k
  Transcoder::encode(name, dst);
170
1.77k
}
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
}
Unexecuted instantiation: log4cxx::Level::toLevel(std::__1::basic_string<wchar_t, std::__1::char_traits<wchar_t>, std::__1::allocator<wchar_t> > const&, std::__1::shared_ptr<log4cxx::Level> const&)
Unexecuted instantiation: log4cxx::Level::toLevel(std::__1::basic_string<wchar_t, std::__1::char_traits<wchar_t>, std::__1::allocator<wchar_t> > const&, std::__1::shared_ptr<log4cxx::Level> const&)
183
184
void Level::toString(std::wstring& dst) const
185
2.50k
{
186
2.50k
  Transcoder::encode(name, dst);
187
2.50k
}
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
242
{
232
242
  const LogString trimmed(StringHelper::trim(sArg));
233
242
  const size_t len = trimmed.length();
234
235
242
  if (len == 4)
236
10
  {
237
10
    if (StringHelper::equalsIgnoreCase(trimmed, LOG4CXX_STR("INFO"), LOG4CXX_STR("info")))
238
4
    {
239
4
      return getInfo();
240
4
    }
241
242
6
    if (StringHelper::equalsIgnoreCase(trimmed, LOG4CXX_STR("WARN"), LOG4CXX_STR("warn")))
243
0
    {
244
0
      return getWarn();
245
0
    }
246
6
  }
247
232
  else
248
232
  {
249
232
    if (len == 5)
250
11
    {
251
11
      if (StringHelper::equalsIgnoreCase(trimmed, LOG4CXX_STR("DEBUG"), LOG4CXX_STR("debug")))
252
0
      {
253
0
        return getDebug();
254
0
      }
255
256
11
      if (StringHelper::equalsIgnoreCase(trimmed, LOG4CXX_STR("TRACE"), LOG4CXX_STR("trace")))
257
0
      {
258
0
        return getTrace();
259
0
      }
260
261
11
      if (StringHelper::equalsIgnoreCase(trimmed, LOG4CXX_STR("ERROR"), LOG4CXX_STR("error")))
262
2
      {
263
2
        return getError();
264
2
      }
265
266
9
      if (StringHelper::equalsIgnoreCase(trimmed, LOG4CXX_STR("FATAL"), LOG4CXX_STR("fatal")))
267
4
      {
268
4
        return getFatal();
269
4
      }
270
9
    }
271
221
    else
272
221
    {
273
221
      if (len == 3)
274
12
      {
275
12
        if (StringHelper::equalsIgnoreCase(trimmed, LOG4CXX_STR("OFF"), LOG4CXX_STR("off")))
276
4
        {
277
4
          return getOff();
278
4
        }
279
280
8
        if (StringHelper::equalsIgnoreCase(trimmed, LOG4CXX_STR("ALL"), LOG4CXX_STR("all")))
281
3
        {
282
3
          return getAll();
283
3
        }
284
8
      }
285
221
    }
286
232
  }
287
288
225
  return defaultLevel;
289
242
}
log4cxx::Level::toLevelLS(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::shared_ptr<log4cxx::Level> const&)
Line
Count
Source
231
136
{
232
136
  const LogString trimmed(StringHelper::trim(sArg));
233
136
  const size_t len = trimmed.length();
234
235
136
  if (len == 4)
236
6
  {
237
6
    if (StringHelper::equalsIgnoreCase(trimmed, LOG4CXX_STR("INFO"), LOG4CXX_STR("info")))
238
2
    {
239
2
      return getInfo();
240
2
    }
241
242
4
    if (StringHelper::equalsIgnoreCase(trimmed, LOG4CXX_STR("WARN"), LOG4CXX_STR("warn")))
243
0
    {
244
0
      return getWarn();
245
0
    }
246
4
  }
247
130
  else
248
130
  {
249
130
    if (len == 5)
250
5
    {
251
5
      if (StringHelper::equalsIgnoreCase(trimmed, LOG4CXX_STR("DEBUG"), LOG4CXX_STR("debug")))
252
0
      {
253
0
        return getDebug();
254
0
      }
255
256
5
      if (StringHelper::equalsIgnoreCase(trimmed, LOG4CXX_STR("TRACE"), LOG4CXX_STR("trace")))
257
0
      {
258
0
        return getTrace();
259
0
      }
260
261
5
      if (StringHelper::equalsIgnoreCase(trimmed, LOG4CXX_STR("ERROR"), LOG4CXX_STR("error")))
262
1
      {
263
1
        return getError();
264
1
      }
265
266
4
      if (StringHelper::equalsIgnoreCase(trimmed, LOG4CXX_STR("FATAL"), LOG4CXX_STR("fatal")))
267
2
      {
268
2
        return getFatal();
269
2
      }
270
4
    }
271
125
    else
272
125
    {
273
125
      if (len == 3)
274
8
      {
275
8
        if (StringHelper::equalsIgnoreCase(trimmed, LOG4CXX_STR("OFF"), LOG4CXX_STR("off")))
276
2
        {
277
2
          return getOff();
278
2
        }
279
280
6
        if (StringHelper::equalsIgnoreCase(trimmed, LOG4CXX_STR("ALL"), LOG4CXX_STR("all")))
281
2
        {
282
2
          return getAll();
283
2
        }
284
6
      }
285
125
    }
286
130
  }
287
288
127
  return defaultLevel;
289
136
}
log4cxx::Level::toLevelLS(std::__1::basic_string<wchar_t, std::__1::char_traits<wchar_t>, std::__1::allocator<wchar_t> > const&, std::__1::shared_ptr<log4cxx::Level> const&)
Line
Count
Source
231
106
{
232
106
  const LogString trimmed(StringHelper::trim(sArg));
233
106
  const size_t len = trimmed.length();
234
235
106
  if (len == 4)
236
4
  {
237
4
    if (StringHelper::equalsIgnoreCase(trimmed, LOG4CXX_STR("INFO"), LOG4CXX_STR("info")))
238
2
    {
239
2
      return getInfo();
240
2
    }
241
242
2
    if (StringHelper::equalsIgnoreCase(trimmed, LOG4CXX_STR("WARN"), LOG4CXX_STR("warn")))
243
0
    {
244
0
      return getWarn();
245
0
    }
246
2
  }
247
102
  else
248
102
  {
249
102
    if (len == 5)
250
6
    {
251
6
      if (StringHelper::equalsIgnoreCase(trimmed, LOG4CXX_STR("DEBUG"), LOG4CXX_STR("debug")))
252
0
      {
253
0
        return getDebug();
254
0
      }
255
256
6
      if (StringHelper::equalsIgnoreCase(trimmed, LOG4CXX_STR("TRACE"), LOG4CXX_STR("trace")))
257
0
      {
258
0
        return getTrace();
259
0
      }
260
261
6
      if (StringHelper::equalsIgnoreCase(trimmed, LOG4CXX_STR("ERROR"), LOG4CXX_STR("error")))
262
1
      {
263
1
        return getError();
264
1
      }
265
266
5
      if (StringHelper::equalsIgnoreCase(trimmed, LOG4CXX_STR("FATAL"), LOG4CXX_STR("fatal")))
267
2
      {
268
2
        return getFatal();
269
2
      }
270
5
    }
271
96
    else
272
96
    {
273
96
      if (len == 3)
274
4
      {
275
4
        if (StringHelper::equalsIgnoreCase(trimmed, LOG4CXX_STR("OFF"), LOG4CXX_STR("off")))
276
2
        {
277
2
          return getOff();
278
2
        }
279
280
2
        if (StringHelper::equalsIgnoreCase(trimmed, LOG4CXX_STR("ALL"), LOG4CXX_STR("all")))
281
1
        {
282
1
          return getAll();
283
1
        }
284
2
      }
285
96
    }
286
102
  }
287
288
98
  return defaultLevel;
289
106
}
290
291
292
bool Level::equals(const LevelPtr& level1) const
293
19.4k
{
294
19.4k
  return level1 && this->level == level1->level;
295
19.4k
}
296
297
bool Level::isGreaterOrEqual(const LevelPtr& level1) const
298
105k
{
299
105k
  return level1 && this->level >= level1->level;
300
105k
}
301