Roblox UtilitiesDevlHub Roblox Documentation

Class

LogService

NotCreatableService
Inherits
Instance › Object
Memory category
Instances

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 }.

Luau
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.

Luau
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#

ClearOutputClears Roblox Studio's Output window.
ErrorLogs a message at the MessageType.MessageError level and throws a structured error with optional context.CustomLuaState
GetLogHistoryReturns a table of tables, each with the message string, message type, and timestamp of a message that the client displays in the Output window.
InfoLogs a message at the MessageType.MessageInfo level with optional structured context.CustomLuaState
LogLogs a message at the specified level with optional structured context.CustomLuaState
OutputLogs a message at the MessageType.MessageOutput level with optional structured context.CustomLuaState
WarnLogs 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.

Luau
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"
NameTypeDefaultDescription
messagestringThe message string. Supports {key} template placeholders when a context table is provided.
contextDictionarynilAn 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 containing message (string), messageType (MessageType), timestamp (number, in seconds), and optionally context (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.

Luau
local LogService = game:GetService("LogService")

LogService:Info("User {name} has {count} items", {name = "Alice", count = 42})
-- Output: "User Alice has 42 items"
NameTypeDefaultDescription
messagestringThe message string. Supports {key} template placeholders when a context table is provided.
contextDictionarynilAn 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()).

Luau
local LogService = game:GetService("LogService")

LogService:Log(Enum.MessageType.MessageInfo, "Event {action}", {action = "click"})
NameTypeDefaultDescription
messageTypeMessageTypeThe MessageType specifying the log level.
messagestringThe message string. Supports {key} template placeholders when a context table is provided.
contextDictionarynilAn 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.

Luau
local LogService = game:GetService("LogService")

LogService:Output("Player {name} joined", {name = "Alice"})
-- Output: "Player Alice joined"
NameTypeDefaultDescription
messagestringThe message string. Supports {key} template placeholders when a context table is provided.
contextDictionarynilAn 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.

Luau
local LogService = game:GetService("LogService")

LogService:Warn("Memory usage at {pct}%", {pct = 95})
-- Output: "Memory usage at 95%"
NameTypeDefaultDescription
messagestringThe message string. Supports {key} template placeholders when a context table is provided.
contextDictionarynilAn optional dictionary of key-value pairs. When provided, {key} placeholders in the message are replaced with the corresponding values.
Returns
  • ()

Events 1#

MessageOutFires 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.

Luau
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)
NameTypeDefaultDescription
messagestringThe fully rendered message string after any template placeholder substitution.
messageTypeMessageTypeA MessageType value indicating the severity level of the message.
contextDictionaryA 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
Inherited from Object 6
Properties (2)

ClassName, className

Events (1)

Changed