Exporting of F9 Logs

As a Roblox developer, it is currently too hard to access and analyze F9 logs for debugging purposes from players, other developers, and team members.

If this issue is addressed, it would improve my development experience because it would greatly improve the development process / QA process, it would result in faster debugging. It would also better aid communication between users, saving a back and forth trying to locate the correct error developers require for the issue.

Here are some specific use cases and problems I face as a QA leader that would be solved by this feature:

  1. Historical Comparison: Comparing F9 logs from different sessions or versions of a game can provide valuable insights into the progression of issues or performance improvements. Exporting logs would allow us to maintain a historical record of F9 logs and compare them over time, aiding in the identification of trends and patterns that might not be immediately apparent.

  2. Community Reports: We currently have a community QA team made up of people who love to play our experiences, they’re able to submit bug reports directly to us and we encourage them to send their F9 logs to help us identify an issue, however it is normally only a screenshot & not complete logs as otherwise we would be seeing 10’s of screenshots. With the ability to export logs, users would be easily able to send their F9 report directly to us for investigation.

    • Furthermore to this, this would benefit any experience that a user reports a bug to, allowing developers to have quick and easy access to logs to be able to potentially identify the problem.
  3. Enhanced Developer Debugging: Currently, as developers, we need to be inside the game experience to view the logs we’re trying to debug. It would greatly improve our workflow if we could enter the experience, reproduce the issue, and then export the logs for further analysis. This way, we could refer back to both the client and server-side logs at any time while fixing the problem, without the need to remain in the game.

Proposed Solution: Introduce functionality that enables users to export F9 logs onto their local PC. Logs could be saved to the same location that microprofiler saves to.

17 Likes

Came into this problem as well recently, ended up using LogService to send client logs to us via discord. A simple implementation of this would look like this

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

local function sendClientLogs()
	local logs = LogService:GetLogHistory()
	for _,v in pairs(logs) do
		print(v.message, v.timestamp)
	end
	
	-- serialise and compress table  into json or whatever
	HttpService:PostAsync(...) -- connected to a discord webhook 
end

7 Likes

Content might also be truncated. Don’t rely on contents of events and messages emitted by this service for any important game logic.

LogService is not a reliable workaround especially if the error happens to occur in your logging script! :sweat_smile:

Please do not do this or encourage others to do this, Discord can and have disabled people for using webhooks for logging purposes, Discord is not a free logging platform for your experience.

As for the OP, this is something many other QA teams come across too, most QA teams have gotten to the point that we are just told to screenshot the DevConsole (possibly multiple times) because of the lack of an ability to simply copy messages from it. I do a clear-up of my Roblox screenshots once a month, I usually end up with 1GB+ because of DevConsole screenshots, images are much less efficient space-wise than simple text!

3 Likes

As long as you implement some form of global queue system and make sure you don’t spam webhooks like the people that caused discord to block Roblox’s ip in the first place, you’re fine. If you really don’t want to use discord just use some other service that actually is designed for logging

Then just create a seperate local script for your logging…? Iirc there’s also a .MessageOut method (or something similar) of LogService

1 Like

LogService is not a reliable workaround especially if the error happens to occur in your logging script!

What would you recommend to use? I would suggest using the ScriptContext.Error event, and then logging based on errors.

game:GetService("ScriptContext").Error:Connect(function(message, trace, script)
	print(script:GetFullName(), "errored!")
	print("Reason:", message)
	print("Trace:", trace)
end)

Please do not do this or encourage others to do this, Discord can and have disabled people for using webhooks for logging purposes, Discord is not a free logging platform for your experience.

Well, I can agree to this. There’s been multiple suggestions of what people can and cannot do. You can easily host a proxy, and queue stuff, but do not straight abuse it like for chatlogs, etc that could get your webhook banned and that would be bad.

I currently use Trello, as my error logging database and I queue requests regularly to try to comply with their ratelimits (by a proxy that I made). I’m soon switching over to self hosted Sentry once everything is setup. Trello is the best for my solution, because it is not being used 24/7 and I can log what I need and developers can assign them that bug and that worked for my team. What works for my team, might not work for yours due to a certain reason or may not be your style of code.

1 Like

You may be happy to find out that Roblox already writes client logs to the user’s computer.

On Windows, you can currently find them at: %LOCALAPPDATA%\Roblox\logs
On MacOS, you can currently find them at: ~/Library/Logs/Roblox

9 Likes

I feel like the user is referring to server logs as well as client logs.

Sure, client logs are dumped to the app data folder which is perfect for finding client issues, the issue is dumping logs from the server side more than anything.

I feel like it cant be too hard to just have it so the server log gets dumped to the person’s client logs folder on request, if they have permission to request such log

5 Likes

I feel as though this process could be streamlined rather than having to go searching for a needle in a haystack of files. Perhaps the ability to copy a condensed version of client/server logs (depending on the Player’s permission level) could be a viable solution to this problem.

2 Likes

Hey!

Thanks for the reply here, however I’m more leaning towards server sided logs than client sided logs, however having easier functionality for both would be good.

Thanks!

3 Likes

If you are looking for a logging server, you could set up your own server with the LAMP (Linux, Apache, MySQL, PHP) stack. Then you won’t need to worry about rate limits because you control the logging server because it’s your server. Since it’s your server, you can dictate the format too.

Hmm…That gives me an idea…

2 Likes

You’re going to need a logging solution with some web infrastructure for this. I use “logtail”, though it’s a bit finnicky :

1 Like

Agreed that this is a possible solution, however as you have said it’s a little finicky, I’m looking for a built in way that is accessible for everyone / experiences of every size without much hassle at all.

1 Like

Roblox is looking into this internally, there have been office-hours held with devs about it.
No promises or anything, but it’s on their radar at least.

1 Like