69 lines
2.0 KiB
C++
69 lines
2.0 KiB
C++
//===-- LogMessageOsLog.cpp -------------------------------------*- C++ -*-===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "LogMessageOsLog.h"
|
|
|
|
#include "ActivityStore.h"
|
|
#include "ActivityStreamSPI.h"
|
|
|
|
namespace {
|
|
static os_log_copy_formatted_message_t s_log_copy_formatted_message;
|
|
}
|
|
|
|
void LogMessageOsLog::SetFormatterFunction(
|
|
os_log_copy_formatted_message_t format_func) {
|
|
s_log_copy_formatted_message = format_func;
|
|
}
|
|
|
|
LogMessageOsLog::LogMessageOsLog(const ActivityStore &activity_store,
|
|
ActivityStreamEntry &entry)
|
|
: LogMessage(), m_activity_store(activity_store), m_entry(entry),
|
|
m_message() {}
|
|
|
|
bool LogMessageOsLog::HasActivity() const { return m_entry.activity_id != 0; }
|
|
|
|
const char *LogMessageOsLog::GetActivity() const {
|
|
return m_activity_store.GetActivityForID(m_entry.activity_id);
|
|
}
|
|
|
|
std::string LogMessageOsLog::GetActivityChain() const {
|
|
return m_activity_store.GetActivityChainForID(m_entry.activity_id);
|
|
}
|
|
|
|
bool LogMessageOsLog::HasCategory() const {
|
|
return m_entry.log_message.category && (m_entry.log_message.category[0] != 0);
|
|
}
|
|
|
|
const char *LogMessageOsLog::GetCategory() const {
|
|
return m_entry.log_message.category;
|
|
}
|
|
|
|
bool LogMessageOsLog::HasSubsystem() const {
|
|
return m_entry.log_message.subsystem &&
|
|
(m_entry.log_message.subsystem[0] != 0);
|
|
}
|
|
|
|
const char *LogMessageOsLog::GetSubsystem() const {
|
|
return m_entry.log_message.subsystem;
|
|
}
|
|
|
|
const char *LogMessageOsLog::GetMessage() const {
|
|
if (m_message.empty()) {
|
|
std::unique_ptr<char[]> formatted_message(
|
|
s_log_copy_formatted_message(&m_entry.log_message));
|
|
if (formatted_message)
|
|
m_message = formatted_message.get();
|
|
// else
|
|
// TODO log
|
|
}
|
|
|
|
// This is safe to return as we're not modifying it once we've formatted it.
|
|
return m_message.c_str();
|
|
}
|