Debugging your function

When you write a function in Function service, you may encounter errors while running the function.
In this case, you can debug your code by checking the logs from your function.

Example

Assuming you have a function like below:

<span><span style="color: var(--shiki-token-keyword)">import</span><span style="color: var(--shiki-color-text)"> { gql</span><span style="color: var(--shiki-token-punctuation)">,</span><span style="color: var(--shiki-color-text)"> request } </span><span style="color: var(--shiki-token-keyword)">from</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">&quot;graphql-request&quot;</span><span style="color: var(--shiki-color-text)">;</span></span>
<span></span>
<span><span style="color: var(--shiki-token-constant)">globalThis</span><span style="color: var(--shiki-color-text)">.</span><span style="color: var(--shiki-token-function)">main</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">async</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">function</span><span style="color: var(--shiki-color-text)"> (args) {</span></span>
<span><span style="color: var(--shiki-color-text)">  </span><span style="color: var(--shiki-token-keyword)">const</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">document</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-function)">gql</span><span style="color: var(--shiki-token-string-expression)">`</span></span>
<span><span style="color: var(--shiki-token-string-expression)">    query ExampleQuery($pokemon: String!) {</span></span>
<span><span style="color: var(--shiki-token-string-expression)">      getFuzzyPokemon(pokemon: $pokemon) {</span></span>
<span><span style="color: var(--shiki-token-string-expression)">        species</span></span>
<span><span style="color: var(--shiki-token-string-expression)">      }</span></span>
<span><span style="color: var(--shiki-token-string-expression)">    }</span></span>
<span><span style="color: var(--shiki-token-string-expression)">  `</span><span style="color: var(--shiki-color-text)">;</span></span>
<span></span>
<span><span style="color: var(--shiki-color-text)">  </span><span style="color: var(--shiki-token-constant)">console</span><span style="color: var(--shiki-token-function)">.log</span><span style="color: var(--shiki-color-text)">(</span><span style="color: var(--shiki-token-constant)">JSON</span><span style="color: var(--shiki-token-function)">.stringify</span><span style="color: var(--shiki-color-text)">(args)); </span><span style="color: var(--shiki-token-comment)">// log the input args</span></span>
<span></span>
<span><span style="color: var(--shiki-color-text)">  </span><span style="color: var(--shiki-token-keyword)">const</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">variables</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> {</span></span>
<span><span style="color: var(--shiki-color-text)">    pokemon</span><span style="color: var(--shiki-token-keyword)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">args</span><span style="color: var(--shiki-color-text)">.pokemon</span><span style="color: var(--shiki-token-punctuation)">,</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-comment)">// e.g., &quot;rayquaza&quot;</span></span>
<span><span style="color: var(--shiki-color-text)">  };</span></span>
<span><span style="color: var(--shiki-color-text)">  </span><span style="color: var(--shiki-token-keyword)">let</span><span style="color: var(--shiki-color-text)"> res </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">await</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-function)">request</span><span style="color: var(--shiki-color-text)">(</span></span>
<span><span style="color: var(--shiki-color-text)">    </span><span style="color: var(--shiki-token-string-expression)">&quot;https://graphqlpokemon.favware.tech/v8&quot;</span><span style="color: var(--shiki-token-punctuation)">,</span></span>
<span><span style="color: var(--shiki-color-text)">    document</span><span style="color: var(--shiki-token-punctuation)">,</span></span>
<span><span style="color: var(--shiki-color-text)">    variables</span><span style="color: var(--shiki-token-punctuation)">,</span></span>
<span><span style="color: var(--shiki-color-text)">  );</span></span>
<span><span style="color: var(--shiki-color-text)">  </span><span style="color: var(--shiki-token-constant)">console</span><span style="color: var(--shiki-token-function)">.log</span><span style="color: var(--shiki-color-text)">(</span><span style="color: var(--shiki-token-constant)">JSON</span><span style="color: var(--shiki-token-function)">.stringify</span><span style="color: var(--shiki-color-text)">(res)); </span><span style="color: var(--shiki-token-comment)">// log the response</span></span>
<span></span>
<span><span style="color: var(--shiki-color-text)">  </span><span style="color: var(--shiki-token-keyword)">return</span><span style="color: var(--shiki-color-text)"> { species</span><span style="color: var(--shiki-token-keyword)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">res</span><span style="color: var(--shiki-color-text)">.getFuzzyPokemon[</span><span style="color: var(--shiki-token-constant)">0</span><span style="color: var(--shiki-color-text)">].species };</span></span>
<span><span style="color: var(--shiki-color-text)">};</span></span>
<span></span>

