blob: c81661d23474d3272490f793543d9c77e00e81af [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <log4cxx/logstring.h>
#include <log4cxx/consoleappender.h>
#include <log4cxx/helpers/loglog.h>
#include <log4cxx/helpers/systemoutwriter.h>
#include <log4cxx/helpers/systemerrwriter.h>
#include <log4cxx/helpers/stringhelper.h>
#include <log4cxx/layout.h>
using namespace log4cxx;
using namespace log4cxx::helpers;
IMPLEMENT_LOG4CXX_OBJECT(ConsoleAppender)
ConsoleAppender::ConsoleAppender()
: target(getSystemOut())
{
}
ConsoleAppender::ConsoleAppender(const LayoutPtr& layout1)
: target(getSystemOut())
{
setLayout(layout1);
Pool p;
WriterPtr writer1(new SystemOutWriter());
setWriter(writer1);
WriterAppender::activateOptions(p);
}
ConsoleAppender::ConsoleAppender(const LayoutPtr& layout1, const LogString& target1)
: target(target1)
{
setLayout(layout1);
Pool p;
ConsoleAppender::activateOptions(p);
}
ConsoleAppender::~ConsoleAppender()
{
finalize();
}
const LogString& ConsoleAppender::getSystemOut()
{
static const LogString name(LOG4CXX_STR("System.out"));
return name;
}
const LogString& ConsoleAppender::getSystemErr()
{
static const LogString name(LOG4CXX_STR("System.err"));
return name;
}
void ConsoleAppender::setTarget(const LogString& value)
{
LogString v = StringHelper::trim(value);
if (StringHelper::equalsIgnoreCase(v,
LOG4CXX_STR("SYSTEM.OUT"), LOG4CXX_STR("system.out")))
{
target = getSystemOut();
}
else if (StringHelper::equalsIgnoreCase(v,
LOG4CXX_STR("SYSTEM.ERR"), LOG4CXX_STR("system.err")))
{
target = getSystemErr();
}
else
{
targetWarn(value);
}
}
LogString ConsoleAppender::getTarget() const
{
return target;
}
void ConsoleAppender::targetWarn(const LogString& val)
{
LogLog::warn(((LogString) LOG4CXX_STR("["))
+ val + LOG4CXX_STR("] should be system.out or system.err."));
LogLog::warn(LOG4CXX_STR("Using previously set target, System.out by default."));
}
void ConsoleAppender::activateOptions(Pool& p)
{
if (StringHelper::equalsIgnoreCase(target,
LOG4CXX_STR("SYSTEM.OUT"), LOG4CXX_STR("system.out")))
{
WriterPtr writer1(new SystemOutWriter());
setWriter(writer1);
}
else if (StringHelper::equalsIgnoreCase(target,
LOG4CXX_STR("SYSTEM.ERR"), LOG4CXX_STR("system.err")))
{
WriterPtr writer1(new SystemErrWriter());
setWriter(writer1);
}
WriterAppender::activateOptions(p);
}
void ConsoleAppender::setOption(const LogString& option, const LogString& value)
{
if (StringHelper::equalsIgnoreCase(option,
LOG4CXX_STR("TARGET"), LOG4CXX_STR("target")))
{
setTarget(value);
}
else
{
WriterAppender::setOption(option, value);
}
}