# \[Pro\] Homey-Betterstack

**URL:** <https://community.homey.app/t/pro-homey-betterstack/107945>\
**Category:** Developers\
**Tags:** homey-pro, sdk3\
**Created:** [April 9, 2024, 6:57pm UTC](https://community.homey.app/t/pro-homey-betterstack/107945 "2024-04-09T18:57:47Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![martijnpoppen](https://sea1.discourse-cdn.com/flex025/user_avatar/community.homey.app/martijnpoppen/32/84849_2.png) [@martijnpoppen](https://community.homey.app/u/martijnpoppen)\
**Post date:** [April 9, 2024, 6:57pm UTC](https://community.homey.app/t/pro-homey-betterstack/107945/1 "2024-04-09T18:57:47Z")

</div>

Hello there!

I’ve developed an NPM package for Homey logging, enabling you to connect to an external monitoring source. Specifically designed for Betterstack Logs, this package facilitates automatic transmission of your Homey logs to Betterstack.

Setting it up is relatively straightforward. Detailed instructions can be found in the post below. (same as readme)

Link:

> **[homey-betterstack](https://www.npmjs.com/package/homey-betterstack)**
>
> A betterstack logger for Homey. Latest version: 0.3.2, last published: 18 days ago. Start using homey-betterstack in your project by running \`npm i homey-betterstack\`. There are no other projects in the npm registry using homey-betterstack.

> If you find any issues feel free to make a pull request or issue → [Issues · martijnpoppen/homey-betterstack · GitHub](https://github.com/martijnpoppen/homey-betterstack/issues)

---

<div class="post-metadata">

**Author:** ![martijnpoppen](https://sea1.discourse-cdn.com/flex025/user_avatar/community.homey.app/martijnpoppen/32/84849_2.png) [@martijnpoppen](https://community.homey.app/u/martijnpoppen)\
**Post date:** [April 9, 2024, 6:58pm UTC](https://community.homey.app/t/pro-homey-betterstack/107945/2 "2024-04-09T18:58:02Z")

</div>

# Homey - Betterstack

📣 Logtail is now part of Better Stack. [Learn more ⇗](https://betterstack.com/press/introducing-better-stack/)

[![Better Stack dashboard](https://us1.discourse-cdn.com/flex025/uploads/athom/original/3X/c/3/c39a283dfdebfa7b95e6cb2c746c87f7361a9999.jpeg)](https://betterstack.com/logs)

## Introduction

This package provides integration between your Homey app and Betterstack logging service. By using this package, you can easily log events, errors, and other information from your Homey app to Betterstack for monitoring and analysis.

## Setup

1. Create an account and project on [Betterstack](https://betterstack.com/logs).
2. Obtain the `source_token` provided by Betterstack.
3. Add the `source_token` as `HOMEY_BETTERSTACK_TOKEN` in your `env.json` file.

## Installation

You can install the package via npm:

```bash
npm install homey-betterstack

```

or

```bash
yarn add homey-betterstack

```

## Usage

### Import the package

```javascript
const HomeyLog = require("homey-betterstack");

```

### Extend the app class

Edit the app class to extend `HomeyLog`:

```javascript
//From:
class App extends Homey.App {

```

```javascript
// To
class App extends HomeyLog {

```

### Logging from app.js

Use `this.log` or `this.error` etc within your `app.js`:

```javascript
this.trace("Event occurred");
this.debug("Event occurred");
this.info("Event occurred"); // log is the same as info
this.log("Event occurred"); // log is the same as info
this.warn("Warning occurred", error);
this.error("Error occurred", error);
this.fatal("Fatal error occurred", error);

```

### Logging from devices and drivers

Use `this.homey.app.log` etc from within your devices and drivers:

```javascript
this.homey.app.trace("Event occurred in device/driver");
this.homey.app.debug("Event occurred in device/driver");
this.homey.app.log("Event occurred in device/driver"); // log is the same as info
this.homey.app.log("Event occurred in device/driver"); // log is the same as info
this.homey.app.warn("Warning occurred in device/driver", error);
this.homey.app.error("Error occurred in device/driver", error);
this.homey.app.fatal("Fatal error occurred in device/driver", error);

```

### Note:

Make sure to **remove** any log functions in your app as they will overwrite the log functionality of `Homey-Betterstack`

#### Not allowed ❌ :

```javascript
    log() {
        console.log.bind(this, '[log]').apply(this, arguments);
    }

    error() {
        console.error.bind(this, '[error]').apply(this, arguments);
    }

```

## Example

```javascript
class App extends HomeyLog {
  async onInit() {
    try {
      this.log(`${Homey.manifest.id} - ${Homey.manifest.version} started...`);
    } catch (error) {
      this.homey.app.log(error);
    }
  }
}

module.exports = App;

```

## Result

In the terminal:

```bash
[info] com.test.app - 0.0.1 started...

```

In Betterstack:

![](https://us1.discourse-cdn.com/flex025/uploads/athom/optimized/3X/4/2/4214522fb3c27207c0d01c4c429fb6cd707dc83c_2_690x31.png)

## Configuration

### Change Log Level

It is possible to alter the loglevels and change the enable/disable the output to console/betterstack.  
Add the following to your Homey app env.json:

```json
    "HOMEY_BETTERSTACK_CONFIG": {
        "console_enabled": "1",
        "publish_enabled": "1",
        "console_level": "info",
        "publish_level": "info"
    }

```

Above values are also the default values of the app.

### Log Levels

The following log levels are available:

```javascript
    trace: 6,
    debug: 5,
    info: 4,
    warn: 3,
    error: 2,
    fatal: 1

```

E.G: When setting the level to `warn` everything below `warn` will be logged.

---

<div class="post-metadata">

**Author:** ![martijnpoppen](https://sea1.discourse-cdn.com/flex025/user_avatar/community.homey.app/martijnpoppen/32/84849_2.png) [@martijnpoppen](https://community.homey.app/u/martijnpoppen)\
**Post date:** [April 9, 2024, 6:58pm UTC](https://community.homey.app/t/pro-homey-betterstack/107945/3 "2024-04-09T18:58:10Z")

</div>

Placeholder 1

---

<div class="post-metadata">

**Author:** ![martijnpoppen](https://sea1.discourse-cdn.com/flex025/user_avatar/community.homey.app/martijnpoppen/32/84849_2.png) [@martijnpoppen](https://community.homey.app/u/martijnpoppen)\
**Post date:** [April 9, 2024, 6:58pm UTC](https://community.homey.app/t/pro-homey-betterstack/107945/4 "2024-04-09T18:58:16Z")

</div>

Placeholder 2

---

<div class="post-metadata">

**Author:** ![robertklep](https://sea1.discourse-cdn.com/flex025/user_avatar/community.homey.app/robertklep/32/160628_2.png) [@robertklep](https://community.homey.app/u/robertklep)\
**Post date:** [April 10, 2024, 5:15am UTC](https://community.homey.app/t/pro-homey-betterstack/107945/5 "2024-04-10T05:15:57Z")

</div>

Cool 😃

Are there any settings that deal with production vs development? I assume that most developers don’t want logging to be enabled in production versions of their app (also because of possible GDPR issues).

---

<div class="post-metadata">

**Author:** ![martijnpoppen](https://sea1.discourse-cdn.com/flex025/user_avatar/community.homey.app/martijnpoppen/32/84849_2.png) [@martijnpoppen](https://community.homey.app/u/martijnpoppen)\
**Post date:** [April 10, 2024, 7:28am UTC](https://community.homey.app/t/pro-homey-betterstack/107945/6 "2024-04-10T07:28:09Z")

</div>

Thanks!  
Will look into that, currently development settings are the same as production.

---

<div class="post-metadata">

**Author:** ![robertklep](https://sea1.discourse-cdn.com/flex025/user_avatar/community.homey.app/robertklep/32/160628_2.png) [@robertklep](https://community.homey.app/u/robertklep)\
**Post date:** [April 10, 2024, 8:20am UTC](https://community.homey.app/t/pro-homey-betterstack/107945/7 "2024-04-10T08:20:46Z")

</div>

I realised that another thing to check is to see how it handles when Homey has no internet connection, since you don’t want it to slow down (or crash) the app.
