You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4cxx-dev@logging.apache.org by ca...@apache.org on 2006/12/13 01:21:20 UTC

svn commit: r486425 - in /logging/log4cxx/trunk: include/log4cxx/dailyrollingfileappender.h include/log4cxx/rollingfileappender.h src/class.cpp src/obsoleterollingfileappender.cpp tests/src/rolling/obsoleterollingfileappendertest.cpp

Author: carnold
Date: Tue Dec 12 16:21:20 2006
New Revision: 486425

URL: http://svn.apache.org/viewvc?view=rev&rev=486425
Log:
LOGCXX-52: Config support for old-style RFA

Modified:
    logging/log4cxx/trunk/include/log4cxx/dailyrollingfileappender.h
    logging/log4cxx/trunk/include/log4cxx/rollingfileappender.h
    logging/log4cxx/trunk/src/class.cpp
    logging/log4cxx/trunk/src/obsoleterollingfileappender.cpp
    logging/log4cxx/trunk/tests/src/rolling/obsoleterollingfileappendertest.cpp

Modified: logging/log4cxx/trunk/include/log4cxx/dailyrollingfileappender.h
URL: http://svn.apache.org/viewvc/logging/log4cxx/trunk/include/log4cxx/dailyrollingfileappender.h?view=diff&rev=486425&r1=486424&r2=486425
==============================================================================
--- logging/log4cxx/trunk/include/log4cxx/dailyrollingfileappender.h (original)
+++ logging/log4cxx/trunk/include/log4cxx/dailyrollingfileappender.h Tue Dec 12 16:21:20 2006
@@ -47,7 +47,7 @@
   *  @author Curt Arnold
   * @deprecated Replaced by {@link org.apache.log4j.rolling.RollingFileAppender}
 */
