diff --git a/dyndnsd-client.go b/dyndnsd-client.go
index b22e13add58c6ce8fc4f893fd8d788627b3fa347..6dfc0b19bbaaa4ae54cd86f73c4966b0c5cae86e 100644
--- a/dyndnsd-client.go
+++ b/dyndnsd-client.go
@@ -4,20 +4,30 @@ import (
 	"fmt"
 	"github.com/joshbetz/config"
 	"io/ioutil"
+	"log"
 	"net/http"
 	"net/url"
+	"os"
 )
 
 var (
 	cfg          *config.Config
 	ipv4Endpoint string
 	ipv6Endpoint string
+
+	logger *log.Logger
 )
 
 // Parse config
 func init() {
-	cfg = config.New("config.json")
+	// Logging
+	logOpts := log.Ldate | log.Ltime | log.LUTC | log.Lshortfile
+	logger = log.New(os.Stdout, "", logOpts)
+
+	logger.Println("PINGING dyndnsd ENDPOINT")
 
+	// Configuration
+	cfg = config.New("config.json")
 	cfg.Get("ipv4_endpoint", &ipv4Endpoint)
 	cfg.Get("ipv6_endpoint", &ipv6Endpoint)
 }
@@ -27,6 +37,8 @@ func main() {
 	// Base URL
 	endpoint, err := buildEndpointUrl()
 	if err != nil {
+		logger.Println("Couldn't build endpoint URL")
+		logger.Printf("%s", err)
 		return
 	}
 
@@ -37,27 +49,32 @@ func main() {
 		query.Set("myip", ipv4)
 		endpoint.RawQuery = query.Encode()
 	} else {
+		logger.Println("Couldn't retrieve IPv4 address")
+		logger.Printf("%s", err)
 		return
 	}
 
-	fmt.Println(endpoint)
-
 	// IPv6 is optional
 	ipv6, err := getUrl(ipv6Endpoint)
 	if err == nil {
 		query := endpoint.Query()
 		query.Set("myip6", ipv6)
 		endpoint.RawQuery = query.Encode()
+	} else {
+		logger.Println("Couldn't retrieve IPv6 address")
+		logger.Printf("%s", err)
 	}
 
 	// Send the update
 	dyndns, err := getUrl(endpoint.String())
 	if err != nil {
+		logger.Println("Couldn't update dyndnsd endpoint")
+		logger.Printf("%s", err)
 		return
 	}
 
-	// TODO: better formatting
-	fmt.Println(dyndns)
+	logger.Println("SUCCESS! Ping sent.")
+	logger.Printf("%s", dyndns)
 }
 
 // Build endpoint URL from configuration