0
Files
src/base/logging_win.h
Collin Baker dc4db77918 Revert "Reland "Use string_view in logging and trace_event location""
This reverts commit 57368cb688.

Reason for revert: crbug.com/406443772

Original change's description:
> Reland "Use string_view in logging and trace_event location"
>
> This is a reland of commit 5439f8eb1e
>
> Original change's description:
> > Use string_view in logging and trace_event location
> >
> > Changes the LogMessage class to use a string_view for file names. This
> > required a matching change in trace_event: a const char* string was
> > passed from logging code, but there is no safe way to get a const
> > char* from a string_view since the latter may not be null-terminated.
> >
> > Many clients of base/logging.h are updated to use string_view as well.
> >
> > Code which attempts to pass a string_view to a LogMessage by its data
> > pointer already exists:
> > https://source.chromium.org/chromium/chromium/src/+/main:ash/quick_pair/common/logging.cc;l=49;drc=c6c99d03b1d2f4fab91d6be8665f81b540690c73
> > https://source.chromium.org/chromium/chromium/src/+/main:components/cross_device/logging/logging.cc;l=30;drc=00704dbac4f63b2476aac319572ffc42c9b71fc2
> >
> > Desire for Rust logging support prompted this change. In principle a
> > Rust log facility can be a thin wrapper around the base logging
> > implementation, but Rust has almost no support for null-terminated
> > strings. Instead, Rust provides a string_view equivalent built in to
> > the language. This change enables Rust code to pass file names
> > obtained by language-specific macros to the C++ implementation.
> >
> > Bug: None
> > Change-Id: I21b4f1c945b70d54f66d80adf3dcda1fe5a39f71
> > Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5765705
> > Reviewed-by: Peter Boström <pbos@chromium.org>
> > Auto-Submit: Collin Baker <collinbaker@chromium.org>
> > Commit-Queue: Collin Baker <collinbaker@chromium.org>
> > Reviewed-by: Stephen Nusko <nuskos@chromium.org>
> > Reviewed-by: Daniel Cheng <dcheng@chromium.org>
> > Owners-Override: Daniel Cheng <dcheng@chromium.org>
> > Cr-Commit-Position: refs/heads/main@{#1436283}
>
> Bug: None
> Change-Id: I725bac881a160caa6d97e7480bc4047b460fae34
> Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6387020
> Commit-Queue: Collin Baker <collinbaker@chromium.org>
> Reviewed-by: Peter Boström <pbos@chromium.org>
> Owners-Override: Daniel Cheng <dcheng@chromium.org>
> Reviewed-by: Daniel Cheng <dcheng@chromium.org>
> Reviewed-by: Stephen Nusko <nuskos@chromium.org>
> Cr-Commit-Position: refs/heads/main@{#1437625}

Bug: None
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Change-Id: Ia4a01ddf6af5068d38b13971e09eb8146bd4d2d2
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6395097
Commit-Queue: Collin Baker <collinbaker@chromium.org>
Owners-Override: Daniel Cheng <dcheng@chromium.org>
Reviewed-by: Daniel Cheng <dcheng@chromium.org>
Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
Cr-Commit-Position: refs/heads/main@{#1438193}
2025-03-26 09:41:15 -07:00

88 lines
2.6 KiB
C++

// Copyright 2012 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef BASE_LOGGING_WIN_H_
#define BASE_LOGGING_WIN_H_
#include <stddef.h>
#include <string>
#include "base/base_export.h"
#include "base/logging.h"
#include "base/win/event_trace_provider.h"
namespace base {
template <typename Type>
struct StaticMemorySingletonTraits;
} // namespace base
namespace logging {
// Event ID for the log messages we generate.
EXTERN_C BASE_EXPORT const GUID kLogEventId;
// Feature enable mask for LogEventProvider.
enum LogEnableMask {
// If this bit is set in our provider enable mask, we will include
// a stack trace with every log message.
ENABLE_STACK_TRACE_CAPTURE = 0x0001,
// If this bit is set in our provider enable mask, the provider will log
// a LOG message with only the textual content of the message, and no
// stack trace.
ENABLE_LOG_MESSAGE_ONLY = 0x0002,
};
// The message types our log event provider generates.
// ETW likes user message types to start at 10.
enum LogMessageTypes {
// A textual only log message, contains a zero-terminated string.
LOG_MESSAGE = 10,
// A message with a stack trace, followed by the zero-terminated
// message text.
LOG_MESSAGE_WITH_STACKTRACE = 11,
// A message with:
// a stack trace,
// the line number as a four byte integer,
// the file as a zero terminated UTF8 string,
// the zero-terminated UTF8 message text.
LOG_MESSAGE_FULL = 12,
};
// Trace provider class to drive log control and transport
// with Event Tracing for Windows.
class BASE_EXPORT LogEventProvider : public base::win::EtwTraceProvider {
public:
LogEventProvider(const LogEventProvider&) = delete;
LogEventProvider& operator=(const LogEventProvider&) = delete;
static LogEventProvider* GetInstance();
static bool LogMessage(logging::LogSeverity severity,
const char* file,
int line,
size_t message_start,
const std::string& str);
static void Initialize(const GUID& provider_name);
static void Uninitialize();
protected:
// Overridden to manipulate the log level on ETW control callbacks.
void OnEventsEnabled() override;
void OnEventsDisabled() override;
private:
LogEventProvider();
// The log severity prior to OnEventsEnabled,
// restored in OnEventsDisabled.
logging::LogSeverity old_log_level_;
friend struct base::StaticMemorySingletonTraits<LogEventProvider>;
};
} // namespace logging
#endif // BASE_LOGGING_WIN_H_