# Controlling logging in Avo Codegen

> 💡 Custom loggers are currently only supported in Swift, JavaScript and
> TypeScript. [Reach out to us](https://www.avo.app/docs/help/troubleshooting.md) if you want access to
> custom loggers in your programming languages.

To get fine control over the logs you can provide a custom logger to Avo Codegen.

Notice the returned boolean, if you return `true` Avo Codegen won't print the built-in logs.

### Swift

```swift
class MyAvoLogger : AvoLogger {
    func logDebug(env: AvoEnv, message: String) -> Bool {
        NSLog("[debug] My avo logger: " + String(describing: env) + " " + message)
        return true
    }
    func logWarn(env: AvoEnv, message: String) -> Bool {
        NSLog("[warn] My avo logger: " + String(describing: env) + " " + message)
        return false
    }
    func logError(env: AvoEnv, message: String) -> Bool {
        NSLog("[error] My avo logger: " + String(describing: env) + " " + message)
        return false
    }
}

Avo.initAvo(...)

Avo.avoLogger = MyAvoLogger()
```

### JavaScript

```javascript
const avoLogger = {
  logDebug: (env, message) => {
    console.log("Avo Custom Logger Here!", message, env)
    return true
  },
  logWarn: (env, message) => {
    console.log("Avo Custom Logger Here!", message, env)
    return true
  },
  logError: (env, message) => {
    console.log("Avo Custom Logger Here!", message, env)
    return true
  }
};

Avo.initAvo(
  { env: env.DEV, ..., avoLogger: avoLogger },
  ...
);
```

### TypeScript

```typescript
const avoLogger = {
  logDebug: (env: AvoEnv, message: string): boolean => {
    console.log("Avo Custom Logger Here!", message, env)
    return true
  },
  logWarn: (env: AvoEnv, message: string): boolean => {
    console.log("Avo Custom Logger Here!", message, env)
    return true
  },
  logError: (env: AvoEnv, message: string): boolean => {
    console.log("Avo Custom Logger Here!", message, env)
    return true
  }
};

Avo.initAvo(
  { env: env.DEV, ..., avoLogger: avoLogger },
  ...
);
```
