⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 timebasedrollingtest.cpp

📁 log4cxx 0.10 unix下编译包
💻 CPP
字号:
/* * 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/rolling/rollingfileappender.h>#include <log4cxx/logger.h>#include <log4cxx/consoleappender.h>#include <log4cxx/logmanager.h>#include <log4cxx/patternlayout.h>#include <log4cxx/rolling/timebasedrollingpolicy.h>#include <log4cxx/helpers/simpledateformat.h>#include <iostream>#include <log4cxx/helpers/stringhelper.h>#include "../util/compare.h"#include "../logunit.h"#include <apr_strings.h>#ifndef INT64_C#define INT64_C(x) x ## LL#endif#include <apr_time.h>using namespace log4cxx;using namespace log4cxx::helpers;using namespace log4cxx::rolling;/** * A rather exhaustive set of tests. Tests include leaving the ActiveFileName * argument blank, or setting it, with and without compression, and tests * with or without stopping/restarting the RollingFileAppender. * * The regression tests log a few times using a RollingFileAppender. Then, * they predict the names of the files which sould be generated and compare * them with witness files. * * <pre>         Compression    ActiveFileName  Stop/Restart Test1      NO              BLANK          NO Test2      NO              BLANK          YES Test3      YES             BLANK          NO Test4      NO                SET          YES Test5      NO                SET          NO Test6      YES               SET          NO * </pre> *  */LOGUNIT_CLASS(TimeBasedRollingTest) {        LOGUNIT_TEST_SUITE(TimeBasedRollingTest);           LOGUNIT_TEST(test1);           LOGUNIT_TEST(test2);           LOGUNIT_TEST(test3);           LOGUNIT_TEST(test4);           LOGUNIT_TEST(test5);           LOGUNIT_TEST(test6);        LOGUNIT_TEST_SUITE_END();    static LoggerPtr logger;public:  void setUp() {      LoggerPtr root(Logger::getRootLogger());    root->addAppender(      new ConsoleAppender(new PatternLayout(         LOG4CXX_STR("%d{ABSOLUTE} [%t] %level %c{2}#%M:%L - %m%n"))));  }  void tearDown() {      LogManager::shutdown();  }  /**   * Test rolling without compression, activeFileName left blank, no stop/start   */  void test1()  {    PatternLayoutPtr layout(new PatternLayout(LOG4CXX_STR("%c{1} - %m%n")));    RollingFileAppenderPtr rfa(new RollingFileAppender());    rfa->setLayout(layout);    LogString datePattern(LOG4CXX_STR("yyyy-MM-dd_HH_mm_ss"));    TimeBasedRollingPolicyPtr tbrp(new TimeBasedRollingPolicy());    tbrp->setFileNamePattern(LOG4CXX_STR("output/test1-%d{yyyy-MM-dd_HH_mm_ss}"));    Pool p;    tbrp->activateOptions(p);    rfa->setRollingPolicy(tbrp);    rfa->activateOptions(p);    logger->addAppender(rfa);    SimpleDateFormat sdf(datePattern);    LogString filenames[4];    Pool pool;    apr_time_t now = apr_time_now();    { for (int i = 0; i < 4; i++) {      filenames[i] = LOG4CXX_STR("output/test1-");      sdf.format(filenames[i], now, p);      now += APR_USEC_PER_SEC;    } }    std::cout << "Waiting until next second and 100 millis.";    delayUntilNextSecond(100);    std::cout << "Done waiting.";    { for (int i = 0; i < 5; i++) {        std::string message("Hello---");        message.append(pool.itoa(i));        LOG4CXX_DEBUG(logger, message);        apr_sleep(APR_USEC_PER_SEC/2);    } }    for (int i = 0; i < 4; i++) {      LogString witness(LOG4CXX_STR("witness/rolling/tbr-test1."));      StringHelper::toString(i, pool, witness);      LOGUNIT_ASSERT(Compare::compare(filenames[i], File(witness)));    }  }  /**   * No compression, with stop/restart, activeFileName left blank   */  void test2()  {    LogString datePattern(LOG4CXX_STR("yyyy-MM-dd_HH_mm_ss"));    PatternLayoutPtr layout1(new PatternLayout(LOG4CXX_STR("%c{1} - %m%n")));    RollingFileAppenderPtr rfa1(new RollingFileAppender());    rfa1->setLayout(layout1);    TimeBasedRollingPolicyPtr tbrp1(new TimeBasedRollingPolicy());    tbrp1->setFileNamePattern(LOG4CXX_STR("output/test2-%d{yyyy-MM-dd_HH_mm_ss}"));    Pool pool;    tbrp1->activateOptions(pool);    rfa1->setRollingPolicy(tbrp1);    rfa1->activateOptions(pool);    logger->addAppender(rfa1);    SimpleDateFormat sdf(datePattern);    LogString filenames[4];    apr_time_t now = apr_time_now();    { for (int i = 0; i < 4; i++) {      filenames[i] = LOG4CXX_STR("output/test2-");      sdf.format(filenames[i], now, pool);      now += APR_USEC_PER_SEC;    } }    delayUntilNextSecond(100);    { for (int i = 0; i <= 2; i++) {        std::string message("Hello---");        message.append(pool.itoa(i));        LOG4CXX_DEBUG(logger, message);        apr_sleep(APR_USEC_PER_SEC/2);    } }    logger->removeAppender(rfa1);    rfa1->close();    PatternLayoutPtr layout2(new PatternLayout(LOG4CXX_STR("%c{1} - %m%n")));    RollingFileAppenderPtr rfa2 = new RollingFileAppender();    rfa2->setLayout(layout2);    TimeBasedRollingPolicyPtr tbrp2 = new TimeBasedRollingPolicy();    tbrp2->setFileNamePattern(LOG4CXX_STR("output/test2-%d{yyyy-MM-dd_HH_mm_ss}"));    tbrp2->activateOptions(pool);    rfa2->setRollingPolicy(tbrp2);    rfa2->activateOptions(pool);    logger->addAppender(rfa2);    { for (int i = 3; i <= 4; i++) {        std::string message("Hello---");        message.append(pool.itoa(i));        LOG4CXX_DEBUG(logger, message);        apr_sleep(APR_USEC_PER_SEC/2);    } }    for (int i = 0; i < 4; i++) {      LogString witness(LOG4CXX_STR("witness/rolling/tbr-test2."));      StringHelper::toString(i, pool, witness);      LOGUNIT_ASSERT(Compare::compare(filenames[i], File(witness)));    }  }  /**   * With compression, activeFileName left blank, no stop/restart   */  void test3() {    Pool p;    PatternLayoutPtr layout = new PatternLayout(LOG4CXX_STR("%c{1} - %m%n"));    RollingFileAppenderPtr rfa = new RollingFileAppender();    rfa->setAppend(false);    rfa->setLayout(layout);    LogString datePattern = LOG4CXX_STR("yyyy-MM-dd_HH_mm_ss");    TimeBasedRollingPolicyPtr tbrp = new TimeBasedRollingPolicy();    tbrp->setFileNamePattern(LogString(LOG4CXX_STR("output/test3-%d{")) + datePattern + LogString(LOG4CXX_STR("}.gz")));    tbrp->activateOptions(p);    rfa->setRollingPolicy(tbrp);    rfa->activateOptions(p);    logger->addAppender(rfa);    DateFormatPtr sdf = new SimpleDateFormat(datePattern);    LogString filenames[4];    apr_time_t now = apr_time_now();    { for (int i = 0; i < 4; i++) {      filenames[i] = LOG4CXX_STR("output/test3-");      sdf->format(filenames[i], now, p);      filenames[i].append(LOG4CXX_STR(".gz"));      now += APR_USEC_PER_SEC;    } }    filenames[3].resize(filenames[3].size() - 3);    delayUntilNextSecond(100);    { for (int i = 0; i < 5; i++) {        std::string message("Hello---");        message.append(p.itoa(i));        LOG4CXX_DEBUG(logger, message);        apr_sleep(APR_USEC_PER_SEC/2);    } }    LOGUNIT_ASSERT_EQUAL(true, File(filenames[0]).exists(p));    LOGUNIT_ASSERT_EQUAL(true, File(filenames[1]).exists(p));    LOGUNIT_ASSERT_EQUAL(true, File(filenames[2]).exists(p));    LOGUNIT_ASSERT_EQUAL(true, Compare::compare(File(filenames[3]), File(LOG4CXX_STR("witness/rolling/tbr-test3.3"))));  }  /**   * Without compression, activeFileName set,  with stop/restart   */  void test4()  {    LogString datePattern = LOG4CXX_STR("yyyy-MM-dd_HH_mm_ss");    PatternLayoutPtr layout1 = new PatternLayout(LOG4CXX_STR("%c{1} - %m%n"));    RollingFileAppenderPtr rfa1 = new RollingFileAppender();    rfa1->setLayout(layout1);    Pool pool;    TimeBasedRollingPolicyPtr tbrp1 = new TimeBasedRollingPolicy();    rfa1->setFile(LOG4CXX_STR("output/test4.log"));    tbrp1->setFileNamePattern(LOG4CXX_STR("output/test4-%d{yyyy-MM-dd_HH_mm_ss}"));    tbrp1->activateOptions(pool);    rfa1->setRollingPolicy(tbrp1);    rfa1->activateOptions(pool);    logger->addAppender(rfa1);    SimpleDateFormat sdf(datePattern);    LogString filenames[4];    apr_time_t now = apr_time_now();    { for (int i = 0; i < 3; i++) {      filenames[i] = LOG4CXX_STR("output/test4-");      sdf.format(filenames[i], now, pool);      now += APR_USEC_PER_SEC;    } }    filenames[3] = LOG4CXX_STR("output/test4.log");    std::cout << "Waiting until next second and 100 millis.";    delayUntilNextSecond(100);    std::cout << "Done waiting.";    { for (int i = 0; i <= 2; i++) {        std::string message("Hello---");        message.append(pool.itoa(i));        LOG4CXX_DEBUG(logger, message);        apr_sleep(APR_USEC_PER_SEC/2);    } }    logger->removeAppender(rfa1);    rfa1->close();    PatternLayoutPtr layout2 = new PatternLayout(LOG4CXX_STR("%c{1} - %m%n"));    RollingFileAppenderPtr rfa2 = new RollingFileAppender();    rfa2->setLayout(layout2);    TimeBasedRollingPolicyPtr tbrp2 = new TimeBasedRollingPolicy();    tbrp2->setFileNamePattern(LOG4CXX_STR("output/test4-%d{yyyy-MM-dd_HH_mm_ss}"));    rfa2->setFile(LOG4CXX_STR("output/test4.log"));    tbrp2->activateOptions(pool);    rfa2->setRollingPolicy(tbrp2);    rfa2->activateOptions(pool);    logger->addAppender(rfa2);    { for (int i = 3; i <= 4; i++) {        std::string message("Hello---");        message.append(pool.itoa(i));        LOG4CXX_DEBUG(logger, message);        apr_sleep(APR_USEC_PER_SEC/2);    } }    for (int i = 0; i < 4; i++) {      LogString witness(LOG4CXX_STR("witness/rolling/tbr-test4."));      StringHelper::toString(i, pool, witness);      LOGUNIT_ASSERT(Compare::compare(filenames[i], File(witness)));    }  }  /**   * No compression, activeFileName set,  without stop/restart   */  void test5()  {    PatternLayoutPtr layout = new PatternLayout(LOG4CXX_STR("%c{1} - %m%n"));    RollingFileAppenderPtr rfa = new RollingFileAppender();    rfa->setLayout(layout);    LogString datePattern(LOG4CXX_STR("yyyy-MM-dd_HH_mm_ss"));    TimeBasedRollingPolicyPtr tbrp = new TimeBasedRollingPolicy();    tbrp->setFileNamePattern(LOG4CXX_STR("output/test5-%d{yyyy-MM-dd_HH_mm_ss}"));    rfa->setFile(LOG4CXX_STR("output/test5.log"));    Pool pool;    tbrp->activateOptions(pool);    rfa->setRollingPolicy(tbrp);    rfa->activateOptions(pool);    logger->addAppender(rfa);    SimpleDateFormat sdf(datePattern);    LogString filenames[4];    apr_time_t now = apr_time_now();    { for (int i = 0; i < 3; i++) {      filenames[i] = LOG4CXX_STR("output/test5-");      sdf.format(filenames[i], now, pool);      now += APR_USEC_PER_SEC;    } }    filenames[3] = LOG4CXX_STR("output/test5.log");    std::cout << "Waiting until next second and 100 millis.";    delayUntilNextSecond(100);    std::cout << "Done waiting.";    { for (int i = 0; i < 5; i++) {        std::string message("Hello---");        message.append(pool.itoa(i));        LOG4CXX_DEBUG(logger, message);        apr_sleep(APR_USEC_PER_SEC/2);    } }    for (int i = 0; i < 4; i++) {      LogString witness(LOG4CXX_STR("witness/rolling/tbr-test5."));      StringHelper::toString(i, pool, witness);      LOGUNIT_ASSERT(Compare::compare(filenames[i], File(witness)));    }  }  /**   * With compression, activeFileName set, no stop/restart,   */  void test6() {    Pool p;    PatternLayoutPtr layout = new PatternLayout(LOG4CXX_STR("%c{1} - %m%n"));    RollingFileAppenderPtr rfa = new RollingFileAppender();    rfa->setAppend(false);    rfa->setLayout(layout);    LogString datePattern = LOG4CXX_STR("yyyy-MM-dd_HH_mm_ss");    TimeBasedRollingPolicyPtr tbrp = new TimeBasedRollingPolicy();    tbrp->setFileNamePattern(LogString(LOG4CXX_STR("output/test6-%d{")) + datePattern + LogString(LOG4CXX_STR("}.gz")));    rfa->setFile(LOG4CXX_STR("output/test6.log"));    tbrp->activateOptions(p);    rfa->setRollingPolicy(tbrp);    rfa->activateOptions(p);    logger->addAppender(rfa);    DateFormatPtr sdf = new SimpleDateFormat(datePattern);    LogString filenames[4];    apr_time_t now = apr_time_now();    { for (int i = 0; i < 3; i++) {      filenames[i] = LOG4CXX_STR("output/test6-");      sdf->format(filenames[i], now, p);      filenames[i].append(LOG4CXX_STR(".gz"));      now += APR_USEC_PER_SEC;    } }    filenames[3] = LOG4CXX_STR("output/test6.log");    delayUntilNextSecond(100);    { for (int i = 0; i < 5; i++) {        std::string message("Hello---");        message.append(p.itoa(i));        LOG4CXX_DEBUG(logger, message);        apr_sleep(APR_USEC_PER_SEC/2);    } }    LOGUNIT_ASSERT_EQUAL(true, File(filenames[0]).exists(p));    LOGUNIT_ASSERT_EQUAL(true, File(filenames[1]).exists(p));    LOGUNIT_ASSERT_EQUAL(true, File(filenames[2]).exists(p));    LOGUNIT_ASSERT_EQUAL(true, Compare::compare(File(filenames[3]), File(LOG4CXX_STR("witness/rolling/tbr-test6.3"))));  }  void delayUntilNextSecond(int millis) {    apr_time_t now = apr_time_now();    apr_time_t next = ((now / APR_USEC_PER_SEC) + 1) * APR_USEC_PER_SEC          + millis * 1000L;    apr_sleep(next - now);  }  void delayUntilNextMinute(int seconds) {    apr_time_t now = apr_time_now();    apr_time_t next = ((now / APR_USEC_PER_SEC) + 1) * APR_USEC_PER_SEC          + seconds * 1000000L;    apr_sleep(next - now);  }};LoggerPtr TimeBasedRollingTest::logger(Logger::getLogger("org.apache.log4j.TimeBasedRollingTest"));LOGUNIT_TEST_SUITE_REGISTRATION(TimeBasedRollingTest);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -