Skip to content

Commit aff92f4

Browse files
author
Dan Smith
committed
latest from coda-oss
1 parent 41ba677 commit aff92f4

12 files changed

Lines changed: 132 additions & 71 deletions

File tree

externals/coda-oss/modules/c++/logging/include/logging/Filter.h

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,9 @@
2424
// Filter.h
2525
///////////////////////////////////////////////////////////
2626

27-
#ifndef __LOGGING_FILTER_H__
28-
#define __LOGGING_FILTER_H__
27+
#ifndef CODA_OSS_logging_Filter_h_INCLUDED_
28+
#define CODA_OSS_logging_Filter_h_INCLUDED_
29+
#pragma once
2930

3031
#include <string>
3132
#include "logging/LogRecord.h"
@@ -38,18 +39,25 @@ namespace logging
3839
*
3940
* \brief Filter instances are used to perform arbitrary filtering of LogRecords.
4041
*/
41-
class Filter
42+
struct Filter
4243
{
43-
public:
4444
Filter(std::string name = "") : mName(name){}
45-
virtual ~Filter(){}
45+
virtual ~Filter() = default;
4646

47-
bool filter(const LogRecord* record) const;
48-
std::string getName() const { return mName; }
47+
virtual bool filter(const LogRecord* record) const;
48+
virtual bool filter(const LogRecord& record) const
49+
{
50+
return filter(&record);
51+
}
52+
53+
std::string getName() const
54+
{
55+
return mName;
56+
}
4957

5058
protected:
5159
std::string mName;
5260
};
5361

5462
}
55-
#endif
63+
#endif // CODA_OSS_logging_Filter_h_INCLUDED_

externals/coda-oss/modules/c++/logging/include/logging/Filterer.h

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,9 @@
2424
// Filterer.h
2525
///////////////////////////////////////////////////////////
2626

27-
#ifndef __LOGGING_FILTERER_H__
28-
#define __LOGGING_FILTERER_H__
27+
#ifndef CODA_OSS_logging_Filterer_h_INCLUDED_
28+
#define CODA_OSS_logging_Filterer_h_INCLUDED_
29+
#pragma once
2930

3031
#include <string>
3132
#include <map>
@@ -41,27 +42,32 @@ namespace logging
4142
* A base class for loggers and handlers which allows them to share
4243
* common code.
4344
*/
44-
class Filterer
45+
struct Filterer
4546
{
46-
public:
47-
Filterer(){}
48-
virtual ~Filterer(){}
47+
Filterer() = default;
48+
virtual ~Filterer() = default;
4949

5050
/*!
5151
* Adds a Filter to the managed map of Filters. We do NOT take control of
5252
* the pointer
5353
*/
5454
void addFilter(Filter* filter);
55+
void addFilter(Filter&);
5556

56-
bool filter(const LogRecord* record) const;
57+
virtual bool filter(const LogRecord* record) const;
58+
virtual bool filter(const LogRecord& record) const
59+
{
60+
return filter(&record);
61+
}
5762

5863
//! Removes the specified Filter
5964
void removeFilter(Filter* filter);
65+
void removeFilter(Filter&);
6066

6167
protected:
6268
std::map<std::string, Filter*> filters;
63-
6469
};
6570

6671
}
67-
#endif
72+
#endif // CODA_OSS_logging_Filterer_h_INCLUDED_
73+

externals/coda-oss/modules/c++/logging/include/logging/Handler.h

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@
2424
// Handler.h
2525
///////////////////////////////////////////////////////////
2626

27-
#ifndef __LOGGING_HANDLER_H__
28-
#define __LOGGING_HANDLER_H__
27+
#ifndef CODA_OSS_logging_Handler_h_INCLUDED_
28+
#define CODA_OSS_logging_Handler_h_INCLUDED_
2929

3030
#include <string>
3131
#include "logging/LogRecord.h"
@@ -51,16 +51,15 @@ struct Handler : public Filterer
5151
* Construct a Handler at the specified LogLevel (LogLevel::LOG_NOTSET is default)
5252
*/
5353
Handler(LogLevel level = LogLevel::LOG_NOTSET);
54-
virtual ~Handler()
55-
{
56-
}
54+
virtual ~Handler() = default;
5755
Handler& operator=(const Handler&) = delete;
5856

5957
/*!
6058
* Sets the Formatter to use when formatting LogRecords
6159
* Not Threads Safe!
6260
*/
6361
virtual void setFormatter(Formatter* formatter);
62+
virtual void setFormatter(std::unique_ptr<Formatter>&&);
6463

6564
//! Sets the minimum LogLevel required to emit LogRecords
6665
void setLevel(LogLevel level);
@@ -74,6 +73,10 @@ struct Handler : public Filterer
7473
* and emitted.
7574
*/
7675
virtual bool handle(const LogRecord* record);
76+
virtual bool handle(const LogRecord& record)
77+
{
78+
return handle(&record);
79+
}
7780

