Add Logger::logAlways
authoreric.carlson@apple.com <eric.carlson@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 26 Aug 2017 03:30:41 +0000 (03:30 +0000)
committereric.carlson@apple.com <eric.carlson@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 26 Aug 2017 03:30:41 +0000 (03:30 +0000)
https://bugs.webkit.org/show_bug.cgi?id=175996

Reviewed by Jer Noble.

Source/WebCore/PAL:

* PAL.xcodeproj/project.pbxproj:
* pal/Logger.h:
(PAL::Logger::willLog const):
(PAL::Logger::willLog const):
(PAL::Logger::logAlways): Added.
(PAL::Logger::error const): Add missing WTF_ATTRIBUTE_PRINTF.
(PAL::Logger::warning const): Ditto.
(PAL::Logger::notice const): Ditto.
(PAL::Logger::info const): Ditto.
(PAL::Logger::debug const): Use String::formatWithArguments.

Source/WTF:

* wtf/Assertions.cpp:
* wtf/Assertions.h:

Tools:

* TestWebKitAPI/Tests/WebCore/Logging.cpp:
(TestWebKitAPI::TEST_F):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@221221 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WTF/ChangeLog
Source/WTF/wtf/Assertions.cpp
Source/WTF/wtf/Assertions.h
Source/WebCore/PAL/ChangeLog
Source/WebCore/PAL/pal/Logger.h
Tools/ChangeLog
Tools/TestWebKitAPI/Tests/WebCore/Logging.cpp

index 198f904..eaee026 100644 (file)
@@ -1,3 +1,13 @@
+2017-08-25  Eric Carlson  <eric.carlson@apple.com>
+
+        Add Logger::logAlways
+        https://bugs.webkit.org/show_bug.cgi?id=175996
+
+        Reviewed by Jer Noble.
+
+        * wtf/Assertions.cpp:
+        * wtf/Assertions.h:
+
 2017-08-25  Daniel Bates  <dabates@apple.com>
 
         Demarcate code added due to lack of NSDMI for aggregates
index 94dd093..5159080 100644 (file)
@@ -413,7 +413,6 @@ static WTFLoggingAccumulator& loggingAccumulator()
 void WTFSetLogChannelLevel(WTFLogChannel* channel, WTFLogLevel level)
 {
     channel->level = level;
-    WTFLog(channel, "Channel \"%s\" level set to %i", channel->name, level);
 }
 
 bool WTFWillLogWithLevel(WTFLogChannel* channel, WTFLogLevel level)
