12 min read

Source: Roblox Creator Hub · CC BY 4.0 · View source · Code samples: MIT Imported 2026-10-03. Formatting adapted for this site.

LogService

Inherits from: Instance → Object

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:

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.

Inherits from: Instance

Memory category: Instances

Tags: NotCreatable, Service

Methods

NameType / ReturnsDescription
LogService:ClearOutput()Clears Roblox Studio's Output window.
LogService:Error()Logs a message at the MessageType.MessageError level and throws a structured error with optional context.
LogService:GetLogHistoryArrayReturns a table of tables, each with the message string, message type, and timestamp of a message that the client displays in the Output window.
LogService:Info()Logs a message at the MessageType.MessageInfo level with optional structured context.
LogService:Log()Logs a message at the specified level with optional structured context.
LogService:Output()Logs a message at the MessageType.MessageOutput level with optional structured context.
LogService:Warn()Logs a message at the MessageType.MessageWarning level with optional structured context.

Inherited from Instance

NameType / ReturnsDescription
Instance:AddTag()Applies a tag to the instance.
Instance:childrenInstancesReturns an array of the object's children.
Instance:ClearAllChildren()This method destroys all of an instance's children.
Instance:CloneInstanceCreate a copy of an instance and all its descendants, ignoring instances that are not Archivable.
Instance:cloneInstance
Instance:Destroy()Sets the Instance.Parent property to nil, locks the Instance.Parent property, disconnects all connections, and calls Destroy() on all children.
Instance:destroy()
Instance:FindFirstAncestorInstance?Returns the first ancestor of the Instance whose Instance.Name is equal to the given name.
Instance:FindFirstAncestorOfClassInstance?Returns the first ancestor of the Instance whose Object.ClassName is equal to the given className.
Instance:FindFirstAncestorWhichIsAInstance?Returns the first ancestor of the Instance for whom Object:IsA() returns true for the given className.
Instance:FindFirstChildInstance?Returns the first child of the Instance found with the given name.
Instance:findFirstChildInstance
Instance:FindFirstChildOfClassInstance?Returns the first child of the Instance whose ClassName is equal to the given class name.
Instance:FindFirstChildWhichIsAInstance?Returns the first child of the Instance for whom Object:IsA() returns true for the given className.
Instance:FindFirstDescendantInstance?Returns the first descendant found with the given Instance.Name.
Instance:GetActorActor?Returns the Actor associated with the Instance, if any.
Instance:GetAttributeVariantReturns the value which has been assigned to the given attribute name.
Instance:GetAttributeChangedSignalRBXScriptSignalReturns an event that fires when the given attribute changes.
Instance:GetAttributesDictionaryReturns a dictionary of the instance's attributes.
Instance:GetChildrenInstancesReturns an array containing all of the instance's children.
Instance:getChildrenInstances
Instance:GetDebugIdstringReturns a coded string of the debug ID used internally by Roblox.
Instance:GetDescendantsInstancesReturns an array containing all of the descendants of the instance.
Instance:GetFullNamestringReturns a string describing the instance's ancestry.
Instance:GetStyledVariantReturns the styled or explicitly modified value of the specified property, or else the default property value if it hasn't been styled/modified.
Instance:GetStyledPropertyChangedSignalRBXScriptSignalReturns an event that fires when the given style property changes on the instance.
Instance:GetTagsArrayGets an array of all tags applied to the instance.
Instance:HasTagbooleanCheck whether the instance has a given tag.
Instance:IsAncestorOfbooleanReturns true if an Instance is an ancestor of the given descendant.
Instance:IsDescendantOfbooleanReturns true if an Instance is a descendant of the given ancestor.
Instance:isDescendantOfboolean
Instance:IsPropertyModifiedbooleanReturns true if the value stored in the specified property is not equal to the code-instantiated default.
Instance:QueryDescendantsInstancesReturns an array containing all descendants of the instance that match the selector string.
Instance:Remove()Sets the object's Parent to nil, and does the same for all its descendants.
Instance:remove()
Instance:RemoveTag()Removes a tag from the instance.
Instance:ResetPropertyToDefault()Resets a property to its default value.
Instance:SetAttribute()Sets the attribute with the given name to the given value.
Instance:WaitForChildInstanceReturns the child of the Instance with the given name. If the child does not exist, it will yield the current thread until it does.

