Coverage Report

Created: 2026-06-10 06:58

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/logging-log4cxx/src/main/cpp/consoleappender.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
#include <log4cxx/logstring.h>
18
#include <log4cxx/consoleappender.h>
19
#include <log4cxx/helpers/loglog.h>
20
#include <log4cxx/helpers/systemoutwriter.h>
21
#include <log4cxx/helpers/systemerrwriter.h>
22
#include <log4cxx/helpers/stringhelper.h>
23
#include <log4cxx/layout.h>
24
#include <log4cxx/private/appenderskeleton_priv.h>
25
#include <log4cxx/private/writerappender_priv.h>
26
27
using namespace LOG4CXX_NS;
28
using namespace LOG4CXX_NS::helpers;
29
30
struct ConsoleAppender::ConsoleAppenderPriv : public WriterAppender::WriterAppenderPriv
31
{
32
  ConsoleAppenderPriv(LogString target) :
33
0
    WriterAppenderPriv(),
34
0
    target(target) {}
35
36
  LogString target;
37
};
38
39
0
#define _priv static_cast<ConsoleAppenderPriv*>(m_priv.get())
40
41
IMPLEMENT_LOG4CXX_OBJECT(ConsoleAppender)
42
43
ConsoleAppender::ConsoleAppender()
44
0
  : WriterAppender (std::make_unique<ConsoleAppenderPriv>(getSystemOut()))
45
0
{
46
0
}
Unexecuted instantiation: log4cxx::ConsoleAppender::ConsoleAppender()
Unexecuted instantiation: log4cxx::ConsoleAppender::ConsoleAppender()
47
48
ConsoleAppender::ConsoleAppender(const LayoutPtr& layout)
49
0
  : WriterAppender (std::make_unique<ConsoleAppenderPriv>(getSystemOut()))
50
0
{
51
0
  setLayout(layout);
52
0
  _priv->setWriter(std::make_shared<SystemOutWriter>());
53
0
  _priv->activateOptions();
54
0
}
Unexecuted instantiation: log4cxx::ConsoleAppender::ConsoleAppender(std::__1::shared_ptr<log4cxx::Layout> const&)
Unexecuted instantiation: log4cxx::ConsoleAppender::ConsoleAppender(std::__1::shared_ptr<log4cxx::Layout> const&)
55
56
ConsoleAppender::ConsoleAppender(const LayoutPtr& layout, const LogString& target)
57
0
  : WriterAppender (std::make_unique<ConsoleAppenderPriv>(target))
58
0
{
59
0
  setLayout(layout);
60
0
  setTarget(target);
61
0
#if LOG4CXX_ABI_VERSION <= 15
62
0
  Pool p;
63
0
  ConsoleAppender::activateOptions(p);
64
#else
65
  ConsoleAppender::activateOptions();
66
#endif
67
0
}
Unexecuted instantiation: log4cxx::ConsoleAppender::ConsoleAppender(std::__1::shared_ptr<log4cxx::Layout> const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)
Unexecuted instantiation: log4cxx::ConsoleAppender::ConsoleAppender(std::__1::shared_ptr<log4cxx::Layout> const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)
68
69
ConsoleAppender::~ConsoleAppender()
70
0
{
71
0
}
72
73
const LogString& ConsoleAppender::getSystemOut()
74
0
{
75
0
  static const WideLife<LogString> name(LOG4CXX_STR("System.out"));
76
0
  return name;
77
0
}
78
79
const LogString& ConsoleAppender::getSystemErr()
80
0
{
81
0
  static const WideLife<LogString> name(LOG4CXX_STR("System.err"));
82
0
  return name;
83
0
}
84
85
void ConsoleAppender::setTarget(const LogString& value)
86
0
{
87
0
  LogString v = StringHelper::trim(value);
88
89
0
  if (StringHelper::equalsIgnoreCase(v,
90
0
      LOG4CXX_STR("SYSTEM.OUT"), LOG4CXX_STR("system.out")))
91
0
  {
92
0
    _priv->target = getSystemOut();
93
0
  }
94
0
  else if (StringHelper::equalsIgnoreCase(v,
95
0
      LOG4CXX_STR("SYSTEM.ERR"), LOG4CXX_STR("system.err")))
96
0
  {
97
0
    _priv->target = getSystemErr();
98
0
  }
99
0
  else
100
0
  {
101
0
    targetWarn(value);
102
0
  }
103
0
}
104
105
LogString ConsoleAppender::getTarget() const
106
0
{
107
0
  return _priv->target;
108
0
}
109
110
void ConsoleAppender::targetWarn(const LogString& val)
111
0
{
112
0
  LogLog::warn(((LogString) LOG4CXX_STR("["))
113
0
    + val +  LOG4CXX_STR("] should be system.out or system.err."));
114
0
  LogLog::warn(LOG4CXX_STR("Using previously set target, System.out by default."));
115
0
}
116
117
void ConsoleAppender::activateOptions( LOG4CXX_ACTIVATE_OPTIONS_FORMAL_PARAMETERS )
118
0
{
119
0
  if (StringHelper::equalsIgnoreCase(_priv->target,
120
0
      LOG4CXX_STR("SYSTEM.OUT"), LOG4CXX_STR("system.out")))
121
0
  {
122
0
    _priv->setWriter(std::make_shared<SystemOutWriter>());
123
0
  }
124
0
  else if (StringHelper::equalsIgnoreCase(_priv->target,
125
0
      LOG4CXX_STR("SYSTEM.ERR"), LOG4CXX_STR("system.err")))
126
0
  {
127
0
    _priv->setWriter(std::make_shared<SystemErrWriter>());
128
0
  }
129
130
0
  _priv->activateOptions();
131
0
}
132
133
void ConsoleAppender::setOption(const LogString& option, const LogString& value)
134
0
{
135
0
  if (StringHelper::equalsIgnoreCase(option,
136
0
      LOG4CXX_STR("TARGET"), LOG4CXX_STR("target")))
137
0
  {
138
0
    setTarget(value);
139
0
  }
140
0
  else
141
0
  {
142
0
    WriterAppender::setOption(option, value);
143
0
  }
144
0
}
145
146
147
148
149
150