-class DailyRollingFileAppender : public log4cxx::helpers::ObjectImpl, Appender {
+class LOG4CXX_EXPORT DailyRollingFileAppender : public log4cxx::helpers::ObjectImpl, Appender {
   DECLARE_LOG4CXX_OBJECT(DailyRollingFileAppender)
   BEGIN_LOG4CXX_CAST_MAP()
           LOG4CXX_CAST_ENTRY(DailyRollingFileAppender)

Modified: logging/log4cxx/trunk/include/log4cxx/rollingfileappender.h
URL: http://svn.apache.org/viewvc/logging/log4cxx/trunk/include/log4cxx/rollingfileappender.h?view=diff&rev=486425&r1=486424&r2=486425
==============================================================================
--- logging/log4cxx/trunk/include/log4cxx/rollingfileappender.h (original)
+++ logging/log4cxx/trunk/include/log4cxx/rollingfileappender.h Tue Dec 12 16:21:20 2006
@@ -54,7 +54,10 @@
     log4cxx::rolling::RollingFileAppenderPtr rfa;
 
   public:
-    DECLARE_LOG4CXX_OBJECT( RollingFileAppender )
+    //
+    //   Use custom class to use non-default name to avoid
+    //       conflict with log4cxx::rolling::RollingFileAppender
+    DECLARE_LOG4CXX_OBJECT_WITH_CUSTOM_CLASS( RollingFileAppender, ClassRollingFileAppender )
     BEGIN_LOG4CXX_CAST_MAP()
          LOG4CXX_CAST_ENTRY( RollingFileAppender )
          LOG4CXX_CAST_ENTRY( Appender )

Modified: logging/log4cxx/trunk/src/class.cpp
URL: http://svn.apache.org/viewvc/logging/log4cxx/trunk/src/class.cpp?view=diff&rev=486425&r1=486424&r2=486425
==============================================================================
--- logging/log4cxx/trunk/src/class.cpp (original)
+++ logging/log4cxx/trunk/src/class.cpp Tue Dec 12 16:21:20 2006
@@ -98,29 +98,30 @@
 
 const Class& Class::forName(const LogString& className)
 {
-        LogString strippedClassName;
-        LogString::size_type pos = className.find_last_of(LOG4CXX_STR('.'));
-        if (pos != LogString::npos)
-        {
-                strippedClassName.assign(className.substr(pos + 1));
-        }
-        else
-        {
-                strippedClassName.assign(className);
-        }
-        strippedClassName = StringHelper::toLowerCase(strippedClassName);
-
-        const Class * clazz = getRegistry()[strippedClassName];
-
+        LogString lowerName(StringHelper::toLowerCase(className));
+        //
+        //  check registry using full class name
+        //
+        const Class* clazz = getRegistry()[lowerName];
         if (clazz == 0) {
-            //
-            //   make sure all well-known classes are registered
-            //
-            registerClasses();
-            clazz = getRegistry()[strippedClassName];
-            if (clazz == 0) {
-                throw ClassNotFoundException(className);
+            LogString::size_type pos = className.find_last_of(LOG4CXX_STR('.'));
+            if (pos != LogString::npos) {
+                LogString terminalName(lowerName, pos + 1, LogString::npos);
+                clazz = getRegistry()[terminalName];
+                if (clazz == 0) {
+                    registerClasses();
+                    clazz = getRegistry()[lowerName];
+                    if (clazz == 0) {
+                        clazz = getRegistry()[terminalName];
+                    }
+                }
+            } else {
+                registerClasses();
+                clazz = getRegistry()[lowerName];
             }
+        }
+        if (clazz == 0) {
+            throw ClassNotFoundException(className);
         }
 
         return *clazz;

Modified: logging/log4cxx/trunk/src/obsoleterollingfileappender.cpp
URL: http://svn.apache.org/viewvc/logging/log4cxx/trunk/src/obsoleterollingfileappender.cpp?view=diff&rev=486425&r1=486424&r2=486425
==============================================================================
--- logging/log4cxx/trunk/src/obsoleterollingfileappender.cpp (original)
+++ logging/log4cxx/trunk/src/obsoleterollingfileappender.cpp Tue Dec 12 16:21:20 2006
@@ -28,14 +28,34 @@
 using namespace log4cxx::helpers;
 using namespace log4cxx::spi;
 
+namespace log4cxx {
+    class ClassRollingFileAppender : public Class 
+    {
+    public:
+        ClassRollingFileAppender() : helpers::Class() {}
+        virtual const log4cxx::logchar* getName() const {
+            return LOG4CXX_STR("org.apache.log4j.RollingFileAppender");
+        }
+        virtual ObjectPtr newInstance() const {
+            return new RollingFileAppender();
+        }
+    };
+}
+
 const log4cxx::helpers::Class& RollingFileAppender::getClass() const { return getStaticClass(); }
-const log4cxx::helpers::Class& RollingFileAppender::getStaticClass() {
+const log4cxx::helpers::Class& RollingFileAppender::getStaticClass() { 
    static ClassRollingFileAppender theClass;
    return theClass;
+}                                                        
+const log4cxx::helpers::ClassRegistration& RollingFileAppender::registerClass() {
+    static log4cxx::helpers::ClassRegistration classReg(RollingFileAppender::getStaticClass);
+    return classReg;
 }
 namespace log4cxx { namespace classes {
-   bool ObsoleteRollingFileAppenderIsRegistered = false;
- /*      log4cxx::helpers::Class::registerClass(RollingFileAppender::getStaticClass()); */} }
+const log4cxx::helpers::ClassRegistration& ObsoleteRollingFileAppenderRegistration = 
+        RollingFileAppender::registerClass();
+} }
+
 
 
 RollingFileAppender::RollingFileAppender()

Modified: logging/log4cxx/trunk/tests/src/rolling/obsoleterollingfileappendertest.cpp
URL: http://svn.apache.org/viewvc/logging/log4cxx/trunk/tests/src/rolling/obsoleterollingfileappendertest.cpp?view=diff&rev=486425&r1=486424&r2=486425
==============================================================================
--- logging/log4cxx/trunk/tests/src/rolling/obsoleterollingfileappendertest.cpp (original)
+++ logging/log4cxx/trunk/tests/src/rolling/obsoleterollingfileappendertest.cpp Tue Dec 12 16:21:20 2006
@@ -45,11 +45,10 @@
  */
  class ObsoleteRollingFileAppenderTest : public CppUnit::TestFixture  {
    CPPUNIT_TEST_SUITE(ObsoleteRollingFileAppenderTest);
-//    TODO: Property configurator isn't able to distinguish between
-//        obsolete and o.a.l.rolling.RollingFileAppender
-//         CPPUNIT_TEST(test1);
+           CPPUNIT_TEST(test1);
            CPPUNIT_TEST(test2);
            CPPUNIT_TEST(testIsOptionHandler);
+           CPPUNIT_TEST(testClassForName);
    CPPUNIT_TEST_SUITE_END();
 
 
@@ -135,6 +134,12 @@
   void testIsOptionHandler() {
       RollingFileAppenderPtr rfa(new RollingFileAppender());
       CPPUNIT_ASSERT_EQUAL(true, rfa->instanceof(log4cxx::spi::OptionHandler::getStaticClass()));
+  }
+
+  void testClassForName() {
+      LogString className(LOG4CXX_STR("org.apache.log4j.RollingFileAppender"));
+      const Class& myclass = Class::forName(className);
+      CPPUNIT_ASSERT_EQUAL(className, LogString(myclass.getName()));
   }
 };