Tuesday, January 25, 2011

Error Reporting from your Unity3D game.

This is something I use to capture errors and log-information from games that are out in the wild, and report them back home to my server.

using UnityEngine;
using System.Collections;


public class ErrorReporter : MonoBehaviour
{

string debugText = "";
string postURL = "";

void Awake ()
{
Application.RegisterLogCallback (new Application.LogCallback (CaptureLog));
}

IEnumerator SendDebugToServer ()
{
WWW www = new WWW (postURL, System.Text.ASCIIEncoding.ASCII.GetBytes (debugText));
yield return www;
}

void CaptureLog (string condition, string stacktrace, LogType type)
{
string sep = "------------------------------------------------------------------------------\r\n";
debugText = sep + type.ToString () + " " + Time.realtimeSinceStartup.ToString () + "\r\n" + condition + "\r\n" + stacktrace + debugText;
if (type == LogType.Exception) {
StartCoroutine (SendDebugToServer ());
if (!Application.isEditor) {
SomethingReallyBadHappened ();
}
}
}

void SomethingReallyBadHappened ()
{
//NB: Try and recover or fail gracefully here.
}

}


On the server side, you could use a very simple piece of PHP to receive the request and write it to a file.


$data = file_get_contents('php://input');
$file = "reports/report_" . time() . ".txt";

$fp = fopen($file, "w") or die("Couldn't open $file for writing!");
fwrite($fp, $data) or die("Couldn't write values to file!");

fclose($fp);
echo "Saved to $file successfully!";

1 comment:

Aleksey Burkun said...

Hi!
Is that the only way to report an error in Unity 3d?
Thanks!

Popular Posts