Coverage Report

Created: 2026-03-12 07:00

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
  Pool p;
53
0
  _priv->setWriter(std::make_shared<SystemOutWriter>());
54
0
  WriterAppender::activateOptions(p);
55
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&)
56
57
ConsoleAppender::ConsoleAppender(const LayoutPtr& layout, const LogString& target)
58
0
  : WriterAppender (std::make_unique<ConsoleAppenderPriv>(target))
59
0
{
60
0
  setLayout(layout);
61
0
  setTarget(target);
62
0
  Pool p;
63
0
  ConsoleAppender::activateOptions(p);
64
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&)
65
66
ConsoleAppender::~ConsoleAppender()
67
0
{
68
0
}
69
70
const LogString& ConsoleAppender::getSystemOut()
71
0
{
72
0
  static const WideLife<LogString> name(LOG4CXX_STR("System.out"));
73
0
  return name;
74
0
}
75
76
const LogString& ConsoleAppender::getSystemErr()
77
0
{
78
0
  static const WideLife<LogString> name(LOG4CXX_STR("System.err"));
79
0
  return name;
80
0
}
81
82
void ConsoleAppender::setTarget(const LogString& value)
83
0
{
84
0
  LogString v = StringHelper::trim(value);
85
86
0
  if (StringHelper::equalsIgnoreCase(v,
87
0
      LOG4CXX_STR("SYSTEM.OUT"), LOG4CXX_STR("system.out")))
88
0
  {
89
0
    _priv->target = getSystemOut();
90
0
  }
91
0
  else if (StringHelper::equalsIgnoreCase(v,
92
0
      LOG4CXX_STR("SYSTEM.ERR"), LOG4CXX_STR("system.err")))
93
0
  {
94
0
    _priv->target = getSystemErr();
95
0
  }
96
0
  else
97
0
  {
98
0
    targetWarn(value);
99
0
  }
100
0
}
101
102
LogString ConsoleAppender::getTarget() const
103
0
{
104
0
  return _priv->target;
105
0
}
106
107
void ConsoleAppender::targetWarn(const LogString& val)
108
0
{
109
0
  LogLog::warn(((LogString) LOG4CXX_STR("["))
110
0
    + val +  LOG4CXX_STR("] should be system.out or system.err."));
111
0
  LogLog::warn(LOG4CXX_STR("Using previously set target, System.out by default."));
112
0
}
113
114
void ConsoleAppender::activateOptions(Pool& p)
115
0
{
116
0
  if (StringHelper::equalsIgnoreCase(_priv->target,
117
0
      LOG4CXX_STR("SYSTEM.OUT"), LOG4CXX_STR("system.out")))
118
0
  {
119
0
    _priv->setWriter(std::make_shared<SystemOutWriter>());
120
0
  }
121
0
  else if (StringHelper::equalsIgnoreCase(_priv->target,
122
0
      LOG4CXX_STR("SYSTEM.ERR"), LOG4CXX_STR("system.err")))
123
0
  {
124
0
    _priv->setWriter(std::make_shared<SystemErrWriter>());
125
0
  }
126
127
0
  WriterAppender::activateOptions(p);
128
0
}
129
130
void ConsoleAppender::setOption(const LogString& option, const LogString& value)
131
0
{
132
0
  if (StringHelper::equalsIgnoreCase(option,
133
0
      LOG4CXX_STR("TARGET"), LOG4CXX_STR("target")))
134
0
  {
135
0
    setTarget(value);
136
0
  }
137
0
  else
138
0
  {
139
0
    WriterAppender::setOption(option, value);
140
0
  }
141
0
}
142
143
144
145
146
147