Skip to content

russmatney/log.gd

Repository files navigation

Unit Tests

russmatney on Patreon dangerruss on Discord russmatney on Mastodon russmatney on Twitch Youtube Badge

Log.gd, a Godot pretty printer

Log.gd logo

Now available on the Godot Asset Library!.

Quick Overview

Log.gd provides static functions for printing colorized output. These are intended as drop-in replacements for print(...).

  • Log.pr(...) - pretty print args in one line
  • Log.prn(...) - the same, but with newlines

This makes your printed output is much more readable, and helps reduce wall-of-text noise and eye strain.

Colorized output

The colorized output really shines when showing nested data structures (Arrays and Dictionaries), but it's also very useful for other gdscript primitives, like Vectors, NodePaths, and StringNames. Support for more types is easily added, feel free to create an issue!

Call-site prefixes

Log's print functions will prefix the output with the name of the script the log comes from, including the line number.

This call-site feature is really nice! Unfortunately it can only be used during development - it depends on get_stack(), which is not available in production builds or at @tool script time.

Opt-in via duck-typing

You can opt-in to pretty-printing in your classes by implementing to_pretty(), which Log will pickup via duck-typing.

class_name ExampleClass

func to_pretty():
    return {val=12}

func _ready():_
    Log.pr(self) # colorized `{"val": 12}`

Example script and output

Checkout src/Example.gd for this code.

Log.pr() colorizes and prints passed arguments, including recursively digging into Arrays and Dictionaries.

Log.pr() should Just Work in most (all?) cases

Log.pr() should Just-Work in most (all?) cases.

You can opt-in to pretty printing in your objects by implementing to_pretty(), which gets picked up by Log's static method via duck-typing.

output of Example.gd

This makes dictionaries and arrays much more readable at a glance, which speeds up debugging and reduces eye-strain.

Compare the above output with the usual from print(...):

output with only print statements

Public API

  • Log.pr(...), Log.info(...), Log.log(...)
    • pretty-print without newlines
  • Log.prn(...)
    • pretty-print with newlines
  • Log.warn(...)
    • pretty-print with newlines AND push a warning via push_warning
  • Log.err(...), Log.error(...)
    • pretty-print with newlines AND push a error via push_error

These functions all take up to 7 args. We could support more, but you can also just pass an Array or a Dictionary if you need more args right away.

Log.warn() and Log.err() are nice because push_warning and push_error on their own do not let you see warnings/errors in the same context as your usual print() statements.

godot printing resources