@@ -423,10 +422,10 @@ bool WTFWillLogWithLevel(WTFLogChannel* channel, WTFLogLevel level)
 
 void WTFLogWithLevel(WTFLogChannel* channel, WTFLogLevel level, const char* format, ...)
 {
-    if (channel->level < level)
+    if (level != WTFLogLevelAlways && level > channel->level)
         return;
 
-    if (channel->state == WTFLogChannelOff)
+    if (channel->level != WTFLogLevelAlways && channel->state == WTFLogChannelOff)
         return;
 
     va_list args;
index 6aaa02c..3424b64 100644 (file)
@@ -148,7 +148,7 @@ extern "C" {
 #endif
 
 typedef enum { WTFLogChannelOff, WTFLogChannelOn, WTFLogChannelOnWithAccumulation } WTFLogChannelState;
-typedef enum { WTFLogLevelError, WTFLogLevelWarning, WTFLogLevelNotice, WTFLogLevelInfo, WTFLogLevelDebug } WTFLogLevel;
+typedef enum { WTFLogLevelAlways, WTFLogLevelError, WTFLogLevelWarning, WTFLogLevelNotice, WTFLogLevelInfo, WTFLogLevelDebug } WTFLogLevel;
 
 typedef struct {
     WTFLogChannelState state;
index 43babda..76dcd90 100644 (file)
@@ -1,3 +1,21 @@
+2017-08-25  Eric Carlson  <eric.carlson@apple.com>
+
+        Add Logger::logAlways
+        https://bugs.webkit.org/show_bug.cgi?id=175996
+
+        Reviewed by Jer Noble.
+
+        * PAL.xcodeproj/project.pbxproj:
+        * pal/Logger.h:
+        (PAL::Logger::willLog const):
+        (PAL::Logger::willLog const):
+        (PAL::Logger::logAlways): Added.
+        (PAL::Logger::error const): Add missing WTF_ATTRIBUTE_PRINTF.
+        (PAL::Logger::warning const): Ditto.
+        (PAL::Logger::notice const): Ditto.
+        (PAL::Logger::info const): Ditto.
+        (PAL::Logger::debug const): Use String::formatWithArguments.
+
 2017-08-25  Jonathan Bedard  <jbedard@apple.com>
 
         Fix build breakage with Public iOS 11 SDK
index 928e4fb..afc1227 100644 (file)
@@ -42,7 +42,23 @@ public:
     }
 
     template<typename... Arguments>
-    inline void error(WTFLogChannel& channel, const char* format, const Arguments&... arguments) const
+    inline void logAlways(WTFLogChannel& channel, const char* format, const Arguments&... arguments) const WTF_ATTRIBUTE_PRINTF(3, 0)
+    {
+#if RELEASE_LOG_DISABLED
+        // "Standard" WebCore logging goes to stderr, which is captured in layout test output and can generally be a problem
+        //  on some systems, so don't allow it.
+        UNUSED_PARAM(channel);
+        UNUSED_PARAM(format);
+#else
+        if (!willLog(channel, WTFLogLevelAlways))
+            return;
+
+        log(channel, format, arguments...);
+#endif
+    }
+
+    template<typename... Arguments>
+    inline void error(WTFLogChannel& channel, const char* format, const Arguments&... arguments) const WTF_ATTRIBUTE_PRINTF(3, 0)
     {
         if (!willLog(channel, WTFLogLevelError))
             return;
@@ -51,7 +67,7 @@ public:
     }
 
     template<typename... Arguments>
-    inline void warning(WTFLogChannel& channel, const char* format, const Arguments&... arguments) const
+    inline void warning(WTFLogChannel& channel, const char* format, const Arguments&... arguments) const WTF_ATTRIBUTE_PRINTF(3, 0)
     {
         if (!willLog(channel, WTFLogLevelWarning))
             return;
@@ -60,7 +76,7 @@ public:
     }
 
     template<typename... Arguments>
-    inline void notice(WTFLogChannel& channel, const char* format, const Arguments&... arguments) const
+    inline void notice(WTFLogChannel& channel, const char* format, const Arguments&... arguments) const WTF_ATTRIBUTE_PRINTF(3, 0)
     {
         if (!willLog(channel, WTFLogLevelNotice))
             return;
@@ -69,7 +85,7 @@ public:
     }
 
     template<typename... Arguments>
-    inline void info(WTFLogChannel& channel, const char* format, const Arguments&... arguments) const
+    inline void info(WTFLogChannel& channel, const char* format, const Arguments&... arguments) const WTF_ATTRIBUTE_PRINTF(3, 0)
     {
         if (!willLog(channel, WTFLogLevelInfo))
             return;
@@ -78,7 +94,7 @@ public:
     }
 
     template<typename... Arguments>
-    inline void debug(WTFLogChannel& channel, const char* format, const Arguments&... arguments) const
+    inline void debug(WTFLogChannel& channel, const char* format, const Arguments&... arguments) const WTF_ATTRIBUTE_PRINTF(3, 0)
     {
         if (!willLog(channel, WTFLogLevelDebug))
             return;
@@ -88,7 +104,13 @@ public:
 
     inline bool willLog(WTFLogChannel& channel, WTFLogLevel level) const
     {
-        return m_enabled && channel.level >= level && channel.state != WTFLogChannelOff;
+        if (level != WTFLogLevelAlways && level > channel.level)
+            return false;
+
+        if (channel.level != WTFLogLevelAlways && channel.state == WTFLogChannelOff)
+            return false;
+
+        return m_enabled;
     }
 
     bool enabled() const { return m_enabled; }
@@ -107,22 +129,21 @@ private:
         va_list arguments;
         va_start(arguments, format);
 
-#if COMPILER(CLANG)
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wformat-nonliteral"
+#if COMPILER(GCC_OR_CLANG)
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wformat-nonliteral"
+#endif
+        String string = String::formatWithArguments(format, arguments);
+#if COMPILER(GCC_OR_CLANG)
+#pragma GCC diagnostic pop
 #endif
 
 #if RELEASE_LOG_DISABLED
-        WTFLog(&channel, format, arguments);
+        WTFLog(&channel, "%s", string.utf8().data());
 #else
-        String string = String::format(format, arguments);
         os_log(channel.osLogChannel, "%{public}s", string.utf8().data());
 #endif
 
-#if COMPILER(CLANG)
-#pragma clang diagnostic pop
-#endif
-
         va_end(arguments);
     }
 
index 36560a8..0e2cea8 100644 (file)
@@ -1,3 +1,13 @@
+2017-08-25  Eric Carlson  <eric.carlson@apple.com>
+
+        Add Logger::logAlways
+        https://bugs.webkit.org/show_bug.cgi?id=175996
+
+        Reviewed by Jer Noble.
+
+        * TestWebKitAPI/Tests/WebCore/Logging.cpp:
+        (TestWebKitAPI::TEST_F):
+
 2017-08-25  Alex Christensen  <achristensen@webkit.org>
 
         Disable saveDataToFile API test.
index 1d991cc..ab7bb8f 100644 (file)
@@ -135,14 +135,6 @@ TEST_F(LoggingTest, Initialization)
     EXPECT_EQ(TestChannel3.level, WTFLogLevelInfo);
     EXPECT_EQ(TestChannel4.level, WTFLogLevelDebug);
 
-#if TEST_OUTPUT
-    WTFSetLogChannelLevel(&TestChannel1, WTFLogLevelError);
-    EXPECT_TRUE(output().contains("Channel \"Channel1\" level set to 0", false));
-
-    WTFSetLogChannelLevel(&TestChannel2, WTFLogLevelWarning);
-    EXPECT_TRUE(output().contains("Channel \"Channel2\" level set to 1", false));
-#endif
-
     WTFInitializeLogChannelStatesFromString(testLogChannels, logChannelCount, "-all");
     EXPECT_EQ(TestChannel1.state, WTFLogChannelOff);
     EXPECT_EQ(TestChannel2.state, WTFLogChannelOff);
@@ -275,8 +267,8 @@ TEST_F(LoggingTest, Logger)
     EXPECT_TRUE(logger->enabled());
 
     WTFSetLogChannelLevel(&TestChannel1, WTFLogLevelError);
-    logger->error(TestChannel1, "What, Ridden on a horse?");
-    EXPECT_TRUE(output().contains("horse?", false));
+    logger->error(TestChannel1, "%s %s", "What,", "ridden on a horse?");
+    EXPECT_TRUE(output().contains("What, ridden on a horse?", false));
 
     logger->warning(TestChannel1, "You're using coconuts!");
     EXPECT_EQ(0u, output().length());
@@ -291,8 +283,21 @@ TEST_F(LoggingTest, Logger)
     EXPECT_FALSE(logger->enabled());
     logger->error(TestChannel1, "You've got two empty halves of coconuts");
     EXPECT_EQ(0u, output().length());
-}
 
+    logger->setEnabled(this, true);
+    EXPECT_TRUE(logger->enabled());
+    logger->error(TestChannel1, "%s %s", "You've got two empty halves of", "coconuts!");
+    EXPECT_TRUE(output().contains("You've got two empty halves of coconuts!", false));
+
+    WTFSetLogChannelLevel(&TestChannel1, WTFLogLevelError);
+    logger->logAlways(TestChannel1, "%s", "I shall taunt you a second time!");
+    EXPECT_TRUE(output().contains("I shall taunt you a second time!", false));
+
+    logger->setEnabled(this, false);
+    EXPECT_FALSE(logger->enabled());
+    logger->logAlways(TestChannel1, "You've got two empty halves of coconuts");
+    EXPECT_EQ(0u, output().length());
+}
 #endif
 
 } // namespace TestWebKitAPI