Coverage Report

Created: 2025-10-13 07:02

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
4
{
35
4
  static WideLife<LevelPtr> offLevel = std::make_shared<Level>(Level::OFF_INT, LOG4CXX_STR("OFF"), 0);
36
4
  return offLevel;
37
4
}
38
39
LevelPtr Level::getFatal()
40
4
{
41
4
  static WideLife<LevelPtr> fatalLevel = std::make_shared<Level>(Level::FATAL_INT, LOG4CXX_STR("FATAL"), 0);
42
4
  return fatalLevel;
43
4
}
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.29k
{
53
7.29k
  static WideLife<LevelPtr> warnLevel = std::make_shared<Level>(Level::WARN_INT, LOG4CXX_STR("WARN"), 4);
54
7.29k
  return warnLevel;
55
7.29k
}
56
57
LevelPtr Level::getInfo()
58
28.9k
{
59
28.9k
  static WideLife<LevelPtr> infoLevel = std::make_shared<Level>(Level::INFO_INT, LOG4CXX_STR("INFO"), 6);
60
28.9k
  return infoLevel;
61
28.9k
}
62
63
LevelPtr Level::getDebug()
64
36.1k
{
65
36.1k
  static WideLife<LevelPtr> debugLevel = std::make_shared<Level>(Level::DEBUG_INT, LOG4CXX_STR("DEBUG"), 7);
66
36.1k
  return debugLevel;
67
36.1k
}
68
69
LevelPtr Level::getTrace()
70
6
{
71
6
  static WideLife<LevelPtr> traceLevel = std::make_shared<Level>(Level::TRACE_INT, LOG4CXX_STR("TRACE"), 7);
72
6
  return traceLevel;
73
6
}
74
75
76
LevelPtr Level::getAll()
77
1.83k
{
78
1.83k
  static WideLife<LevelPtr> allLevel = std::make_shared<Level>(Level::ALL_INT, LOG4CXX_STR("ALL"), 7);
79
1.83k
  return allLevel;
80
1.83k
}
81
82
83
84
Level::Level(int level1,
85
  const LogString& name1, int syslogEquivalent1)
86
56
  : level(level1), name(name1), syslogEquivalent(syslogEquivalent1)
87
56
{
88
56
}
log4cxx::Level::Level(int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, int)
Line
Count
Source
86
28
  : level(level1), name(name1), syslogEquivalent(syslogEquivalent1)
87
28
{
88
28
}
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
28
  : level(level1), name(name1), syslogEquivalent(syslogEquivalent1)
