You can send logs to DebuggerOnline using TCP(HTTP POST) or UDP. Below are examples for different platforms, with both methods.
Whenever possible, encapsulate your logging logic into a single reusable function or utility. This approach makes it much easier to switch between output methods (e.g., adding DebuggerOnline support via TCP or UDP) without modifying your entire codebase.
Visit our Github: Github repository
import requests
data = {
"channel": "YOUR_CHANNEL_CODE",
"message": "Hello from Python via POST"
}
requests.post("{BASE_URL}/write", json=data)
import socket
import json
data = {
"channel": "YOUR_CHANNEL_CODE",
"message": "Hello from Python via UDP"
}
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.sendto(json.dumps(data).encode(), ("{BASE_URL}/write", 9999))
JSONObject json = new JSONObject();
json.put("channel", "YOUR_CHANNEL_CODE");
json.put("message", "Hello from Java");
URL url = new URL("{BASE_URL}/write");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/json");
conn.setDoOutput(true);
conn.getOutputStream().write(json.toString().getBytes());
DatagramSocket socket = new DatagramSocket();
String message = "{\"channel\":\"YOUR_CHANNEL_CODE\",\"message\":\"Hello from Java UDP\"}";
InetAddress address = InetAddress.getByName("{BASE_URL}/write");
DatagramPacket packet = new DatagramPacket(message.getBytes(), message.length(), address, 9999);
socket.send(packet);
JSONObject json = new JSONObject();
json.put("channel", "YOUR_CHANNEL_CODE");
json.put("message", "Hello from Android Java");
URL url = new URL("{BASE_URL}/write");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/json");
conn.setDoOutput(true);
conn.getOutputStream().write(json.toString().getBytes());
val json = JSONObject()
json.put("channel", "YOUR_CHANNEL_CODE")
json.put("message", "Hello from Android Kotlin")
val requestBody = json.toString().toRequestBody("application/json".toMediaType())
val request = Request.Builder()
.url("{BASE_URL}/write")
.post(requestBody)
.build()
OkHttpClient().newCall(request).enqueue(callback)
val socket = DatagramSocket()
val message = "{\"channel\":\"YOUR_CHANNEL_CODE\",\"message\":\"Hello via UDP\"}"
val packet = DatagramPacket(message.toByteArray(), message.length, InetAddress.getByName("{BASE_URL}/write"), 9999)
socket.send(packet)
val socket = DatagramSocket()
val message = "{\"channel\":\"YOUR_CHANNEL_CODE\",\"message\":\"Hello via UDP from Kotlin\"}"
val address = InetAddress.getByName("{BASE_URL}/write")
val packet = DatagramPacket(message.toByteArray(), message.length, address, 9999)
socket.send(packet)
let url = URL(string: "{BASE_URL}/write")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
let body = ["channel": "YOUR_CHANNEL_CODE", "message": "Hello from Swift"]
request.httpBody = try? JSONSerialization.data(withJSONObject: body)
URLSession.shared.dataTask(with: request).resume()
NSDictionary *body = @{
@"channel": @"YOUR_CHANNEL_CODE",
@"message": @"Hello from Objective-C"
};
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:body options:0 error:nil];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"{BASE_URL}/write"]];
[request setHTTPMethod:@"POST"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:jsonData];
[[[NSURLSession sharedSession] dataTaskWithRequest:request] resume];
let socket = GCDAsyncUdpSocket(delegate: self, delegateQueue: DispatchQueue.main)
let message = "{\"channel\":\"YOUR_CHANNEL_CODE\",\"message\":\"Hello via UDP\"}"
socket.send(message.data(using: .utf8)!, toHost: "{BASE_URL}/write", port: 9999, withTimeout: -1, tag: 0)
NSString *message = @"{\"channel\":\"YOUR_CHANNEL_CODE\",\"message\":\"Hello via UDP from ObjC\"}";
NSData *data = [message dataUsingEncoding:NSUTF8StringEncoding];
int sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
struct sockaddr_in server;
server.sin_family = AF_INET;
server.sin_port = htons(9999);
server.sin_addr.s_addr = inet_addr("{BASE_URL}/write");
sendto(sock, [data bytes], (int)[data length], 0, (struct sockaddr *)&server, sizeof(server));
close(sock);
import logging
import requests
class RemoteDebuggerHandler(logging.Handler):
def emit(self, record):
requests.post("{BASE_URL}/write", json={
"channel": "YOUR_CHANNEL_CODE",
"message": self.format(record)
})
logger = logging.getLogger("django")
logger.addHandler(RemoteDebuggerHandler())
class RemoteDebuggerUDP(logging.Handler):
def emit(self, record):
import socket, json
msg = json.dumps({
"channel": "YOUR_CHANNEL_CODE",
"message": self.format(record)
})
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.sendto(msg.encode(), ("{BASE_URL}/write", 9999))
const axios = require('axios');
axios.post("{BASE_URL}/write", {
channel: "YOUR_CHANNEL_CODE",
message: "Hello from Node.js"
});
const dgram = require('dgram');
const message = Buffer.from(JSON.stringify({
channel: "YOUR_CHANNEL_CODE",
message: "Hello from Node.js via UDP"
}));
const client = dgram.createSocket('udp4');
client.send(message, 9999, '{BASE_URL}/write');
If you'd like support for other platforms, just let us know!