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

Side by Side Diff: chrome/common/logging_chrome.cc

Issue 16519003: Define a LoggingSettings struct to use for InitLogging() (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix compile error Created 7 years, 6 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « base/test/test_support_android.cc ('k') | chrome/installer/gcapi/gcapi_dll.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "build/build_config.h" 5 #include "build/build_config.h"
6 6
7 // Need to include this before most other files because it defines 7 // Need to include this before most other files because it defines
8 // IPC_MESSAGE_LOG_ENABLED. We need to use it to define 8 // IPC_MESSAGE_LOG_ENABLED. We need to use it to define
9 // IPC_MESSAGE_MACROS_LOG_ENABLED so render_messages.h will generate the 9 // IPC_MESSAGE_MACROS_LOG_ENABLED so render_messages.h will generate the
10 // ViewMsgLog et al. functions. 10 // ViewMsgLog et al. functions.
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
125 125
126 } // anonymous namespace 126 } // anonymous namespace
127 127
128 namespace logging { 128 namespace logging {
129 129
130 LoggingDestination DetermineLogMode(const CommandLine& command_line) { 130 LoggingDestination DetermineLogMode(const CommandLine& command_line) {
131 // only use OutputDebugString in debug mode 131 // only use OutputDebugString in debug mode
132 #ifdef NDEBUG 132 #ifdef NDEBUG
133 bool enable_logging = false; 133 bool enable_logging = false;
134 const char *kInvertLoggingSwitch = switches::kEnableLogging; 134 const char *kInvertLoggingSwitch = switches::kEnableLogging;
135 const logging::LoggingDestination kDefaultLoggingMode = 135 const logging::LoggingDestination kDefaultLoggingMode = logging::LOG_TO_FILE;
136 logging::LOG_ONLY_TO_FILE;
137 #else 136 #else
138 bool enable_logging = true; 137 bool enable_logging = true;
139 const char *kInvertLoggingSwitch = switches::kDisableLogging; 138 const char *kInvertLoggingSwitch = switches::kDisableLogging;
140 const logging::LoggingDestination kDefaultLoggingMode = 139 const logging::LoggingDestination kDefaultLoggingMode = logging::LOG_TO_ALL;
141 logging::LOG_TO_BOTH_FILE_AND_SYSTEM_DEBUG_LOG;
142 #endif 140 #endif
143 141
144 if (command_line.HasSwitch(kInvertLoggingSwitch)) 142 if (command_line.HasSwitch(kInvertLoggingSwitch))
145 enable_logging = !enable_logging; 143 enable_logging = !enable_logging;
146 144
147 logging::LoggingDestination log_mode; 145 logging::LoggingDestination log_mode;
148 if (enable_logging) { 146 if (enable_logging) {
149 // Let --enable-logging=stderr force only stderr, particularly useful for 147 // Let --enable-logging=stderr force only stderr, particularly useful for
150 // non-debug builds where otherwise you can't get logs to stderr at all. 148 // non-debug builds where otherwise you can't get logs to stderr at all.
151 if (command_line.GetSwitchValueASCII(switches::kEnableLogging) == "stderr") 149 if (command_line.GetSwitchValueASCII(switches::kEnableLogging) == "stderr")
152 log_mode = logging::LOG_ONLY_TO_SYSTEM_DEBUG_LOG; 150 log_mode = logging::LOG_TO_SYSTEM_DEBUG_LOG;
153 else 151 else
154 log_mode = kDefaultLoggingMode; 152 log_mode = kDefaultLoggingMode;
155 } else { 153 } else {
156 log_mode = logging::LOG_NONE; 154 log_mode = logging::LOG_NONE;
157 } 155 }
158 return log_mode; 156 return log_mode;
159 } 157 }
160 158
161 #if defined(OS_CHROMEOS) 159 #if defined(OS_CHROMEOS)
162 namespace { 160 namespace {
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
245 // Always force a new symlink when redirecting. 243 // Always force a new symlink when redirecting.
246 base::FilePath target_path = SetUpSymlinkIfNeeded(log_path, true); 244 base::FilePath target_path = SetUpSymlinkIfNeeded(log_path, true);
247 245
248 logging::DcheckState dcheck_state = 246 logging::DcheckState dcheck_state =
249 command_line.HasSwitch(switches::kEnableDCHECK) ? 247 command_line.HasSwitch(switches::kEnableDCHECK) ?
250 logging::ENABLE_DCHECK_FOR_NON_OFFICIAL_RELEASE_BUILDS : 248 logging::ENABLE_DCHECK_FOR_NON_OFFICIAL_RELEASE_BUILDS :
251 logging::DISABLE_DCHECK_FOR_NON_OFFICIAL_RELEASE_BUILDS; 249 logging::DISABLE_DCHECK_FOR_NON_OFFICIAL_RELEASE_BUILDS;
252 250
253 // ChromeOS always logs through the symlink, so it shouldn't be 251 // ChromeOS always logs through the symlink, so it shouldn't be
254 // deleted if it already exists. 252 // deleted if it already exists.
255 if (!InitLogging(log_path.value().c_str(), 253 logging::LoggingSettings settings;
256 DetermineLogMode(command_line), 254 settings.logging_dest = DetermineLogMode(command_line);
257 logging::LOCK_LOG_FILE, 255 settings.log_file = log_path.value().c_str();
258 logging::APPEND_TO_OLD_LOG_FILE, 256 settings.dcheck_state = dcheck_state;
259 dcheck_state)) { 257 if (!logging::InitLogging(settings)) {
260 DLOG(ERROR) << "Unable to initialize logging to " << log_path.value(); 258 DLOG(ERROR) << "Unable to initialize logging to " << log_path.value();
261 RemoveSymlinkAndLog(log_path, target_path); 259 RemoveSymlinkAndLog(log_path, target_path);
262 } else { 260 } else {
263 chrome_logging_redirected_ = true; 261 chrome_logging_redirected_ = true;
264 } 262 }
265 } 263 }
266 264
267 #endif // OS_CHROMEOS 265 #endif // OS_CHROMEOS
268 266
269 void InitChromeLogging(const CommandLine& command_line, 267 void InitChromeLogging(const CommandLine& command_line,
270 OldFileDeletionState delete_old_log_file) { 268 OldFileDeletionState delete_old_log_file) {
271 DCHECK(!chrome_logging_initialized_) << 269 DCHECK(!chrome_logging_initialized_) <<
272 "Attempted to initialize logging when it was already initialized."; 270 "Attempted to initialize logging when it was already initialized.";
273 271
274 LoggingDestination logging_dest = DetermineLogMode(command_line); 272 LoggingDestination logging_dest = DetermineLogMode(command_line);
275 LogLockingState log_locking_state = LOCK_LOG_FILE; 273 LogLockingState log_locking_state = LOCK_LOG_FILE;
276 base::FilePath log_path; 274 base::FilePath log_path;
277 #if defined(OS_CHROMEOS) 275 #if defined(OS_CHROMEOS)
278 base::FilePath target_path; 276 base::FilePath target_path;
279 #endif 277 #endif
280 278
281 // Don't resolve the log path unless we need to. Otherwise we leave an open 279 // Don't resolve the log path unless we need to. Otherwise we leave an open
282 // ALPC handle after sandbox lockdown on Windows. 280 // ALPC handle after sandbox lockdown on Windows.
283 if (logging_dest == LOG_ONLY_TO_FILE || 281 if ((logging_dest & LOG_TO_FILE) != 0) {
284 logging_dest == LOG_TO_BOTH_FILE_AND_SYSTEM_DEBUG_LOG) {
285 log_path = GetLogFileName(); 282 log_path = GetLogFileName();
286 283
287 #if defined(OS_CHROMEOS) 284 #if defined(OS_CHROMEOS)
288 // For BWSI (Incognito) logins, we want to put the logs in the user 285 // For BWSI (Incognito) logins, we want to put the logs in the user
289 // profile directory that is created for the temporary session instead 286 // profile directory that is created for the temporary session instead
290 // of in the system log directory, for privacy reasons. 287 // of in the system log directory, for privacy reasons.
291 if (command_line.HasSwitch(chromeos::switches::kGuestSession)) 288 if (command_line.HasSwitch(chromeos::switches::kGuestSession))
292 log_path = GetSessionLogFile(command_line); 289 log_path = GetSessionLogFile(command_line);
293 290
294 // On ChromeOS we log to the symlink. We force creation of a new 291 // On ChromeOS we log to the symlink. We force creation of a new
295 // symlink if we've been asked to delete the old log, since that 292 // symlink if we've been asked to delete the old log, since that
296 // indicates the start of a new session. 293 // indicates the start of a new session.
297 target_path = SetUpSymlinkIfNeeded( 294 target_path = SetUpSymlinkIfNeeded(
298 log_path, delete_old_log_file == logging::DELETE_OLD_LOG_FILE); 295 log_path, delete_old_log_file == logging::DELETE_OLD_LOG_FILE);
299 296
300 // Because ChromeOS manages the move to a new session by redirecting 297 // Because ChromeOS manages the move to a new session by redirecting
301 // the link, it shouldn't remove the old file in the logging code, 298 // the link, it shouldn't remove the old file in the logging code,
302 // since that will remove the newly created link instead. 299 // since that will remove the newly created link instead.
303 delete_old_log_file = logging::APPEND_TO_OLD_LOG_FILE; 300 delete_old_log_file = logging::APPEND_TO_OLD_LOG_FILE;
304 #endif 301 #endif
305 } else { 302 } else {
306 log_locking_state = DONT_LOCK_LOG_FILE; 303 log_locking_state = DONT_LOCK_LOG_FILE;
307 } 304 }
308 305
309 logging::DcheckState dcheck_state = 306 logging::DcheckState dcheck_state =
310 command_line.HasSwitch(switches::kEnableDCHECK) ? 307 command_line.HasSwitch(switches::kEnableDCHECK) ?
311 logging::ENABLE_DCHECK_FOR_NON_OFFICIAL_RELEASE_BUILDS : 308 logging::ENABLE_DCHECK_FOR_NON_OFFICIAL_RELEASE_BUILDS :
312 logging::DISABLE_DCHECK_FOR_NON_OFFICIAL_RELEASE_BUILDS; 309 logging::DISABLE_DCHECK_FOR_NON_OFFICIAL_RELEASE_BUILDS;
313 310
314 bool success = InitLogging(log_path.value().c_str(), 311 logging::LoggingSettings settings;
315 logging_dest, 312 settings.logging_dest = logging_dest;
316 log_locking_state, 313 settings.log_file = log_path.value().c_str();
317 delete_old_log_file, 314 settings.lock_log = log_locking_state;
318 dcheck_state); 315 settings.delete_old = delete_old_log_file;
316 settings.dcheck_state = dcheck_state;
317 bool success = logging::InitLogging(settings);
319 318
320 #if defined(OS_CHROMEOS) 319 #if defined(OS_CHROMEOS)
321 if (!success) { 320 if (!success) {
322 DPLOG(ERROR) << "Unable to initialize logging to " << log_path.value() 321 DPLOG(ERROR) << "Unable to initialize logging to " << log_path.value()
323 << " (which should be a link to " << target_path.value() << ")"; 322 << " (which should be a link to " << target_path.value() << ")";
324 RemoveSymlinkAndLog(log_path, target_path); 323 RemoveSymlinkAndLog(log_path, target_path);
325 chrome_logging_failed_ = true; 324 chrome_logging_failed_ = true;
326 return; 325 return;
327 } 326 }
328 #else 327 #else
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
456 time_deets.year, 455 time_deets.year,
457 time_deets.month, 456 time_deets.month,
458 time_deets.day_of_month, 457 time_deets.day_of_month,
459 time_deets.hour, 458 time_deets.hour,
460 time_deets.minute, 459 time_deets.minute,
461 time_deets.second); 460 time_deets.second);
462 return base_path.InsertBeforeExtensionASCII(suffix); 461 return base_path.InsertBeforeExtensionASCII(suffix);
463 } 462 }
464 463
465 } // namespace logging 464 } // namespace logging
OLDNEW
« no previous file with comments | « base/test/test_support_android.cc ('k') | chrome/installer/gcapi/gcapi_dll.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698