I många av våra artiklar om automatisering på Macen använder vi Applescript för att styra olika systemfunktioner eller program. Applescript är ett enkelt med kraftfullt skriptspråk – faktum är att det är ett fullständigt objektorienterat språk som kan göra nästan allt som ett vanligt Macprogram kan göra. Men en sak som inte är speciellt enkelt är att felsöka dina skript. Speciellt inte när du skriver dem i Automator eller olika tredjepartsprogram som kan använda Applescript för automatisering, som Keyboard Maestro, Alfred och Better Touch Tool.

Det kanske största hindret för effektiv felsökning är att det inte finns någon inbyggd metod för att logga. Om du skriver till exempel Swift-kod i Xcode kan du väldigt enkelt logga vad du vill för att till exempel se om något du försöker göra ger rätt resultat. I Applescript finns visserligen ett logg-kommando men det fungerar bara i programmet Skriptredigerare.

Oavsett hur avancerade Applescript-kunskaper du har kan du ha nytta av att kunna logga till exempel värdet på en variabel. Om något inte fungerar i ett skript du jobbar på kan du logga för att försöka hitta felet.

Efter att ha lagt timmar på att söka efter enkla sätt att logga med Applescript och förgäves försökt få bukt med Mac OS inbyggda loggsystem (och programmet Systemmeddelanden) har undertecknad hittat en metod som fungerar tillfredsställande och är hyfsat enkel. Idén är att skriva det du vill logga till en textfil på en passande plats, med en tidsstämpel som visar exakt när loggningen gjordes. Du kan sedan radera loggfilen när du är klar, eller för att tömma den och börja om.

Scriptbibliotek

Sedan version 10.9 har Mac OS ett system för att skapa Applescript-bibliotek – skript med samlingar av funktioner du vill återanvända i flera andra skript. Genom att skapa bibliotek blir dina andra skript mindre och mer lättöverskådliga. En loggfunktion är ett perfekt exempel på något som passar i ett bibliotek.

Öppna programmet Skriptredigerare och skapa ett nytt skript. Spara det i mappen Script Libraries i din biblioteksmapp (du måste förmodligen skapa mappen eftersom den inte finns som standard). Vi har gett det namnet Logger.scpt.

Lägg till följande kod i skriptet:

use AppleScript version "2.4" -- Yosemite (10.10) or later
use scripting additions

on zero_pad(value, string_length)
set string_zeroes to ""
set digits_to_pad to string_length - (length of (value as string))
if digits_to_pad > 0 then
repeat digits_to_pad times
set string_zeroes to string_zeroes & "0" as string
end repeat
end if
set padded_value to string_zeroes & value as string
return padded_value
end zero_pad

on getCurrentDateAndTime()
set now to (current date)

set result to (year of now as integer) as string
set result to result & "-"
set result to result & zero_pad(month of now as integer, 2)
set result to result & "-"
set result to result & zero_pad(day of now as integer, 2)
set result to result & " "
set result to result & zero_pad(hours of now as integer, 2)
set result to result & ":"
set result to result & zero_pad(minutes of now as integer, 2)
set result to result & ":"
set result to result & zero_pad(seconds of now as integer, 2)

return result
end getCurrentDateAndTime

on logger(message, logFile)
set dateTime to getCurrentDateAndTime()
do shell script "echo " & quoted form of dateTime & " " & quoted form of message & " >> " & quoted form of logFile
end logger
Logger-funktion

Själva loggfunktionen ser du längst ner. Den använder i sin tur de två andra funktionerna för att få en tidsstämpel med formatet ”ÅÅ-MM-DD TT:MM:SS” inklusive inledande nollor för värden under 10 (så att loggfilen ser prydlig ut). Vi har valt att använda terminalkommandot echo för att skriva till loggfilen.

Använd logger-funktionen

För att använda funktionen i ett annat skript börjar du med att lägga till följande överst i skriptet (efter eventuella andra use-rader):

use logLib : script "Logger"
set logPath to "/Users/dittanvändarnamn/Scripts/logg.txt"

Här kan vi påpeka att namnen logLib, Logger och logPath är valfria och så länge du håller dig till samma på de olika platser du använder dem kan du välja vad du vill. Sökvägen till loggfilen kan också vara vad du vill, men det är bäst att placera den någonstans i din hemmapp så att du garanterat har rätt att läsa och skriva till den. Vi har valt att lägga den i en Scripts-mapp.

Använd loggfunktionen

På den plats i skriptet där du vill logga något använder du sedan loggfunktionen genom att skriva in följande kod:

logLib's logger("Meddelandet du vill logga", logPath)

Meddelandet kan vara något du själv skriver in inom raka citattecken, eller en variabel. En del datavariabler kan ge märkliga resultat med den här funktionen. Du kan testa att skicka en sådan inom parenteser med tillägget as string, så här:

logLib's logger((variabelnamn as string), logPath)

Det fungerar heller inte alla gånger, men hjälper ibland. För mer krångliga datatyper måste du tänka till lite mer och hitta en annan lösning.

Loggfilen
Resultatet av ett test av loggfunktionen.

Mer Applescript: Så ändrar du filers skapelse- och ändringsdatum på Mac