7881
virtual void close();
7982

@@ -85,7 +88,10 @@ struct Handler : public Filterer
8588
// for writing directly to stream,
8689
// used for the bulk of the logging for speed
8790
virtual void emitRecord(const LogRecord* record) = 0;
88-
91+
virtual void emitRecord(const LogRecord& record)
92+
{
93+
return emitRecord(&record);
94+
}
8995

9096
LogLevel mLevel = LogLevel::LOG_NOTSET;
9197
sys::Mutex mHandlerLock;
@@ -94,4 +100,4 @@ struct Handler : public Filterer
94100
};
95101

96102
}
97-
#endif
103+
#endif // CODA_OSS_logging_Handler_h_INCLUDED_

externals/coda-oss/modules/c++/logging/include/logging/Logger.h

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,13 @@
2424
// Logger.h
2525
///////////////////////////////////////////////////////////
2626

27-
#ifndef __LOGGING_LOGGER_H__
28-
#define __LOGGING_LOGGER_H__
27+
#ifndef CODA_OSS_logging_Logger_h_INCLUDED_
28+
#define CODA_OSS_logging_Logger_h_INCLUDED_
2929

3030
#include <string>
3131
#include <vector>
3232
#include <memory>
33+
3334
#include "logging/Filterer.h"
3435
#include "logging/LogRecord.h"
3536
#include "logging/Handler.h"
@@ -104,6 +105,7 @@ struct Logger : public Filterer
104105
* This Logger does not own the passed-in Handler.
105106
*/
106107
void addHandler(Handler* handler, bool own = false);
108+
void addHandler(std::unique_ptr<Handler>&&); // own = true
107109

108110
/*!
109111
* Removes the specified Handler from the list of Handlers.
@@ -139,14 +141,17 @@ struct Logger : public Filterer
139141

140142
protected:
141143
void handle(const LogRecord* record);
144+
void handle(const LogRecord& record)
145+
{
146+
handle(&record);
147+
}
142148

143149
typedef std::pair<Handler*, bool> Handler_T;
144150
typedef std::vector<Handler_T> Handlers_T;
145151

146152
std::string mName;
147153
Handlers_T mHandlers;
148-
149154
};
150155
typedef std::shared_ptr<Logger> LoggerPtr;
151156
}
152-
#endif
157+
#endif // CODA_OSS_logging_Logger_h_INCLUDED_

externals/coda-oss/modules/c++/logging/include/logging/StreamHandler.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ struct StreamHandler : public Handler
5757
//! adds the need to write epilogue before deleting formatter
5858
// and then writing the prologue with the new formatter
5959
virtual void setFormatter(Formatter* formatter);
60+
virtual void setFormatter(std::unique_ptr<Formatter>&&);
6061

6162
virtual void close();
6263

externals/coda-oss/modules/c++/logging/source/Filterer.cpp

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,16 @@ void logging::Filterer::addFilter(logging::Filter* filter)
3434
filters[filter->getName()] = filter;
3535
}
3636
}
37+
void logging::Filterer::addFilter(logging::Filter& filter)
38+
{
39+
addFilter(&filter);
40+
}
3741

3842
bool logging::Filterer::filter(const logging::LogRecord* record) const
3943
{
40-
for (std::map<std::string, logging::Filter*>::const_iterator p = filters.begin();
41-
p != filters.end(); ++p)
44+
for (const auto& p : filters)
4245
{
43-
if (!p->second->filter(record))
46+
if (!p.second->filter(record))
4447
return false;
4548
}
4649
return true;
@@ -49,6 +52,8 @@ bool logging::Filterer::filter(const logging::LogRecord* record) const
4952
void logging::Filterer::removeFilter(logging::Filter* filter)
5053
{
5154
filters.erase(filter->getName());
52-
5355
}
54-
56+
void logging::Filterer::removeFilter(logging::Filter& filter)
57+
{
58+
removeFilter(&filter);
59+
}

externals/coda-oss/modules/c++/logging/source/Handler.cpp

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,11 +39,10 @@ Handler::Handler(LogLevel level)
3939
void Handler::close()
4040
{
4141
// delete if necessary
42-
if (mFormatter != &mDefaultFormatter &&
43-
mFormatter != NULL)
42+
if (mFormatter != &mDefaultFormatter) // "delete NULL" is ok
4443
{
4544
delete mFormatter;
46-
mFormatter = NULL;
45+
mFormatter = nullptr;
4746
}
4847
}
4948

@@ -83,4 +82,8 @@ void Handler::setFormatter(Formatter* formatter)
8382
mFormatter = formatter;
8483
}
8584
}
85+
void Handler::setFormatter(std::unique_ptr<Formatter>&& formatter)
86+
{
87+
setFormatter(formatter.release());
88+
}
8689
}

externals/coda-oss/modules/c++/logging/source/Logger.cpp

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -34,20 +34,18 @@ logging::Logger::~Logger()
3434

3535
void logging::Logger::log(logging::LogLevel level, const std::string& msg)
3636
{
37-
logging::LogRecord *rec = new logging::LogRecord(mName, msg, level);
37+
const logging::LogRecord rec(mName, msg, level);
3838
handle(rec);
39-
delete rec;
4039
}
4140

4241
void logging::Logger::log(LogLevel level, const except::Context& ctxt)
4342
{
44-
logging::LogRecord *rec = new logging::LogRecord(mName, ctxt.getMessage(),
43+
const logging::LogRecord rec(mName, ctxt.getMessage(),
4544
level, ctxt.getFile(),
4645
ctxt.getFunction(),
4746
ctxt.getLine(),
4847
ctxt.getTime());
4948
handle(rec);
50-
delete rec;
5149
}
5250

5351
void logging::Logger::log(LogLevel level, const except::Throwable& t)
@@ -155,12 +153,12 @@ void logging::Logger::handle(const logging::LogRecord* record)
155153
{
156154
if (filter(record))
157155
{
158-
for (Handlers_T::iterator p = mHandlers.begin(); p != mHandlers.end(); ++p)
156+
for (const auto& p : mHandlers)
159157
{
160158
//std::cout << (int)(*p)->getLevel() << std::endl;
161159
//only handle if it is above/equal to threshold
162-
if (p->first->getLevel() <= record->getLevel())
163-
p->first->handle(record);
160+
if (p.first->getLevel() <= record->getLevel())
161+
p.first->handle(record);
164162
}
165163
}
166164
}
@@ -181,6 +179,10 @@ void logging::Logger::addHandler(logging::Handler* handler, bool own)
181179
if (!found)
182180
mHandlers.push_back(Handler_T(handler, own));
183181
}
182+
void logging::Logger::addHandler(std::unique_ptr<logging::Handler>&& handler)
183+
{
184+
addHandler(handler.release(), true /*own*/);
185+
}
184186

