libchromeos: Add error location informaion to chromeos::Error
The error information logged always appears to come from error.cc
file in libchormeos since that's where LOG(ERROR) statement is.
Added the ability to pass in the actual source of the error by
using tracked_objects::Location parameter and "FROM_HERE" macros
used in base::TaskRunner-based classes.
While all the system log messages looked like this:
[ERROR:error.cc(15)] Domain=peerd, Code=service.info, Message=Invalid service key.
Now they appear as this:
ERROR:service.cc(155)] IsValidServiceInfo(...): Domain=peerd, Code=service.info, Message=Invalid service key.
We report the actual source file and line number where the error is
coming from, as well as the function name.
BUG=None
TEST=FEATURES=test emerge-link libchromeos buffet lorgnette peerd privetd
Change-Id: I647997c24d61a03f3b481e4c9ca336c90e99e9a3
Reviewed-on: https://chromium-review.googlesource.com/229071
Reviewed-by: Alex Vakulenko <avakulenko@chromium.org>
Commit-Queue: Alex Vakulenko <avakulenko@chromium.org>
Tested-by: Alex Vakulenko <avakulenko@chromium.org>
diff --git a/buffet/states/state_manager.cc b/buffet/states/state_manager.cc
index 7511928..80fdc8c 100644
--- a/buffet/states/state_manager.cc
+++ b/buffet/states/state_manager.cc
@@ -88,20 +88,20 @@
bool split = chromeos::string_utils::SplitAtFirst(
full_property_name, '.', &package_name, &property_name);
if (full_property_name.empty() || (split && property_name.empty())) {
- chromeos::Error::AddTo(error, errors::state::kDomain,
+ chromeos::Error::AddTo(error, FROM_HERE, errors::state::kDomain,
errors::state::kPropertyNameMissing,
"Property name is missing");
return false;
}
if (!split || package_name.empty()) {
- chromeos::Error::AddTo(error, errors::state::kDomain,
+ chromeos::Error::AddTo(error, FROM_HERE, errors::state::kDomain,
errors::state::kPackageNameMissing,
"Package name is missing in the property name");
return false;
}
StatePackage* package = FindPackage(package_name);
if (package == nullptr) {
- chromeos::Error::AddToPrintf(error, errors::state::kDomain,
+ chromeos::Error::AddToPrintf(error, FROM_HERE, errors::state::kDomain,
errors::state::kPropertyNotDefined,
"Unknown state property package '%s'",
package_name.c_str());
@@ -126,13 +126,15 @@
while (!iter.IsAtEnd()) {
std::string package_name = iter.key();
if (package_name.empty()) {
- chromeos::Error::AddTo(error, kErrorDomainBuffet, kInvalidPackageError,
+ chromeos::Error::AddTo(error, FROM_HERE, kErrorDomainBuffet,
+ kInvalidPackageError,
"State package name is empty");
return false;
}
const base::DictionaryValue* package_dict = nullptr;
if (!iter.value().GetAsDictionary(&package_dict)) {
- chromeos::Error::AddToPrintf(error, chromeos::errors::json::kDomain,
+ chromeos::Error::AddToPrintf(error, FROM_HERE,
+ chromeos::errors::json::kDomain,
chromeos::errors::json::kObjectExpected,
"State package '%s' must be an object",
package_name.c_str());
@@ -158,7 +160,7 @@
return false;
std::string category = json_file_path.BaseName().RemoveExtension().value();
if (category == kDefaultCategory) {
- chromeos::Error::AddToPrintf(error, kErrorDomainBuffet,
+ chromeos::Error::AddToPrintf(error, FROM_HERE, kErrorDomainBuffet,
kInvalidCategoryError,
"Invalid state category specified in '%s'",
json_file_path.value().c_str());
@@ -166,7 +168,7 @@
}
if (!LoadStateDefinition(*json, category, error)) {
- chromeos::Error::AddToPrintf(error, kErrorDomainBuffet,
+ chromeos::Error::AddToPrintf(error, FROM_HERE, kErrorDomainBuffet,
kFileReadError,
"Failed to load file '%s'",
json_file_path.value().c_str());
@@ -182,7 +184,7 @@
if (!json)
return false;
if (!LoadStateDefinition(*json, kDefaultCategory, error)) {
- chromeos::Error::AddToPrintf(error, kErrorDomainBuffet,
+ chromeos::Error::AddToPrintf(error, FROM_HERE, kErrorDomainBuffet,
kFileReadError,
"Failed to load file '%s'",
json_file_path.value().c_str());
@@ -197,13 +199,15 @@
while (!iter.IsAtEnd()) {
std::string package_name = iter.key();
if (package_name.empty()) {
- chromeos::Error::AddTo(error, kErrorDomainBuffet, kInvalidPackageError,
+ chromeos::Error::AddTo(error, FROM_HERE, kErrorDomainBuffet,
+ kInvalidPackageError,
"State package name is empty");
return false;
}
const base::DictionaryValue* package_dict = nullptr;
if (!iter.value().GetAsDictionary(&package_dict)) {
- chromeos::Error::AddToPrintf(error, chromeos::errors::json::kDomain,
+ chromeos::Error::AddToPrintf(error, FROM_HERE,
+ chromeos::errors::json::kDomain,
chromeos::errors::json::kObjectExpected,
"State package '%s' must be an object",
package_name.c_str());
@@ -212,7 +216,7 @@
StatePackage* package = FindPackage(package_name);
if (package == nullptr) {
chromeos::Error::AddToPrintf(
- error, chromeos::errors::json::kDomain,
+ error, FROM_HERE, chromeos::errors::json::kDomain,
chromeos::errors::json::kObjectExpected,
"Providing values for undefined state package '%s'",
package_name.c_str());
@@ -232,7 +236,7 @@
if (!json)
return false;
if (!LoadStateDefaults(*json, error)) {
- chromeos::Error::AddToPrintf(error, kErrorDomainBuffet,
+ chromeos::Error::AddToPrintf(error, FROM_HERE, kErrorDomainBuffet,
kFileReadError,
"Failed to load file '%s'",
json_file_path.value().c_str());