The logs you need most are often the ones you turned off before shipping.
A player reports a problem you cannot reproduce. You know something went wrong, but by the time the report reaches you, there is very little left to explain how it happened. More detailed logs would help, except they also cost CPU time and disk space on the player’s device.
That is the three-way tradeoff we wanted to improve: keep the detail, keep the runtime cost low, and keep the files small.
We built BqLog at Tencent to make detailed logging practical in released games. We use it to keep full diagnostic logging enabled on mobile devices in games with a combined daily active audience of over 30 million. The logging engine is open source, and its Unreal
plugin is available on Fab.
- High throughput: fastest logging library in the world, see published C++ benchmarks.
- Smaller files: a separate 4-million-entry test produced a 45 MB compressed file, compared with 302 MB for text output—about one-sixth the size. The encrypted compressed file was also 45 MB.
- Low-overhead public-key encryption: BqLog supports RSA-2048 + AES-256 hybrid encryption. In the single-thread, 2-million-entry test, enabling encryption changed total time from 79 ms to 83 ms, about 5% more. The overhead varies with load.
You can choose console, text-file or compressed-file output, with separate level and category filters for each. Compressed files can be read with the matching decoder included in our releases.
For Unreal projects, the integration covers the engine’s data types, the editor and Blueprints:
- Unreal types: the C++ adapter accepts
FString,FNameandFText. Blueprint arguments also support vectors, rotators, transforms, colors and object references alongside strings, booleans and numbers. - Editor integration: configure logs through Data Assets and see console-appender messages in Unreal’s Output Log, with categories and severity levels mapped into the editor.
- Blueprints: choose a log object and level, add typed argument pins, and select hierarchical categories when using a generated category log class.
Here is a Blueprint example passing a String, a Bool and a Transform into one log message:
The numbered arrows show adding pins (1), connecting arguments (2), choosing the log object (3), and choosing a category (4).
To set it up, install and enable the plugin, then create a BqLog Data Asset. Give it a name and configure the outputs, or have it reference an existing log by name. Select that asset on the Blueprint node. Console output is forwarded to Unreal’s Output Log, while file outputs
use the settings on the log.
Beyond Unreal, there is a Unity integration and interfaces for C#, Java/Kotlin, JavaScript/TypeScript, Python and Go. Different language wrappers can access the same log object within a process.
The project is Apache-2.0 licensed. The setup, screenshots and configuration options are documented here:
- Unreal plugin on Fab
- Unreal installation and Blueprint guide
- Logging configuration
- Source code and releases / decoder tools
How much logging do you leave enabled in your shipping builds? We’d be interested to hear what limits you first: runtime overhead, file size, or getting useful logs back from players.

