[notifier] update changed flags logging to use multiple lines (#3336)

This commit changes `Notifier::LogChangedFlags()` to allow it to
use multiple lines when there are multiple flags.
This commit is contained in:
Abtin Keshavarzian
2018-12-01 08:22:30 -08:00
committed by Jonathan Hui
parent cd1e417750
commit cc1c1a61ac
2 changed files with 23 additions and 6 deletions
+20 -5
View File
@@ -206,8 +206,9 @@ exit:
void Notifier::LogChangedFlags(otChangedFlags aFlags) const
{
otChangedFlags flags = aFlags;
bool isFirst = true;
otChangedFlags flags = aFlags;
bool addSpace = false;
bool didLog = false;
String<kFlagsStringBufferSize> string;
for (uint8_t bit = 0; bit < sizeof(otChangedFlags) * CHAR_BIT; bit++)
@@ -216,20 +217,34 @@ void Notifier::LogChangedFlags(otChangedFlags aFlags) const
if (flags & (1 << bit))
{
SuccessOrExit(string.Append("%s%s", isFirst ? "" : " ", FlagToString(1 << bit)));
isFirst = false;
if (string.GetLength() >= kFlagsStringLineLimit)
{
otLogInfoCore("Notifier: StateChanged (0x%08x) %s%s ...", aFlags, didLog ? "... " : "[",
string.AsCString());
string.Clear();
didLog = true;
addSpace = false;
}
string.Append("%s%s", addSpace ? " " : "", FlagToString(1 << bit));
addSpace = true;
flags ^= (1 << bit);
}
}
exit:
otLogInfoCore("Notifier: StateChanged (0x%04x) [%s] ", aFlags, string.AsCString());
otLogInfoCore("Notifier: StateChanged (0x%08x) %s%s] ", aFlags, didLog ? "... " : "[", string.AsCString());
}
const char *Notifier::FlagToString(otChangedFlags aFlag) const
{
const char *retval = "(unknown)";
// To ensure no clipping of flag names in the logs, the returned
// strings from this method should have shorter length than
// `kMaxFlagNameLength` value.
switch (aFlag)
{
case OT_CHANGED_IP6_ADDRESS_ADDED:
+3 -1
View File
@@ -187,7 +187,9 @@ private:
enum
{
kMaxExternalHandlers = OPENTHREAD_CONFIG_MAX_STATECHANGE_HANDLERS,
kFlagsStringBufferSize = 128,
kFlagsStringLineLimit = 70, // Character limit to divide the log into multiple lines in `LogChangedFlags()`.
kMaxFlagNameLength = 25, // Max length for string representation of a flag by `FlagToString()`.
kFlagsStringBufferSize = kFlagsStringLineLimit + kMaxFlagNameLength,
};
struct ExternalCallback