[script:fivetrace] live logs for FiveM servers
[#money] 9,412 lines today · 3 channels · 2 servers
^1SEARCHABLE^7: your Discord logs cannot answer a question
Every framework ships Discord logging, and it works until the moment you need it. A player disputes a transaction from last Tuesday. You scroll. The channel holds four days if you are lucky, the line is a sentence somebody formatted in Lua, and there is no way to ask what did this player do.
what you send
FiveTrace.log('money', { target = 'Ana', amount = 500 })what your team reads
what you can still ask, weeks later
actor:license:110000112345678 level:warn amount:>10000
Put your key in server.cfg
One key per server. Every resource on it can log; none of them needs a key of its own, and nothing on another server can write there.
set fivetrace_log_key "fl_your_key_here"
Load the SDK into the resource you want to log from
The same two lines the error tracking uses. Into the resource, not beside it — FiveM isolates every resource’s Lua state.
shared_script '@fivetrace-sdk/init.lua' dependency 'fivetrace-sdk'
Log whatever you want
Send fields, not a sentence. The channel appears the first time you use it — there is nothing to create first, and the actor is what makes the search above possible.
FiveTrace.log('money', { amount = 500, reason = 'vehicle sale' }, {
actor = { id = GetPlayerIdentifier(src, 0), name = GetPlayerName(src) },
})Discord logging makes you build the sentence in Lua. Once Marijo paid Ana $500 is a string, the amount is gone — and every transaction over $10,000 stops being a question anyone can ask.
So you send fields and the channel owns a template. The feed reads as sentences, and the fields are still underneath, still searchable, for as long as your plan keeps them.
Open any line and you see all of them — what your server sent, what every line carries, and which of them the sentence is using. Send whatever your script cares about; the sentence is one view of a line, not the line.
Invite moderators and admins, then assign them to a server. They read that server with you; nobody needs your server files or your dashboard password, and a moderator on one community cannot read another. An invitation is for the logs unless you say otherwise, so a moderator does not arrive holding the error tracking of scripts you sell.
A channel is visible to everyone on the team or to admins only. A moderator has no business reading payment logs, so mark that channel and they cannot.
An identifier is a page: what they did, which channels they turn up in, how far back it goes, and a Steam link where the identifier is one. That is the question at the top of this page, answered rather than searched for.
Channels are how you ask a question later and a poor way to watch something now — a payment, the admin command behind it and the vehicle that changed hands are three channels and one incident. Every server has a feed of all of them in one order, showing exactly the channels your role allows.
Log lines carry whoever your server says did the thing, because a log without that is useless. You decide what to send and you own it: the player’s own page shows everything held about them and deletes all of it, which is what a deletion request looks like in practice.
Every line records the resource that wrote it. When something floods a channel you can see which of your installed scripts is doing it.
Established by the key the line arrived on, not by what the server said its name was. Run two and neither can claim to be the other — which is the difference between a record and an anecdote.
Most lines can wait until you look. A payment that size cannot. Each channel can ping its own Discord webhook when a level or a number crosses what you set — once per window, saying how many matched, because a hundred messages a minute is how a webhook gets deleted.
[script:error] the other product · for script sellers
If you write the scripts rather than run the server, the problem is the other one: unhandled Lua errors on servers you cannot see. Error tracking catches them with the file and line that broke, across every server running your resource.
error tracking →[#admin] found it · 3 weeks ago · one search