Home | History | Annotate | Download | only in base
      1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef BASE_LOGGING_WIN_H_
      6 #define BASE_LOGGING_WIN_H_
      7 
      8 #include <string>
      9 
     10 #include "base/base_export.h"
     11 #include "base/basictypes.h"
     12 #include "base/win/event_trace_provider.h"
     13 #include "base/logging.h"
     14 
     15 template <typename Type>
     16 struct StaticMemorySingletonTraits;
     17 
     18 namespace logging {
     19 
     20 // Event ID for the log messages we generate.
     21 EXTERN_C BASE_EXPORT const GUID kLogEventId;
     22 
     23 // Feature enable mask for LogEventProvider.
     24 enum LogEnableMask {
     25   // If this bit is set in our provider enable mask, we will include
     26   // a stack trace with every log message.
     27   ENABLE_STACK_TRACE_CAPTURE = 0x0001,
     28   // If this bit is set in our provider enable mask, the provider will log
     29   // a LOG message with only the textual content of the message, and no
     30   // stack trace.
     31   ENABLE_LOG_MESSAGE_ONLY = 0x0002,
     32 };
     33 
     34 // The message types our log event provider generates.
     35 // ETW likes user message types to start at 10.
     36 enum LogMessageTypes {
     37   // A textual only log message, contains a zero-terminated string.
     38   LOG_MESSAGE = 10,
     39   // A message with a stack trace, followed by the zero-terminated
     40   // message text.
     41   LOG_MESSAGE_WITH_STACKTRACE = 11,
     42   // A message with:
     43   //  a stack trace,
     44   //  the line number as a four byte integer,
     45   //  the file as a zero terminated UTF8 string,
     46   //  the zero-terminated UTF8 message text.
     47   LOG_MESSAGE_FULL = 12,
     48 };
     49 
     50 // Trace provider class to drive log control and transport
     51 // with Event Tracing for Windows.
     52 class BASE_EXPORT LogEventProvider : public base::win::EtwTraceProvider {
     53  public:
     54   static LogEventProvider* GetInstance();
     55 
     56   static bool LogMessage(logging::LogSeverity severity, const char* file,
     57       int line, size_t message_start, const std::string& str);
     58 
     59   static void Initialize(const GUID& provider_name);
     60   static void Uninitialize();
     61 
     62  protected:
     63   // Overridden to manipulate the log level on ETW control callbacks.
     64   virtual void OnEventsEnabled();
     65   virtual void OnEventsDisabled();
     66 
     67  private:
     68   LogEventProvider();
     69 
     70   // The log severity prior to OnEventsEnabled,
     71   // restored in OnEventsDisabled.
     72   logging::LogSeverity old_log_level_;
     73 
     74   friend struct StaticMemorySingletonTraits<LogEventProvider>;
     75   DISALLOW_COPY_AND_ASSIGN(LogEventProvider);
     76 };
     77 
     78 }  // namespace logging
     79 
     80 #endif  // BASE_LOGGING_WIN_H_
     81