Skip to content

Logging

Proper logging is essential for debugging and monitoring your plugin's behavior. The Aloha SDK provides a logger instance through the plugin context.

Basic Usage

Getting the Logger

Access the logger through the plugin context:

typescript
import { Plugin } from 'aloha-sdk'
import type { Logger, PluginContext } from 'aloha-sdk'

export default class MyPlugin extends Plugin {
  private logger: Logger

  constructor(context: PluginContext) {
    super(context)
    this.logger = context.getLogger()
  }

  async toolCall(toolName: string, args: Record<string, any>): Promise<string> {
    // Logs "Tool called: getWeather { city: 'Los Angeles', type: 'wind-direction' }"
    this.logger.info('Tool called:', toolName, args); 
    // Your implementation
    return 'result'
  }
}

Logs Location

By default, Aloha writes logs to the following locations:

  • on Linux: ~/.config/aloha-desktop/logs/main.log
  • on macOS: ~/Library/Logs/aloha-desktop/main.log
  • on Windows: %USERPROFILE%\AppData\Roaming\aloha-desktop\logs\main.log

Logging Errors

Aloha Desktop automatically logs errors thrown from the toolCall method. You don't need to manually log errors unless you want to include additional context.

Example

When your plugin throws an error, Aloha automatically formats and logs it with the function name and arguments:

typescript
import { Plugin } from 'aloha-sdk'
import type { PluginContext } from 'aloha-sdk'

export default class FileManagerPlugin extends Plugin {
  constructor(context: PluginContext) {
    super(context)
  }

  async toolCall(toolName: string, args: Record<string, any>): Promise<string> {
    if (toolName === 'listFiles') {
      if (!this.directoryExists(args.directory)) {
        // Just throw the error - Aloha will automatically log it
        throw new Error("Directory doesn't exist")
      }
      
      // Your implementation here
      return 'file list'
    }

    throw new Error('Unknown tool')
  }

  private directoryExists(path: string): boolean {
    // Your directory check logic
    return false
  }
}

This will be automatically logged as:

Plugin tool call error: listFiles { directory: '/downloads' } Directory doesn't exist

Aloha Desktop will also show the error message in the conversation history:

/img/plugin-error-ui.png

Logger API

ts
error(...params: any[]): void;
warn(...params: any[]): void;
info(...params: any[]): void;
verbose(...params: any[]): void;
debug(...params: any[]): void;
silly(...params: any[]): void;
log(...params: any[]): void;

Next Steps