| Index: runtime/vm/service_event.cc | 
| diff --git a/runtime/vm/service_event.cc b/runtime/vm/service_event.cc | 
| index a53ace2d9343db46582249460aef121a31a817ad..edbb502f2cea91e959b93fff8fc13bb1dde493ac 100644 | 
| --- a/runtime/vm/service_event.cc | 
| +++ b/runtime/vm/service_event.cc | 
| @@ -89,6 +89,8 @@ const char* ServiceEvent::KindAsCString() const { | 
| return "Inspect"; | 
| case kEmbedder: | 
| return embedder_kind(); | 
| +    case kLogging: | 
| +      return "_Logging"; | 
| case kDebuggerSettingsUpdate: | 
| return "_DebuggerSettingsUpdate"; | 
| case kIllegal: | 
| @@ -126,6 +128,9 @@ const char* ServiceEvent::stream_id() const { | 
| case kEmbedder: | 
| return embedder_stream_id_; | 
|  | 
| +    case kLogging: | 
| +      return Service::logging_stream.id(); | 
| + | 
| default: | 
| UNREACHABLE(); | 
| return NULL; | 
| @@ -135,9 +140,7 @@ const char* ServiceEvent::stream_id() const { | 
|  | 
| void ServiceEvent::PrintJSON(JSONStream* js) const { | 
| JSONObject jsobj(js); | 
| -  jsobj.AddProperty("type", "Event"); | 
| -  jsobj.AddProperty("kind", KindAsCString()); | 
| -  jsobj.AddProperty("isolate", isolate()); | 
| +  PrintJSONHeader(&jsobj); | 
| if (kind() == kPauseBreakpoint) { | 
| JSONArray jsarr(&jsobj, "pauseBreakpoints"); | 
| // TODO(rmacnak): If we are paused at more than one breakpoint, | 
| @@ -177,6 +180,25 @@ void ServiceEvent::PrintJSON(JSONStream* js) const { | 
| if (bytes() != NULL) { | 
| jsobj.AddPropertyBase64("bytes", bytes(), bytes_length()); | 
| } | 
| +  if (kind() == kLogging) { | 
| +    JSONObject logRecord(&jsobj, "logRecord"); | 
| +    logRecord.AddProperty64("sequenceNumber", log_record_.sequence_number); | 
| +    logRecord.AddPropertyTimeMillis("time", log_record_.timestamp); | 
| +    logRecord.AddProperty64("level", log_record_.level); | 
| +    logRecord.AddProperty("loggerName", *(log_record_.name)); | 
| +    logRecord.AddProperty("message", *(log_record_.message)); | 
| +    logRecord.AddProperty("zone", *(log_record_.zone)); | 
| +    logRecord.AddProperty("error", *(log_record_.error)); | 
| +    logRecord.AddProperty("stackTrace", *(log_record_.stack_trace)); | 
| +  } | 
| +} | 
| + | 
| + | 
| +void ServiceEvent::PrintJSONHeader(JSONObject* jsobj) const { | 
| +  ASSERT(jsobj != NULL); | 
| +  jsobj->AddProperty("type", "Event"); | 
| +  jsobj->AddProperty("kind", KindAsCString()); | 
| +  jsobj->AddProperty("isolate", isolate()); | 
| } | 
|  | 
| }  // namespace dart | 
|  |