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

📄 sizebasedrollingtest.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 "../util/compare.h"#include "../insertwide.h"#include "../logunit.h"#include <apr_time.h>#include <log4cxx/logmanager.h>#include <log4cxx/xml/domconfigurator.h>#include <log4cxx/patternlayout.h>#include <log4cxx/rolling/fixedwindowrollingpolicy.h>#include <log4cxx/rolling/sizebasedtriggeringpolicy.h>#include <log4cxx/filter/levelrangefilter.h>#include <log4cxx/helpers/pool.h>#include <log4cxx/logger.h>#include <log4cxx/propertyconfigurator.h>#include <log4cxx/rolling/rollingfileappender.h>#include <log4cxx/helpers/stringhelper.h>#include <log4cxx/consoleappender.h>#include <log4cxx/helpers/exception.h>#include <log4cxx/helpers/fileoutputstream.h>using namespace log4cxx;using namespace log4cxx::xml;using namespace log4cxx::filter;using namespace log4cxx::helpers;using namespace log4cxx::rolling;/** * * Do not forget to call activateOptions when configuring programatically. * *  * */LOGUNIT_CLASS(SizeBasedRollingTest)  {   LOGUNIT_TEST_SUITE(SizeBasedRollingTest);           LOGUNIT_TEST(test1);           LOGUNIT_TEST(test2);           LOGUNIT_TEST(test3);           LOGUNIT_TEST(test4);           LOGUNIT_TEST(test5);           LOGUNIT_TEST(test6);   LOGUNIT_TEST_SUITE_END();   LoggerPtr root;   LoggerPtr logger; public:  void setUp() {    PatternLayoutPtr layout(new PatternLayout(LOG4CXX_STR("%d %level %c -%m%n")));    AppenderPtr ca(new ConsoleAppender(layout));    ca->setName(LOG4CXX_STR("CONSOLE"));    root = Logger::getRootLogger();    root->addAppender(ca);    logger = Logger::getLogger("org.apache.log4j.rolling.SizeBasedRollingTest");  }  void tearDown() {    LogManager::shutdown();  }  void common(LoggerPtr& logger1, int /*sleep*/) {    char msg[] = { 'H', 'e', 'l', 'l', 'o', '-', '-', '-', 'N', 0 };    // Write exactly 10 bytes with each log    for (int i = 0; i < 25; i++) {      if (i < 10) {        msg[8] = '0' + i;      } else if (i < 100) {        msg[7] = '0' + i / 10;        msg[8] = '0' + i % 10;      }      LOG4CXX_DEBUG(logger1, msg);    }  }  /**   * Tests that the lack of an explicit active file will use the   * low index as the active file.   *   */  void test1() {    PatternLayoutPtr layout = new PatternLayout(LOG4CXX_STR("%m\n"));    RollingFileAppenderPtr rfa = new RollingFileAppender();    rfa->setName(LOG4CXX_STR("ROLLING"));    rfa->setAppend(false);    rfa->setLayout(layout);    FixedWindowRollingPolicyPtr swrp = new FixedWindowRollingPolicy();    SizeBasedTriggeringPolicyPtr sbtp = new SizeBasedTriggeringPolicy();    sbtp->setMaxFileSize(100);    swrp->setMinIndex(0);    swrp->setFileNamePattern(LOG4CXX_STR("output/sizeBased-test1.%i"));    Pool p;    swrp->activateOptions(p);    rfa->setRollingPolicy(swrp);    rfa->setTriggeringPolicy(sbtp);    rfa->activateOptions(p);    root->addAppender(rfa);    common(logger, 0);    LOGUNIT_ASSERT_EQUAL(true, File("output/sizeBased-test1.0").exists(p));    LOGUNIT_ASSERT_EQUAL(true, File("output/sizeBased-test1.1").exists(p));    LOGUNIT_ASSERT_EQUAL(true, File("output/sizeBased-test1.2").exists(p));    LOGUNIT_ASSERT_EQUAL(true, Compare::compare(File("output/sizeBased-test1.0"),     File("witness/rolling/sbr-test2.log")));    LOGUNIT_ASSERT_EQUAL(true, Compare::compare(File("output/sizeBased-test1.1"),     File("witness/rolling/sbr-test2.0")));    LOGUNIT_ASSERT_EQUAL(true, Compare::compare(File("output/sizeBased-test1.2"),     File("witness/rolling/sbr-test2.1")));  }  /**   * Test basic rolling functionality with explicit setting of FileAppender.file.   */  void test2() {    PatternLayoutPtr layout = new PatternLayout(LOG4CXX_STR("%m\n"));    RollingFileAppenderPtr rfa = new RollingFileAppender();    rfa->setName(LOG4CXX_STR("ROLLING"));    rfa->setAppend(false);    rfa->setLayout(layout);    rfa->setFile(LOG4CXX_STR("output/sizeBased-test2.log"));    FixedWindowRollingPolicyPtr swrp = new FixedWindowRollingPolicy();    SizeBasedTriggeringPolicyPtr sbtp = new SizeBasedTriggeringPolicy();    sbtp->setMaxFileSize(100);    swrp->setMinIndex(0);    swrp->setFileNamePattern(LOG4CXX_STR("output/sizeBased-test2.%i"));    Pool p;    swrp->activateOptions(p);    rfa->setRollingPolicy(swrp);    rfa->setTriggeringPolicy(sbtp);    rfa->activateOptions(p);    root->addAppender(rfa);    common(logger, 0);    LOGUNIT_ASSERT_EQUAL(true, File("output/sizeBased-test2.log").exists(p));    LOGUNIT_ASSERT_EQUAL(true, File("output/sizeBased-test2.0").exists(p));    LOGUNIT_ASSERT_EQUAL(true, File("output/sizeBased-test2.1").exists(p));    LOGUNIT_ASSERT_EQUAL(true, Compare::compare(File("output/sizeBased-test2.log"),     File("witness/rolling/sbr-test2.log")));    LOGUNIT_ASSERT_EQUAL(true, Compare::compare(File("output/sizeBased-test2.0"),     File("witness/rolling/sbr-test2.0")));    LOGUNIT_ASSERT_EQUAL(true, Compare::compare(File("output/sizeBased-test2.1"),     File("witness/rolling/sbr-test2.1")));  }  /**   * Same as testBasic but also with GZ compression.   */  void test3() {    PatternLayoutPtr layout = new PatternLayout(LOG4CXX_STR("%m\n"));    RollingFileAppenderPtr rfa = new RollingFileAppender();    rfa->setAppend(false);    rfa->setLayout(layout);    FixedWindowRollingPolicyPtr  fwrp = new FixedWindowRollingPolicy();    SizeBasedTriggeringPolicyPtr sbtp = new SizeBasedTriggeringPolicy();    sbtp->setMaxFileSize(100);    fwrp->setMinIndex(0);    rfa->setFile(LOG4CXX_STR("output/sbr-test3.log"));    fwrp->setFileNamePattern(LOG4CXX_STR("output/sbr-test3.%i.gz"));    Pool p;    fwrp->activateOptions(p);    rfa->setRollingPolicy(fwrp);    rfa->setTriggeringPolicy(sbtp);    rfa->activateOptions(p);    root->addAppender(rfa);    common(logger, 100);    LOGUNIT_ASSERT_EQUAL(true, File("output/sbr-test3.log").exists(p));    LOGUNIT_ASSERT_EQUAL(true, File("output/sbr-test3.0.gz").exists(p));    LOGUNIT_ASSERT_EQUAL(true, File("output/sbr-test3.1.gz").exists(p));    LOGUNIT_ASSERT_EQUAL(true, Compare::compare(File("output/sbr-test3.log"),  File("witness/rolling/sbr-test3.log")));    LOGUNIT_ASSERT_EQUAL(File("witness/rolling/sbr-test3.0.gz").length(p), File("output/sbr-test3.0.gz").length(p));    LOGUNIT_ASSERT_EQUAL(File("witness/rolling/sbr-test3.1.gz").length(p), File("output/sbr-test3.1.gz").length(p));  }  /**   * Test basic rolling functionality with bogus path in file name pattern.   */  void test4() {    PatternLayoutPtr layout = new PatternLayout(LOG4CXX_STR("%m\n"));    RollingFileAppenderPtr rfa = new RollingFileAppender();    rfa->setName(LOG4CXX_STR("ROLLING"));    rfa->setAppend(false);    rfa->setLayout(layout);    rfa->setFile(LOG4CXX_STR("output/sizeBased-test4.log"));    FixedWindowRollingPolicyPtr swrp = new FixedWindowRollingPolicy();    SizeBasedTriggeringPolicyPtr sbtp = new SizeBasedTriggeringPolicy();    sbtp->setMaxFileSize(100);    swrp->setMinIndex(0);    //    //   test4 directory should not exists.  Should cause all rollover attempts to fail.    //    swrp->setFileNamePattern(LOG4CXX_STR("output/test4/sizeBased-test4.%i"));    Pool p;    swrp->activateOptions(p);    rfa->setRollingPolicy(swrp);    rfa->setTriggeringPolicy(sbtp);    rfa->activateOptions(p);    root->addAppender(rfa);    common(logger, 0);    LOGUNIT_ASSERT_EQUAL(true, File("output/sizeBased-test4.log").exists(p));    LOGUNIT_ASSERT_EQUAL(true, Compare::compare(File("output/sizeBased-test4.log"),     File("witness/rolling/sbr-test4.log")));  }  /**   * Checking handling of rename failures due to other access   * to the indexed files.   */  void test5()  {    PatternLayoutPtr layout = new PatternLayout(LOG4CXX_STR("%m\n"));    RollingFileAppenderPtr rfa = new RollingFileAppender();    rfa->setName(LOG4CXX_STR("ROLLING"));    rfa->setAppend(false);    rfa->setLayout(layout);    rfa->setFile(LOG4CXX_STR("output/sizeBased-test5.log"));    FixedWindowRollingPolicyPtr swrp = new FixedWindowRollingPolicy();    SizeBasedTriggeringPolicyPtr sbtp = new SizeBasedTriggeringPolicy();    sbtp->setMaxFileSize(100);    swrp->setMinIndex(0);    swrp->setFileNamePattern(LOG4CXX_STR("output/sizeBased-test5.%i"));    Pool p;    swrp->activateOptions(p);    rfa->setRollingPolicy(swrp);    rfa->setTriggeringPolicy(sbtp);    rfa->activateOptions(p);    root->addAppender(rfa);    //    //   put stray file about locked file    FileOutputStream os1(LOG4CXX_STR("output/sizeBased-test5.1"), false);    os1.close(p);    FileOutputStream os0(LOG4CXX_STR("output/sizeBased-test5.0"), false);    common(logger, 0);    os0.close(p);    if (File("output/sizeBased-test5.3").exists(p)) {      //      //    looks like platform where open files can be renamed      //      LOGUNIT_ASSERT_EQUAL(true, File("output/sizeBased-test5.log").exists(p));      LOGUNIT_ASSERT_EQUAL(true, File("output/sizeBased-test5.0").exists(p));      LOGUNIT_ASSERT_EQUAL(true, File("output/sizeBased-test5.1").exists(p));      LOGUNIT_ASSERT_EQUAL(true, File("output/sizeBased-test5.2").exists(p));      LOGUNIT_ASSERT_EQUAL(true, File("output/sizeBased-test5.3").exists(p));      LOGUNIT_ASSERT_EQUAL(true, Compare::compare(File("output/sizeBased-test5.log"),       File("witness/rolling/sbr-test2.log")));      LOGUNIT_ASSERT_EQUAL(true, Compare::compare(File("output/sizeBased-test5.0"),       File("witness/rolling/sbr-test2.0")));      LOGUNIT_ASSERT_EQUAL(true, Compare::compare(File("output/sizeBased-test5.1"),       File("witness/rolling/sbr-test2.1")));    } else {      //      //  rollover attempts should all fail      //    so initial log file should have all log content      //    open file should be unaffected      //    stray file should have only been moved one slot.      LOGUNIT_ASSERT_EQUAL(true, File("output/sizeBased-test5.log").exists(p));      LOGUNIT_ASSERT_EQUAL(true, File("output/sizeBased-test5.0").exists(p));      LOGUNIT_ASSERT_EQUAL(true, File("output/sizeBased-test5.2").exists(p));      LOGUNIT_ASSERT_EQUAL(true, Compare::compare(File("output/sizeBased-test5.log"),          File("witness/rolling/sbr-test4.log")));    }  }    /**   * Same as testBasic but also with GZ compression.   */  void test6() {    PatternLayoutPtr layout = new PatternLayout(LOG4CXX_STR("%m\n"));    RollingFileAppenderPtr rfa = new RollingFileAppender();    rfa->setAppend(false);    rfa->setLayout(layout);    FixedWindowRollingPolicyPtr  fwrp = new FixedWindowRollingPolicy();    SizeBasedTriggeringPolicyPtr sbtp = new SizeBasedTriggeringPolicy();    sbtp->setMaxFileSize(100);    fwrp->setMinIndex(0);    rfa->setFile(LOG4CXX_STR("output/sbr-test6.log"));    fwrp->setFileNamePattern(LOG4CXX_STR("output/sbr-test6.%i.zip"));    Pool p;    fwrp->activateOptions(p);    rfa->setRollingPolicy(fwrp);    rfa->setTriggeringPolicy(sbtp);    rfa->activateOptions(p);    root->addAppender(rfa);    common(logger, 100);    LOGUNIT_ASSERT_EQUAL(true, File("output/sbr-test6.log").exists(p));    LOGUNIT_ASSERT_EQUAL(true, File("output/sbr-test6.0.zip").exists(p));    LOGUNIT_ASSERT_EQUAL(true, File("output/sbr-test6.1.zip").exists(p));    LOGUNIT_ASSERT_EQUAL(true, Compare::compare(File("output/sbr-test6.log"),  File("witness/rolling/sbr-test3.log")));  }  };LOGUNIT_TEST_SUITE_REGISTRATION(SizeBasedRollingTest);

⌨️ 快捷键说明

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