Chromium Code Reviews| Index: main.cc |
| diff --git a/main.cc b/main.cc |
| index 571f33782905970c700a625a07ebe34cf1c68c40..78f558af2197657cb4581039dafcb26c71ccdacf 100644 |
| --- a/main.cc |
| +++ b/main.cc |
| @@ -3,11 +3,11 @@ |
| // found in the LICENSE file. |
| #include <string> |
| -#include <tr1/memory> |
| #include <vector> |
| #include <base/at_exit.h> |
| #include <base/command_line.h> |
| +#include <base/file_util.h> |
| #include <base/logging.h> |
| #include <base/string_util.h> |
| #include <gflags/gflags.h> |
| @@ -34,7 +34,6 @@ DEFINE_bool(foreground, false, |
| "Don't daemon()ize; run in foreground."); |
| using std::string; |
| -using std::tr1::shared_ptr; |
| using std::vector; |
| namespace chromeos_update_engine { |
| @@ -95,11 +94,59 @@ void SetupDbusService(UpdateEngineService* service) { |
| G_OBJECT(service)); |
| } |
| -} // namespace {} |
| +void SetUpLogSymlink(const string& symlink_path, const string& log_path) { |
|
adlr
2010/11/11 17:23:28
all the other setup functions don't capitalize the
petkov
2010/11/12 18:14:44
copy/paste... fixed.
|
| + // TODO(petkov): To ensure a smooth transition between non-timestamped and |
| + // timestamped logs, move an existing log to start the first timestamped |
| + // one. This code can go away once all clients are switched to this version or |
| + // we stop caring about the old-style logs. |
| + if (utils::FileExists(symlink_path.c_str()) && |
| + !utils::IsSymlink(symlink_path.c_str())) { |
| + file_util::ReplaceFile(FilePath(symlink_path), FilePath(log_path)); |
| + } |
| + file_util::Delete(FilePath(symlink_path), true); |
| + if (symlink(log_path.c_str(), symlink_path.c_str()) == -1) { |
| + PLOG(ERROR) << "Unable to create symlink " << symlink_path |
| + << " pointing at " << log_path; |
| + } |
| +} |
| -} // namespace chromeos_update_engine |
| +string GetTimeAsString(time_t utime) { |
| + struct tm tm; |
| + CHECK(localtime_r(&utime, &tm) == &tm); |
| + char str[16]; |
| + CHECK(strftime(str, sizeof(str), "%Y%m%d-%H%M%S", &tm) == 15); |
| + return str; |
| +} |
| -#include "update_engine/subprocess.h" |
| +string SetupLogFile(const string kLogsRoot) { |
|
adlr
2010/11/11 17:23:28
const string&?
(yeah, here it doesn't matter, but
petkov
2010/11/12 18:14:44
Duh.. Done.
|
| + const string kLogSymlink = kLogsRoot + "/update_engine.log"; |
| + const string kLogsDir = kLogsRoot + "/update_engine"; |
| + const string kLogPath = |
| + StringPrintf("%s/update_engine.%s", |
| + kLogsDir.c_str(), |
| + GetTimeAsString(::time(NULL)).c_str()); |
| + file_util::CreateDirectory(FilePath(kLogsDir)); |
| + SetUpLogSymlink(kLogSymlink, kLogPath); |
| + return kLogSymlink; |
| +} |
| + |
| +void SetupLogging() { |
| + // Log to stderr initially. |
| + logging::InitLogging(NULL, |
| + logging::LOG_ONLY_TO_SYSTEM_DEBUG_LOG, |
| + logging::DONT_LOCK_LOG_FILE, |
| + logging::APPEND_TO_OLD_LOG_FILE); |
| + if (FLAGS_logtostderr) { |
| + return; |
| + } |
| + const string log_file = SetupLogFile("/var/log"); |
| + logging::InitLogging(log_file.c_str(), |
| + logging::LOG_ONLY_TO_FILE, |
| + logging::DONT_LOCK_LOG_FILE, |
| + logging::APPEND_TO_OLD_LOG_FILE); |
| +} |
| +} // namespace {} |
| +} // namespace chromeos_update_engine |
| int main(int argc, char** argv) { |
| ::g_type_init(); |
| @@ -110,12 +157,7 @@ int main(int argc, char** argv) { |
| chromeos_update_engine::Subprocess::Init(); |
| google::ParseCommandLineFlags(&argc, &argv, true); |
| CommandLine::Init(argc, argv); |
| - logging::InitLogging("/var/log/update_engine.log", |
| - (FLAGS_logtostderr ? |
| - logging::LOG_ONLY_TO_SYSTEM_DEBUG_LOG : |
| - logging::LOG_ONLY_TO_FILE), |
| - logging::DONT_LOCK_LOG_FILE, |
| - logging::APPEND_TO_OLD_LOG_FILE); |
| + chromeos_update_engine::SetupLogging(); |
| if (!FLAGS_foreground) |
| PLOG_IF(FATAL, daemon(0, 0) == 1) << "daemon() failed"; |