| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 |
- #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()
- {
- log4cplus::initialize();
- 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"
|