Class
LogService
NotCreatableService
A service that allows you to read outputted text.
LogService allows you to log structured log entries and read outputted text.
Template Syntax#
Methods that accept a context table support {key} template placeholders in
the message string. To include a literal brace character in the output, use
double braces: {{ produces a literal { and }} produces a literal }.
local LogService = game:GetService("LogService")
LogService:Info("Value = {{result}}: {val}", {val = 42})
-- Output: "Value = {result}: 42"Context Values#
The context table accepts any value type. Non-serializable values are
automatically converted to strings in the stored context:
- Instances are stored as their full path (e.g.,
"Workspace.MyModel.Part") - Functions are stored as
"" - Other non-primitive types are stored using their
tostring()representation
Mixed tables (tables with both string and numeric keys) and pure arrays are
accepted. Numeric keys are converted to string keys (e.g., index 1 becomes
key "1"). If a numeric key collides with an existing string key, the
explicit string key takes precedence.
local LogService = game:GetService("LogService")
-- Instance values are converted to their full path
LogService:Info("Touched {part}", {part = workspace.MyPart})
-- Context stores: {part = "Workspace.MyPart"}
-- Mixed tables are accepted; numeric keys become string keys
LogService:Info("Player {name}", {name = "Alice", 1, 2, 3})
-- Context stores: {name = "Alice", ["1"] = 1, ["2"] = 2, ["3"] = 3}Warning#
This service might have unexpected or unreliable behavior and content might be truncated. Don't rely on contents of events and messages emitted by this service for any important game logic.
Methods 7#
| ClearOutput | Clears Roblox Studio's Output window. |
| Error | Logs a message at the MessageType.MessageError level and throws a
structured error with optional context.CustomLuaState |
| GetLogHistory | Returns a table of tables, each with the message string, message type, and timestamp of a message that the client displays in the Output window. |
| Info | Logs a message at the MessageType.MessageInfo level with optional
structured context.CustomLuaState |
| Log | Logs a message at the specified level with optional structured context.CustomLuaState |
| Output | Logs a message at the MessageType.MessageOutput level with optional
structured context.CustomLuaState |
| Warn | Logs a message at the MessageType.MessageWarning level with
optional structured context.CustomLuaState |
ClearOutput(): ()#
Clears Roblox Studio's Output window. The log history is also cleared,
such that LogService:GetLogHistory() will not return any entries
from before the ClearOutput() call.
Returns
()
Error(message: string, context: Dictionary = nil): ()#
CustomLuaState
Logs a message at the MessageType.MessageError level and throws a
structured error with optional context. As this method always throws, use
LuaGlobals.pcall() to catch the error. The thrown error is a
table with message, template, context, and stack fields, and a
__tostring metamethod that returns the rendered message.
When a context table is provided, template placeholders like {key} in
the message are replaced with the corresponding context values.
local LogService = game:GetService("LogService")
local ok, err = pcall(function()
LogService:Error("Failed: {reason}", {reason = "timeout"})
end)
-- ok is false
-- err.message == "Failed: timeout"
-- err.context == {reason = "timeout"}
-- tostring(err) == "Failed: timeout"| Name | Type | Default | Description |
|---|---|---|---|
message | string | The message string. Supports {key} template placeholders when a
context table is provided. | |
context | Dictionary | nil | An optional dictionary of key-value pairs. When provided, {key}
placeholders in the message are replaced with the corresponding
values. |
Returns
()
GetLogHistory(): Array#
Returns a table of tables, each with the message string, message type, and timestamp of a message that the client displays in the Output window. Each inner table contains the following keys:
message(string) -- the rendered message text.messageType(MessageType) -- the log level (MessageOutput, MessageInfo, MessageWarning, or MessageError).timestamp(number) -- the time the message was emitted, in seconds.context(dictionary) -- the structured key-value pairs if the message was emitted via a structured logging method; absent otherwise.
The history is capped at a maximum of 512 entries by default. Calling
LogService:ClearOutput() empties the history, so subsequent calls
return only entries logged after the clear.
Returns
Array— An array of tables, each containingmessage(string),messageType(MessageType),timestamp(number, in seconds), and optionallycontext(dictionary) for entries logged with structured context.
Info(message: string, context: Dictionary = nil): ()#
CustomLuaState
Logs a message at the MessageType.MessageInfo level. When a
context table is provided, template placeholders like {key} in the
message are replaced with the corresponding context values. The context is
preserved as structured data for display in the Developer Console and
Studio's Output window.
local LogService = game:GetService("LogService")
LogService:Info("User {name} has {count} items", {name = "Alice", count = 42})
-- Output: "User Alice has 42 items"| Name | Type | Default | Description |
|---|---|---|---|
message | string | The message string. Supports {key} template placeholders when a
context table is provided. | |
context | Dictionary | nil | An optional dictionary of key-value pairs. When provided, {key}
placeholders in the message are replaced with the corresponding
values. |
Returns
()
Log(messageType: MessageType, message: string, context: Dictionary = nil): ()#
CustomLuaState
Logs a message at the specified MessageType level. This is a
general-purpose method that combines the functionality of
Output(), Info(),
Warn(), and Error()
into a single call with an explicit message type parameter.
When messageType is MessageType.MessageError, this method throws
a structured error object (same behavior as
Error()).
local LogService = game:GetService("LogService")
LogService:Log(Enum.MessageType.MessageInfo, "Event {action}", {action = "click"})| Name | Type | Default | Description |
|---|---|---|---|
messageType | MessageType | The MessageType specifying the log level. | |
message | string | The message string. Supports {key} template placeholders when a
context table is provided. | |
context | Dictionary | nil | An optional dictionary of key-value pairs. When provided, {key}
placeholders in the message are replaced with the corresponding
values. |
Returns
()
Output(message: string, context: Dictionary = nil): ()#
CustomLuaState
Logs a message at the MessageType.MessageOutput level. When a
context table is provided, template placeholders like {key} in the
message are replaced with the corresponding context values. The context is
preserved as structured data for display in the Developer Console and
Studio's Output window.
local LogService = game:GetService("LogService")
LogService:Output("Player {name} joined", {name = "Alice"})
-- Output: "Player Alice joined"| Name | Type | Default | Description |
|---|---|---|---|
message | string | The message string. Supports {key} template placeholders when a
context table is provided. | |
context | Dictionary | nil | An optional dictionary of key-value pairs. When provided, {key}
placeholders in the message are replaced with the corresponding
values. |
Returns
()
Warn(message: string, context: Dictionary = nil): ()#
CustomLuaState
Logs a message at the MessageType.MessageWarning level with
optional structured context. When a context table is provided, template
placeholders like {key} in the message are replaced with the
corresponding context values. The context is preserved as structured data
for display in the Developer Console and Studio's Output window.
local LogService = game:GetService("LogService")
LogService:Warn("Memory usage at {pct}%", {pct = 95})
-- Output: "Memory usage at 95%"| Name | Type | Default | Description |
|---|---|---|---|
message | string | The message string. Supports {key} template placeholders when a
context table is provided. | |
context | Dictionary | nil | An optional dictionary of key-value pairs. When provided, {key}
placeholders in the message are replaced with the corresponding
values. |
Returns
()
Events 1#
| MessageOut | Fires when the client outputs text. |
MessageOut(message: string, messageType: MessageType, context: Dictionary)#
Fires whenever a message is logged through the engine's output system,
including calls to LuaGlobals.print(),
RobloxGlobals.warn(), and the structured logging methods on
LogService. The message parameter contains the fully rendered
text (template placeholders already replaced). The context parameter
carries the structured key-value pairs when the message was emitted via a
method that accepts a context table; otherwise it is nil.
local LogService = game:GetService("LogService")
LogService.MessageOut:Connect(function(message, messageType, context)
if messageType == Enum.MessageType.MessageError then
print("Error:", message)
end
if context then
-- Access structured data from structured logging calls
for key, value in context do
print(key, "=", value)
end
end
end)| Name | Type | Default | Description |
|---|---|---|---|
message | string | The fully rendered message string after any template placeholder substitution. | |
messageType | MessageType | A MessageType value indicating the severity level of the
message. | |
context | Dictionary | A dictionary of key-value pairs provided when the message was logged
via a structured logging method (LogService:Output(),
LogService:Info(), LogService:Warn(), or
LogService:Error()), or nil if no context was supplied. |
Inherited members#
Inherited from Instance 58
Properties (10)
Archivable, archivable, Capabilities, IsInSandbox, Name, Parent, PredictionMode, RobloxLocked, Sandboxed, UniqueId
Methods (39)
AddTag, children, ClearAllChildren, Clone, clone, Destroy, destroy, FindFirstAncestor, FindFirstAncestorOfClass, FindFirstAncestorWhichIsA, FindFirstChild, findFirstChild, FindFirstChildOfClass, FindFirstChildWhichIsA, FindFirstDescendant, GetActor, GetAttribute, GetAttributeChangedSignal, GetAttributes, GetChildren, getChildren, GetDebugId, GetDescendants, GetFullName, GetStyled, GetStyledPropertyChangedSignal, GetTags, HasTag, IsAncestorOf, IsDescendantOf, isDescendantOf, IsPropertyModified, QueryDescendants, Remove, remove, RemoveTag, ResetPropertyToDefault, SetAttribute, WaitForChild