You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
252 lines
6.0 KiB
252 lines
6.0 KiB
// Module: Log4CPLUS
|
|
// File: loggingevent.cxx
|
|
// Created: 6/2003
|
|
// Author: Tad E. Smith
|
|
//
|
|
//
|
|
// Copyright 2003-2013 Tad E. Smith
|
|
//
|
|
// Licensed 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 <log4cplus/spi/loggingevent.h>
|
|
#include <log4cplus/internal/internal.h>
|
|
#include <algorithm>
|
|
|
|
|
|
namespace log4cplus { namespace spi {
|
|
|
|
|
|
static const int LOG4CPLUS_DEFAULT_TYPE = 1;
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// InternalLoggingEvent ctors and dtor
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
InternalLoggingEvent::InternalLoggingEvent(const log4cplus::tstring& logger,
|
|
LogLevel loglevel, const log4cplus::tstring& message_, const char* filename,
|
|
int line_)
|
|
: message(message_)
|
|
, loggerName(logger)
|
|
, ll(loglevel)
|
|
, ndc()
|
|
, mdc()
|
|
, thread()
|
|
, timestamp(log4cplus::helpers::Time::gettimeofday())
|
|
, file(filename
|
|
? LOG4CPLUS_C_STR_TO_TSTRING(filename)
|
|
: log4cplus::tstring())
|
|
, function ()
|
|
, line(line_)
|
|
, threadCached(false)
|
|
, thread2Cached(false)
|
|
, ndcCached(false)
|
|
, mdcCached(false)
|
|
{
|
|
}
|
|
|
|
|
|
InternalLoggingEvent::InternalLoggingEvent(const log4cplus::tstring& logger,
|
|
LogLevel loglevel, const log4cplus::tstring& ndc_,
|
|
MappedDiagnosticContextMap const & mdc_, const log4cplus::tstring& message_,
|
|
const log4cplus::tstring& thread_, log4cplus::helpers::Time time,
|
|
const log4cplus::tstring& file_, int line_)
|
|
: message(message_)
|
|
, loggerName(logger)
|
|
, ll(loglevel)
|
|
, ndc(ndc_)
|
|
, mdc(mdc_)
|
|
, thread(thread_)
|
|
, timestamp(time)
|
|
, file(file_)
|
|
, function ()
|
|
, line(line_)
|
|
, threadCached(true)
|
|
, thread2Cached(true)
|
|
, ndcCached(true)
|
|
, mdcCached(true)
|
|
{
|
|
}
|
|
|
|
|
|
InternalLoggingEvent::InternalLoggingEvent ()
|
|
: ll (NOT_SET_LOG_LEVEL)
|
|
, function ()
|
|
, line (0)
|
|
, threadCached(false)
|
|
, thread2Cached(false)
|
|
, ndcCached(false)
|
|
, mdcCached(false)
|
|
{ }
|
|
|
|
|
|
InternalLoggingEvent::InternalLoggingEvent(
|
|
const log4cplus::spi::InternalLoggingEvent& rhs)
|
|
: message(rhs.getMessage())
|
|
, loggerName(rhs.getLoggerName())
|
|
, ll(rhs.getLogLevel())
|
|
, ndc(rhs.getNDC())
|
|
, mdc(rhs.getMDCCopy())
|
|
, thread(rhs.getThread())
|
|
, timestamp(rhs.getTimestamp())
|
|
, file(rhs.getFile())
|
|
, function(rhs.getFunction())
|
|
, line(rhs.getLine())
|
|
, threadCached(true)
|
|
, thread2Cached(true)
|
|
, ndcCached(true)
|
|
, mdcCached(true)
|
|
{
|
|
}
|
|
|
|
|
|
InternalLoggingEvent::~InternalLoggingEvent()
|
|
{
|
|
}
|
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// InternalLoggingEvent static methods
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
unsigned int
|
|
InternalLoggingEvent::getDefaultType()
|
|
{
|
|
return LOG4CPLUS_DEFAULT_TYPE;
|
|
}
|
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// InternalLoggingEvent implementation
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
void
|
|
InternalLoggingEvent::setLoggingEvent (const log4cplus::tstring & logger,
|
|
LogLevel loglevel, const log4cplus::tstring & msg, const char * filename,
|
|
int fline)
|
|
{
|
|
// This could be imlemented using the swap idiom:
|
|
//
|
|
// InternalLoggingEvent (logger, loglevel, msg, filename, fline).swap (*this);
|
|
//
|
|
// But that defeats the optimization of using thread local instance
|
|
// of InternalLoggingEvent to avoid memory allocation.
|
|
|
|
loggerName = logger;
|
|
ll = loglevel;
|
|
message = msg;
|
|
timestamp = helpers::Time::gettimeofday();
|
|
if (filename)
|
|
file = LOG4CPLUS_C_STR_TO_TSTRING (filename);
|
|
else
|
|
file.clear ();
|
|
line = fline;
|
|
threadCached = false;
|
|
thread2Cached = false;
|
|
ndcCached = false;
|
|
mdcCached = false;
|
|
}
|
|
|
|
|
|
void
|
|
InternalLoggingEvent::setFunction (char const * func)
|
|
{
|
|
function = LOG4CPLUS_C_STR_TO_TSTRING (func);
|
|
}
|
|
|
|
|
|
void
|
|
InternalLoggingEvent::setFunction (log4cplus::tstring const & func)
|
|
{
|
|
function = func;
|
|
}
|
|
|
|
|
|
const log4cplus::tstring&
|
|
InternalLoggingEvent::getMessage() const
|
|
{
|
|
return message;
|
|
}
|
|
|
|
|
|
unsigned int
|
|
InternalLoggingEvent::getType() const
|
|
{
|
|
return LOG4CPLUS_DEFAULT_TYPE;
|
|
}
|
|
|
|
|
|
|
|
std::auto_ptr<InternalLoggingEvent>
|
|
InternalLoggingEvent::clone() const
|
|
{
|
|
std::auto_ptr<InternalLoggingEvent> tmp(new InternalLoggingEvent(*this));
|
|
return tmp;
|
|
}
|
|
|
|
|
|
tstring const &
|
|
InternalLoggingEvent::getMDC (tstring const & key) const
|
|
{
|
|
MappedDiagnosticContextMap const & mdc_ = getMDCCopy ();
|
|
MappedDiagnosticContextMap::const_iterator it = mdc_.find (key);
|
|
if (it != mdc_.end ())
|
|
return it->second;
|
|
else
|
|
return internal::empty_str;
|
|
}
|
|
|
|
|
|
|
|
InternalLoggingEvent &
|
|
InternalLoggingEvent::operator = (const InternalLoggingEvent& rhs)
|
|
{
|
|
InternalLoggingEvent (rhs).swap (*this);
|
|
return *this;
|
|
}
|
|
|
|
|
|
void
|
|
InternalLoggingEvent::gatherThreadSpecificData () const
|
|
{
|
|
getNDC ();
|
|
getMDCCopy ();
|
|
getThread ();
|
|
getThread2 ();
|
|
}
|
|
|
|
|
|
void
|
|
InternalLoggingEvent::swap (InternalLoggingEvent & other)
|
|
{
|
|
using std::swap;
|
|
|
|
swap (message, other.message);
|
|
swap (loggerName, other.loggerName);
|
|
swap (ll, other.ll);
|
|
swap (ndc, other.ndc);
|
|
swap (mdc, other.mdc);
|
|
swap (thread, other.thread);
|
|
swap (thread2, other.thread2);
|
|
swap (timestamp, other.timestamp);
|
|
swap (file, other.file);
|
|
swap (function, other.function);
|
|
swap (line, other.line);
|
|
swap (threadCached, other.threadCached);
|
|
swap (ndcCached, other.ndcCached);
|
|
}
|
|
|
|
|
|
} } // namespace log4cplus { namespace spi {
|