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.
150 lines
4.0 KiB
150 lines
4.0 KiB
|
|
#include <log4cplus/consoleappender.h>
|
|
#include <log4cplus/layout.h>
|
|
#include <log4cplus/logger.h>
|
|
#include <log4cplus/ndc.h>
|
|
#include <log4cplus/helpers/loglog.h>
|
|
#include <log4cplus/thread/threads.h>
|
|
#include <log4cplus/helpers/sleep.h>
|
|
#include <log4cplus/streams.h>
|
|
#include <log4cplus/loggingmacros.h>
|
|
#include <log4cplus/tracelogger.h>
|
|
#include <exception>
|
|
#include <iostream>
|
|
#include <string>
|
|
|
|
|
|
using namespace std;
|
|
using namespace log4cplus;
|
|
using namespace log4cplus::helpers;
|
|
using namespace log4cplus::thread;
|
|
|
|
|
|
#define MILLIS_TO_NANOS 1000
|
|
#define NUM_THREADS 4
|
|
#define NUM_LOOPS 10
|
|
|
|
class SlowObject {
|
|
public:
|
|
SlowObject()
|
|
: logger(Logger::getInstance(LOG4CPLUS_TEXT("SlowObject")))
|
|
{
|
|
logger.setLogLevel(TRACE_LOG_LEVEL);
|
|
}
|
|
|
|
void doSomething()
|
|
{
|
|
LOG4CPLUS_TRACE_METHOD(logger, LOG4CPLUS_TEXT("SlowObject::doSomething()"));
|
|
{
|
|
log4cplus::thread::MutexGuard guard (mutex);
|
|
LOG4CPLUS_INFO(logger, LOG4CPLUS_TEXT("Actually doing something..."));
|
|
sleep(0, 75 * MILLIS_TO_NANOS);
|
|
LOG4CPLUS_INFO_FMT(logger,
|
|
LOG4CPLUS_TEXT (
|
|
"Actually doing something...%d, %d, %d, %ls...DONE"),
|
|
1, 2, 3, L"testing");
|
|
}
|
|
log4cplus::thread::yield();
|
|
}
|
|
|
|
~SlowObject ()
|
|
{ }
|
|
|
|
private:
|
|
log4cplus::thread::Mutex mutex;
|
|
Logger logger;
|
|
};
|
|
|
|
|
|
class TestThread : public AbstractThread {
|
|
public:
|
|
TestThread (tstring const & n, SlowObject * so)
|
|
: name(n)
|
|
, slow(so)
|
|
, logger(Logger::getInstance(LOG4CPLUS_TEXT("test.TestThread")))
|
|
{ }
|
|
|
|
virtual void run();
|
|
|
|
private:
|
|
tstring name;
|
|
SlowObject * slow;
|
|
Logger logger;
|
|
};
|
|
|
|
|
|
int
|
|
main()
|
|
{
|
|
try
|
|
{
|
|
auto_ptr<SlowObject> slowObject(new SlowObject());
|
|
log4cplus::helpers::LogLog::getLogLog()->setInternalDebugging(true);
|
|
Logger logger = Logger::getInstance(LOG4CPLUS_TEXT("main"));
|
|
Logger::getRoot().setLogLevel(INFO_LOG_LEVEL);
|
|
LogLevel ll = logger.getLogLevel();
|
|
tcout << "main Priority: " << getLogLevelManager().toString(ll) << endl;
|
|
|
|
helpers::SharedObjectPtr<Appender> append_1(new ConsoleAppender());
|
|
append_1->setLayout( std::auto_ptr<Layout>(new log4cplus::TTCCLayout()) );
|
|
Logger::getRoot().addAppender(append_1);
|
|
append_1->setName(LOG4CPLUS_TEXT("cout"));
|
|
|
|
append_1 = 0;
|
|
|
|
log4cplus::helpers::SharedObjectPtr<TestThread> threads[NUM_THREADS];
|
|
int i = 0;
|
|
for(i=0; i<NUM_THREADS; ++i) {
|
|
tostringstream s;
|
|
s << "Thread-" << i;
|
|
threads[i] = new TestThread(s.str(), slowObject.get());
|
|
}
|
|
|
|
for(i=0; i<NUM_THREADS; ++i) {
|
|
threads[i]->start();
|
|
}
|
|
LOG4CPLUS_DEBUG(logger, "All Threads started...");
|
|
|
|
for(i=0; i<NUM_THREADS; ++i) {
|
|
while(threads[i]->isRunning()) {
|
|
sleep(0, 200 * MILLIS_TO_NANOS);
|
|
}
|
|
}
|
|
LOG4CPLUS_INFO(logger, "Exiting main()...");
|
|
}
|
|
catch(std::exception &e) {
|
|
LOG4CPLUS_FATAL(Logger::getRoot(), "main()- Exception occured: " << e.what());
|
|
}
|
|
catch(...) {
|
|
LOG4CPLUS_FATAL(Logger::getRoot(), "main()- Exception occured");
|
|
}
|
|
|
|
log4cplus::Logger::shutdown();
|
|
return 0;
|
|
}
|
|
|
|
|
|
void
|
|
TestThread::run()
|
|
{
|
|
try {
|
|
LOG4CPLUS_WARN(logger, name + LOG4CPLUS_TEXT(" TestThread.run()- Starting..."));
|
|
NDC& ndc = getNDC();
|
|
NDCContextCreator _first_ndc(name);
|
|
LOG4CPLUS_DEBUG(logger, "Entering Run()...");
|
|
for(int i=0; i<NUM_LOOPS; ++i) {
|
|
NDCContextCreator _ndc(LOG4CPLUS_TEXT("loop"));
|
|
slow->doSomething();
|
|
}
|
|
LOG4CPLUS_DEBUG(logger, "Exiting run()...");
|
|
|
|
ndc.remove();
|
|
}
|
|
catch(std::exception const & e) {
|
|
LOG4CPLUS_FATAL(logger, "TestThread.run()- Exception occurred: " << e.what());
|
|
}
|
|
catch(...) {
|
|
LOG4CPLUS_FATAL(logger, "TestThread.run()- Exception occurred!!");
|
|
}
|
|
LOG4CPLUS_WARN(logger, name << " TestThread.run()- Finished");
|
|
} // end "run"
|