185187
void logging::Logger::removeHandler(logging::Handler* handler)
186188
{
@@ -197,20 +199,19 @@ void logging::Logger::removeHandler(logging::Handler* handler)
197199

198200
void logging::Logger::setLevel(LogLevel level)
199201
{
200-
for (Handlers_T::iterator p = mHandlers.begin(); p != mHandlers.end(); ++p)
202+
for (const auto& p : mHandlers)
201203
{
202204
//set the level
203-
p->first->setLevel(level);
205+
p.first->setLevel(level);
204206
}
205207
}
206208

207209
void logging::Logger::reset()
208210
{
209-
for (Handlers_T::iterator p = mHandlers.begin(); p
210-
!= mHandlers.end(); ++p)
211+
for (const auto& p : mHandlers)
211212
{
212-
if (p->second && p->first)
213-
delete p->first;
213+
if (p.second && p.first)
214+
delete p.first;
214215
}
215216
mHandlers.clear();
216217
}

externals/coda-oss/modules/c++/logging/source/StreamHandler.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,17 @@ void StreamHandler::setFormatter(Formatter* formatter)
7171
// start log with formatter injection
7272
write(mFormatter->getPrologue());
7373
}
74+
void StreamHandler::setFormatter(std::unique_ptr<Formatter>&& formatter)
75+
{
76+
// end log with formatter injection
77+
write(mFormatter->getEpilogue());
78+
79+
// delete old and reset to new
80+
Handler::setFormatter(std::move(formatter));
81+
82+
// start log with formatter injection
83+
write(mFormatter->getPrologue());
84+
}
7485

7586
void StreamHandler::close()
7687
{

externals/coda-oss/modules/c++/logging/unittests/test_exception_logger.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -61,9 +61,9 @@ sys::Mutex RunNothing::counterLock;
6161

6262
TEST_CASE(testExceptionLogger)
6363
{
64-
std::unique_ptr<logging::Logger> log(new logging::Logger("test"));
64+
logging::Logger log("test");
6565

66-
mem::SharedPtr<logging::ExceptionLogger> exLog(new logging::ExceptionLogger(log.get()));
66+
logging::ExceptionLogger exLog(&log);
6767

6868
size_t counter(0);
6969
uint16_t numThreads(2);
@@ -73,11 +73,11 @@ TEST_CASE(testExceptionLogger)
7373
mt::GenerationThreadPool pool(numThreads);
7474
pool.start();
7575

76-
runs.push_back(new RunNothing(counter, exLog.get()));
76+
runs.push_back(new RunNothing(counter, &exLog));
7777
pool.addAndWaitGroup(runs);
7878
runs.clear();
7979

80-
runs.push_back(new RunNothing(counter, exLog.get()));
80+
runs.push_back(new RunNothing(counter, &exLog));
8181
pool.addAndWaitGroup(runs);
8282
runs.clear();
8383

0 commit comments

Comments
 (0)