A handy tip for debug and error reporting on Arduino when you don't have a serial connection is to blink an LED.
This becomes more important when you put an AVR chip into a PCB and realise you have no Rx/Tx test/debug pins available. I'm sure you could use the ISP header (if you have one of those), but the LED method will still be available when your circuit is away from the apron strings of the PC.
As an example on my solar charge controller WiFi monitor device - which uses an ESP8266 but the concept is the same - I use the built in LED as diagnostics.
At power up I turn the LED on.
When waiting on the Wifi to connect I toggle the LED repeatedly with a 100ms delay. (Rapid flashing).
When the WiFi connects I flash the IP address 4th octet, eg, if it gets 192.168.0.8, then I flash the LED 8 times. If it gets 252 I flash the LED twice, wait, flash it 5 times, wait, flash it twice.
The LED then goes out.
When in it's main operational loop, a single 100ms pulse signifies a successful operation. 3 flashes denotes a failed operation. Constant rapid flashing indicates a terminal condition it cannot recover from and should probably force a reset.
So without plugging it in or poking at it with the Wifi and checking logs on the thing that receives data from it, I can look at it and wait 5 seconds for a loop to complete, if it pulses once, it's fine. When I turn it on I can see the rapid flashing as it connects to the Wifi and known when it stops everything is fine, if it doesn't stop it's borked.
Consider this if you ever put a power LED into an AVR circuit. Instead run the power LED off a uC pin and use it not just for power, but for diagnostics. If you have more complex output, just use more LEDs.
(Aside: Of course as mine is an ESP8266 which is substancially more powerful than an Arduino and has built in Wifi I could probably construct SysLog UDP packets and send them to a SysLog server to actually create a log file.)
https://github.com/arcao/Syslog