Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(327)

Unified Diff: chrome/common/logging_chrome.cc

Issue 2909483003: Revert of Move RedirectChromeLogging to src/chromeos. (Closed)
Patch Set: Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/common/logging_chrome.h ('k') | chrome/test/base/in_process_browser_test.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/common/logging_chrome.cc
diff --git a/chrome/common/logging_chrome.cc b/chrome/common/logging_chrome.cc
index 8f676714335e5ad2481bdccc82fea7ac4eca6048..4e2df8c8efdf47d8b3ab16953696495eaf4d7c70 100644
--- a/chrome/common/logging_chrome.cc
+++ b/chrome/common/logging_chrome.cc
@@ -47,6 +47,7 @@
#include "base/strings/string_util.h"
#include "base/strings/stringprintf.h"
#include "base/strings/utf_string_conversions.h"
+#include "base/threading/thread_restrictions.h"
#include "chrome/common/chrome_constants.h"
#include "chrome/common/chrome_paths.h"
#include "chrome/common/chrome_switches.h"
@@ -65,12 +66,11 @@
#include "chrome/install_static/install_details.h"
#endif
-namespace logging {
namespace {
// When true, this means that error dialogs should not be shown.
bool dialogs_are_suppressed_ = false;
-ScopedLogAssertHandler* assert_handler_ = nullptr;
+logging::ScopedLogAssertHandler* assert_handler_ = nullptr;
// This should be true for exactly the period between the end of
// InitChromeLogging() and the beginning of CleanupChromeLogging().
@@ -108,8 +108,8 @@
if (dialogs_are_suppressed_)
return;
- assert_handler_ =
- new ScopedLogAssertHandler(base::Bind(SilentRuntimeAssertHandler));
+ assert_handler_ = new logging::ScopedLogAssertHandler(
+ base::Bind(SilentRuntimeAssertHandler));
#if defined(OS_WIN)
UINT new_flags = SEM_FAILCRITICALERRORS |
@@ -126,37 +126,39 @@
} // anonymous namespace
-LoggingDestination DetermineLoggingDestination(
- const base::CommandLine& command_line) {
-// only use OutputDebugString in debug mode
+namespace logging {
+
+LoggingDestination DetermineLogMode(const base::CommandLine& command_line) {
+ // only use OutputDebugString in debug mode
#ifdef NDEBUG
bool enable_logging = false;
const char *kInvertLoggingSwitch = switches::kEnableLogging;
- const LoggingDestination kDefaultLoggingMode = LOG_TO_FILE;
+ const logging::LoggingDestination kDefaultLoggingMode = logging::LOG_TO_FILE;
#else
bool enable_logging = true;
const char *kInvertLoggingSwitch = switches::kDisableLogging;
- const LoggingDestination kDefaultLoggingMode = LOG_TO_ALL;
+ const logging::LoggingDestination kDefaultLoggingMode = logging::LOG_TO_ALL;
#endif
if (command_line.HasSwitch(kInvertLoggingSwitch))
enable_logging = !enable_logging;
- LoggingDestination log_mode;
+ logging::LoggingDestination log_mode;
if (enable_logging) {
// Let --enable-logging=stderr force only stderr, particularly useful for
// non-debug builds where otherwise you can't get logs to stderr at all.
if (command_line.GetSwitchValueASCII(switches::kEnableLogging) == "stderr")
- log_mode = LOG_TO_SYSTEM_DEBUG_LOG;
+ log_mode = logging::LOG_TO_SYSTEM_DEBUG_LOG;
else
log_mode = kDefaultLoggingMode;
} else {
- log_mode = LOG_NONE;
+ log_mode = logging::LOG_NONE;
}
return log_mode;
}
#if defined(OS_CHROMEOS)
+namespace {
base::FilePath SetUpSymlinkIfNeeded(const base::FilePath& symlink_path,
bool new_log) {
DCHECK(!symlink_path.empty());
@@ -193,6 +195,8 @@
if (::unlink(target_path.value().c_str()) == -1)
DPLOG(WARNING) << "Unable to unlink log file " << target_path.value();
}
+
+} // anonymous namespace
base::FilePath GetSessionLogDir(const base::CommandLine& command_line) {
base::FilePath log_dir;
@@ -224,6 +228,39 @@
return GetSessionLogDir(command_line).Append(GetLogFileName().BaseName());
}
+void RedirectChromeLogging(const base::CommandLine& command_line) {
+ if (chrome_logging_redirected_) {
+ // TODO(nkostylev): Support multiple active users. http://crbug.com/230345
+ LOG(WARNING) << "NOT redirecting logging for multi-profiles case.";
+ return;
+ }
+
+ DCHECK(!chrome_logging_redirected_) <<
+ "Attempted to redirect logging when it was already initialized.";
+
+ // Redirect logs to the session log directory, if set. Otherwise
+ // defaults to the profile dir.
+ base::FilePath log_path = GetSessionLogFile(command_line);
+
+ // Creating symlink causes us to do blocking IO on UI thread.
+ // Temporarily allow it until we fix http://crbug.com/61143
+ base::ThreadRestrictions::ScopedAllowIO allow_io;
+ // Always force a new symlink when redirecting.
+ base::FilePath target_path = SetUpSymlinkIfNeeded(log_path, true);
+
+ // ChromeOS always logs through the symlink, so it shouldn't be
+ // deleted if it already exists.
+ logging::LoggingSettings settings;
+ settings.logging_dest = DetermineLogMode(command_line);
+ settings.log_file = log_path.value().c_str();
+ if (!logging::InitLogging(settings)) {
+ DLOG(ERROR) << "Unable to initialize logging to " << log_path.value();
+ RemoveSymlinkAndLog(log_path, target_path);
+ } else {
+ chrome_logging_redirected_ = true;
+ }
+}
+
#endif // OS_CHROMEOS
void InitChromeLogging(const base::CommandLine& command_line,
@@ -231,7 +268,7 @@
DCHECK(!chrome_logging_initialized_) <<
"Attempted to initialize logging when it was already initialized.";
- LoggingDestination logging_dest = DetermineLoggingDestination(command_line);
+ LoggingDestination logging_dest = DetermineLogMode(command_line);
LogLockingState log_locking_state = LOCK_LOG_FILE;
base::FilePath log_path;
#if defined(OS_CHROMEOS)
@@ -254,23 +291,23 @@
// symlink if we've been asked to delete the old log, since that
// indicates the start of a new session.
target_path = SetUpSymlinkIfNeeded(
- log_path, delete_old_log_file == DELETE_OLD_LOG_FILE);
+ log_path, delete_old_log_file == logging::DELETE_OLD_LOG_FILE);
// Because ChromeOS manages the move to a new session by redirecting
// the link, it shouldn't remove the old file in the logging code,
// since that will remove the newly created link instead.
- delete_old_log_file = APPEND_TO_OLD_LOG_FILE;
+ delete_old_log_file = logging::APPEND_TO_OLD_LOG_FILE;
#endif
} else {
log_locking_state = DONT_LOCK_LOG_FILE;
}
- LoggingSettings settings;
+ logging::LoggingSettings settings;
settings.logging_dest = logging_dest;
settings.log_file = log_path.value().c_str();
settings.lock_log = log_locking_state;
settings.delete_old = delete_old_log_file;
- bool success = InitLogging(settings);
+ bool success = logging::InitLogging(settings);
#if defined(OS_CHROMEOS)
if (!success) {
@@ -291,13 +328,13 @@
// Default to showing error dialogs.
if (!base::CommandLine::ForCurrentProcess()->HasSwitch(
switches::kNoErrorDialogs))
- SetShowErrorDialogs(true);
+ logging::SetShowErrorDialogs(true);
// we want process and thread IDs because we have a lot of things running
- SetLogItems(true, // enable_process_id
- true, // enable_thread_id
- true, // enable_timestamp
- false); // enable_tickcount
+ logging::SetLogItems(true, // enable_process_id
+ true, // enable_thread_id
+ true, // enable_timestamp
+ false); // enable_tickcount
// We call running in unattended mode "headless", and allow
// headless mode to be configured either by the Environment
@@ -311,17 +348,17 @@
// Use a minimum log level if the command line asks for one. Ignore this
// switch if there's vlog level switch present too (as both of these switches
// refer to the same underlying log level, and the vlog level switch has
- // already been processed inside InitLogging). If there is neither
+ // already been processed inside logging::InitLogging). If there is neither
// log level nor vlog level specified, then just leave the default level
// (INFO).
if (command_line.HasSwitch(switches::kLoggingLevel) &&
- GetMinLogLevel() >= 0) {
+ logging::GetMinLogLevel() >= 0) {
std::string log_level =
command_line.GetSwitchValueASCII(switches::kLoggingLevel);
int level = 0;
if (base::StringToInt(log_level, &level) && level >= 0 &&
level < LOG_NUM_SEVERITIES) {
- SetMinLogLevel(level);
+ logging::SetMinLogLevel(level);
} else {
DLOG(WARNING) << "Bad log level: " << log_level;
}
@@ -329,10 +366,10 @@
#if defined(OS_WIN)
// Enable trace control and transport through event tracing for Windows.
- LogEventProvider::Initialize(kChromeTraceProviderName);
+ logging::LogEventProvider::Initialize(kChromeTraceProviderName);
// Enable logging to the Windows Event Log.
- SetEventSourceName(base::UTF16ToASCII(
+ logging::SetEventSourceName(base::UTF16ToASCII(
install_static::InstallDetails::Get().install_full_name()));
#endif
« no previous file with comments | « chrome/common/logging_chrome.h ('k') | chrome/test/base/in_process_browser_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698