87
28
{
88
28
}
89
90
91
LevelPtr Level::toLevelLS(const LogString& sArg)
92
0
{
93
0
  return toLevelLS(sArg, Level::getDebug());
94
0
}
Unexecuted instantiation: log4cxx::Level::toLevelLS(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)
Unexecuted instantiation: log4cxx::Level::toLevelLS(std::__1::basic_string<wchar_t, std::__1::char_traits<wchar_t>, std::__1::allocator<wchar_t> > const&)
95
96
LogString Level::toString() const
97
224k
{
98
224k
  return name;
99
224k
}
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
6
{
109
6
  static WideLife<DataPtr> data = std::make_shared<Data>(Data
110
6
    { getOff()
111
6
    , getFatal()
112
6
    , getError()
113
6
    , getWarn()
114
6
    , getInfo()
115
6
    , getDebug()
116
6
    , getTrace()
117
6
    , getAll()
118
6
    });
119
6
  return data;
120
6
}
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.73k
{
169
1.73k
  Transcoder::encode(name, dst);
170
1.73k
}
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.33k
{
186
2.33k
  Transcoder::encode(name, dst);
187
2.33k
}
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
121
{
232
121
  const LogString trimmed(StringHelper::trim(sArg));
233
121
  const size_t len = trimmed.length();
234
235
121
  if (len == 4)
236
3
  {
237
3
    if (StringHelper::equalsIgnoreCase(trimmed, LOG4CXX_STR("INFO"), LOG4CXX_STR("info")))
238
2
    {
239
2
      return getInfo();
240
2
    }
241
242
1
    if (StringHelper::equalsIgnoreCase(trimmed, LOG4CXX_STR("WARN"), LOG4CXX_STR("warn")))
243
0
    {
244
0
      return getWarn();
245
0
    }
246
1
  }
247
118
  else
248
118
  {
249
118
    if (len == 5)
250
7
    {
251
7
      if (StringHelper::equalsIgnoreCase(trimmed, LOG4CXX_STR("DEBUG"), LOG4CXX_STR("debug")))
252
1
      {
253
1
        return getDebug();
254
1
      }
255
256
6
      if (StringHelper::equalsIgnoreCase(trimmed, LOG4CXX_STR("TRACE"), LOG4CXX_STR("trace")))
257
2
      {
258
2
        return getTrace();
259
2
      }
260
261
4
      if (StringHelper::equalsIgnoreCase(trimmed, LOG4CXX_STR("ERROR"), LOG4CXX_STR("error")))
262
1
      {
263
1
        return getError();
264
1
      }
265
266
3
      if (StringHelper::equalsIgnoreCase(trimmed, LOG4CXX_STR("FATAL"), LOG4CXX_STR("fatal")))
267
0
      {
268
0
        return getFatal();
269
0
      }
270
3
    }
271
111
    else
272
111
    {
273
111
      if (len == 3)
274
8
      {
275
8
        if (StringHelper::equalsIgnoreCase(trimmed, LOG4CXX_STR("OFF"), LOG4CXX_STR("off")))
276
0
        {
277
0
          return getOff();
278
0
        }
279
280
8
        if (StringHelper::equalsIgnoreCase(trimmed, LOG4CXX_STR("ALL"), LOG4CXX_STR("all")))
281
6
        {
282
6
          return getAll();
283
6
        }
284
8
      }
285
111
    }
286
118
  }
287
288
109
  return defaultLevel;
289
121
}
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
74
{
232
74
  const LogString trimmed(StringHelper::trim(sArg));
233
74
  const size_t len = trimmed.length();
234
235
74
  if (len == 4)
236
1
  {
237
1
    if (StringHelper::equalsIgnoreCase(trimmed, LOG4CXX_STR("INFO"), LOG4CXX_STR("info")))
238
1
    {
239
1
      return getInfo();
240
1
    }
241
242
0
    if (StringHelper::equalsIgnoreCase(trimmed, LOG4CXX_STR("WARN"), LOG4CXX_STR("warn")))
243
0
    {
244
0
      return getWarn();
245
0
    }
246
0
  }
247
73
  else
248
73
  {
249
73
    if (len == 5)
250
4
    {
251
4
      if (StringHelper::equalsIgnoreCase(trimmed, LOG4CXX_STR("DEBUG"), LOG4CXX_STR("debug")))
252
0
      {
253
0
        return getDebug();
254
0
      }
255
256
4
      if (StringHelper::equalsIgnoreCase(trimmed, LOG4CXX_STR("TRACE"), LOG4CXX_STR("trace")))
257
1
      {
258
1
        return getTrace();
259
1
      }
260
261
3
      if (StringHelper::equalsIgnoreCase(trimmed, LOG4CXX_STR("ERROR"), LOG4CXX_STR("error")))
262
1
      {
263
1
        return getError();
264
1
      }
265
266
2
      if (StringHelper::equalsIgnoreCase(trimmed, LOG4CXX_STR("FATAL"), LOG4CXX_STR("fatal")))
267
0
      {
268
0
        return getFatal();
269
0
      }
270
2
    }
271
69
    else
272
69
    {
273
69
      if (len == 3)
274
4
      {
275
4
        if (StringHelper::equalsIgnoreCase(trimmed, LOG4CXX_STR("OFF"), LOG4CXX_STR("off")))
276
0
        {
277
0
          return getOff();
278
0
        }
279
280
4
        if (StringHelper::equalsIgnoreCase(trimmed, LOG4CXX_STR("ALL"), LOG4CXX_STR("all")))
281
3
        {
282
3
          return getAll();
283
3
        }
284
4
      }
285
69
    }
286
73
  }
287
288
68
  return defaultLevel;
289
74
}
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
47
{
232
47
  const LogString trimmed(StringHelper::trim(sArg));
233
47
  const size_t len = trimmed.length();
234
235
47
  if (len == 4)
236
2
  {
237
2
    if (StringHelper::equalsIgnoreCase(trimmed, LOG4CXX_STR("INFO"), LOG4CXX_STR("info")))
238
1
    {
239
1
      return getInfo();
240
1
    }
241
242
1
    if (StringHelper::equalsIgnoreCase(trimmed, LOG4CXX_STR("WARN"), LOG4CXX_STR("warn")))
243
0
    {
244
0
      return getWarn();
245
0
    }
246
1
  }
247
45
  else
248
45
  {
249
45
    if (len == 5)
250
3
    {
251
3
      if (StringHelper::equalsIgnoreCase(trimmed, LOG4CXX_STR("DEBUG"), LOG4CXX_STR("debug")))
252
1
      {
253
1
        return getDebug();
254
1
      }
255
256
2
      if (StringHelper::equalsIgnoreCase(trimmed, LOG4CXX_STR("TRACE"), LOG4CXX_STR("trace")))
257
1
      {
258
1
        return getTrace();
259
1
      }
260
261
1
      if (StringHelper::equalsIgnoreCase(trimmed, LOG4CXX_STR("ERROR"), LOG4CXX_STR("error")))
262
0
      {
263
0
        return getError();
264
0
      }
265
266
1
      if (StringHelper::equalsIgnoreCase(trimmed, LOG4CXX_STR("FATAL"), LOG4CXX_STR("fatal")))
267
0
      {
268
0
        return getFatal();
269
0
      }
270
1
    }
271
42
    else
272
42
    {
273
42
      if (len == 3)
274
4
      {
275
4
        if (StringHelper::equalsIgnoreCase(trimmed, LOG4CXX_STR("OFF"), LOG4CXX_STR("off")))
276
0
        {
277
0
          return getOff();
278
0
        }
279
280
4
        if (StringHelper::equalsIgnoreCase(trimmed, LOG4CXX_STR("ALL"), LOG4CXX_STR("all")))
281
3
        {
282
3
          return getAll();
283
3
        }
284
4
      }
285
42
    }
286
45
  }
287
288
41
  return defaultLevel;
289
47
}
290
291
292
bool Level::equals(const LevelPtr& level1) const
293
18.5k
{
294
18.5k
  return level1 && this->level == level1->level;
295
18.5k
}
296
297
bool Level::isGreaterOrEqual(const LevelPtr& level1) const
298
218k
{
299
218k
  return level1 && this->level >= level1->level;
300
218k
}
301