After deploying the function with these steps, you can run the function with the test-run command in tailorctl.

<span><span style="color: var(--shiki-color-text)">tailorctl workspace </span><span style="color: var(--shiki-token-keyword)">function</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-function)">test</span><span style="color: var(--shiki-color-text)">-</span><span style="color: var(--shiki-token-function)">run</span><span style="color: var(--shiki-color-text)"> -</span><span style="color: var(--shiki-token-function)">s</span><span style="color: var(--shiki-color-text)"> .</span><span style="color: var(--shiki-token-function)">script</span><span style="color: var(--shiki-color-text)">/</span><span style="color: var(--shiki-token-function)">dist</span><span style="color: var(--shiki-color-text)">/</span><span style="color: var(--shiki-token-function)">get_pokemon_function</span><span style="color: var(--shiki-color-text)">.</span><span style="color: var(--shiki-token-function)">js</span><span style="color: var(--shiki-color-text)"> -</span><span style="color: var(--shiki-token-function)">a</span><span style="color: var(--shiki-color-text)"> &lt;</span><span style="color: var(--shiki-token-function)">YOUR_APP_NAME</span><span style="color: var(--shiki-color-text)">&gt; -</span><span style="color: var(--shiki-token-function)">m</span><span style="color: var(--shiki-color-text)"> &lt;</span><span style="color: var(--shiki-token-function)">YOUR_MACHINE_USER_NAME</span><span style="color: var(--shiki-color-text)">&gt; -</span><span style="color: var(--shiki-token-function)">g</span><span style="color: var(--shiki-color-text)"> &#39;{</span><span style="color: var(--shiki-token-string-expression)">&quot;pokemon&quot;</span><span style="color: var(--shiki-color-text)">: </span><span style="color: var(--shiki-token-string-expression)">&quot;ay&quot;</span><span style="color: var(--shiki-color-text)">}</span><span style="color: var(--shiki-token-string-expression)">&#39; --tail</span></span>
<span></span>
<span><span style="color: var(--shiki-color-text)">[result]</span></span>
<span><span style="color: var(--shiki-color-text)">{</span><span style="color: var(--shiki-token-function)">&quot;species&quot;</span><span style="color: var(--shiki-token-function)">:</span><span style="color: var(--shiki-token-function)">&quot;rayquaza&quot;</span><span style="color: var(--shiki-token-function)">}</span></span>
<span></span>
<span><span style="color: var(--shiki-color-text)">[log]</span></span>
<span><span style="color: var(--shiki-token-function)">2025-02-14T07:16:31.590771150Z</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string)">INFO</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string)">{</span><span style="color: var(--shiki-token-string-expression)">&quot;pokemon&quot;</span><span style="color: var(--shiki-token-string)">:</span><span style="color: var(--shiki-token-string-expression)">&quot;ay&quot;</span><span style="color: var(--shiki-token-string)">}</span></span>
<span><span style="color: var(--shiki-token-function)">2025-02-14T07:16:32.467262922Z</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string)">INFO</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string)">{</span><span style="color: var(--shiki-token-string-expression)">&quot;getFuzzyPokemon&quot;</span><span style="color: var(--shiki-token-string)">:[{</span><span style="color: var(--shiki-token-string-expression)">&quot;species&quot;</span><span style="color: var(--shiki-token-string)">:</span><span style="color: var(--shiki-token-string-expression)">&quot;rayquaza&quot;</span><span style="color: var(--shiki-token-string)">}]}</span></span>
<span></span>

Here's flags for the test-run command:

Flags:
  -a, --app string           app name
  -g, --arg string           argument to the script
  -h, --help                 help for test-run
  -m, --machineuser string   machieuser name
  -s, --script-path string   script path
  -t, --tail                 tail console.log