Inherited from Object

NameType / ReturnsDescription
Object:GetPropertyChangedSignalRBXScriptSignalGet an event that fires when a given property of the object changes.
Object:IsAbooleanReturns true if an object's class matches or inherits from a given class.
Object:isAboolean

LogService: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

TypeDescription
()
FieldValue
securityNone
thread safetyUnsafe
capabilities["Logging"]

LogService:Error

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"

Parameters

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

TypeDescription
()
FieldValue
tags["CustomLuaState"]
securityNone
thread safetyUnsafe
capabilities["Logging"]

LogService: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. Each inner table contains the following keys:

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

TypeDescription
ArrayAn array of tables, each containing message (string), messageType (MessageType), timestamp (number, in seconds), and optionally context (dictionary) for entries logged with structured context.
FieldValue
securityNone
thread safetyUnsafe
capabilities["Logging"]

LogService:Info

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"

Parameters

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

TypeDescription
()
FieldValue
tags["CustomLuaState"]
securityNone
thread safetyUnsafe
capabilities["Logging"]

LogService:Log

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"})

Parameters

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

TypeDescription
()
FieldValue
tags["CustomLuaState"]
securityNone
thread safetyUnsafe
capabilities["Logging"]

LogService:Output

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"

Parameters

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

TypeDescription
()
FieldValue
tags["CustomLuaState"]
securityNone
thread safetyUnsafe
capabilities["Logging"]

LogService:Warn

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%"

Parameters

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

TypeDescription
()
FieldValue
tags["CustomLuaState"]
securityNone
thread safetyUnsafe
capabilities["Logging"]

Events

NameType / ReturnsDescription
LogService.MessageOutFires when the client outputs text.

Inherited from Instance

NameType / ReturnsDescription
Instance.AncestryChangedFires when the Instance.Parent property of this object or one of its ancestors is changed.
Instance.AttributeChangedFires whenever an attribute is changed on the Instance.
Instance.ChildAddedFires after an object is parented to this Instance.
Instance.childAdded
Instance.ChildRemovedFires after a child is removed from this Instance.
Instance.DescendantAddedFires after a descendant is added to the Instance.
Instance.DescendantRemovingFires immediately before a descendant of the Instance is removed.
Instance.DestroyingFires immediately before (or is deferred until after) the instance is destroyed via Instance:Destroy().
Instance.StyledPropertiesChangedFires whenever any style property is changed on the instance, including when a property is set to nil.

Inherited from Object

NameType / ReturnsDescription
Object.ChangedFires immediately after a property of the object changes, with some limitations.

LogService.MessageOut

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)

Parameters

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.
FieldValue
securityNone
capabilities["Logging"]

Code samples: View on Creator Hub (LogService-MessageOut1).

Properties

Inherited from Instance

NameType / ReturnsDescription
Instance.ArchivablebooleanDetermines if an Instance and its descendants can be cloned using Instance:Clone(), and can be saved/published.
Instance.archivableboolean
Instance.CapabilitiesSecurityCapabilitiesThe set of capabilities allowed to be used for scripts inside this container.
Instance.IsInSandboxbooleanIndicates whether the instance is inside a sandboxed container.
Instance.NamestringA non-unique identifier of the Instance.
Instance.ParentInstanceDetermines the hierarchical parent of the Instance.
Instance.PredictionModePredictionModeReflects the client-side prediction mode applied to the instance under server-authoritative physics.
Instance.RobloxLockedbooleanA deprecated property that used to protect CoreGui objects.
Instance.SandboxedbooleanWhen enabled, the instance can only access abilities in its Capabilities list.
Instance.UniqueIdUniqueIdA unique identifier for the instance.

Inherited from Object

NameType / ReturnsDescription
Object.ClassNamestringA read-only string representing the class this Object belongs to.
Object.classNamestring