Options
All
  • Public
  • Public/Protected
  • All
Menu

The Background Geolocation SDK includes powerful logging features for debugging location-tracking problems. The SDK stores log-entries for a period of Config.logMaxDays (default 3). The volume of logging events inserted into the database is controlled via Config.logLevel.

For more information, see the 📘Debugging Guide.

The Logger API is accessed via BackgroundGeolocation.logger property:

example
let Logger = BackgroundGeolocation.logger;
let log = await Logger.getLog();

Fetching the Logs:

Logs can be fetched from the SDK in three ways:

  1. getLog
  2. emailLog
  3. uploadLog

Inserting your own log messages

You can even insert your own log messages into the SDK's Log database using the following methods:

method logLevel icon
error ERROR ❗ī¸
warn WARNING ⚠ī¸
debug DEBUG 🐞
info INFO ℹī¸
notice INFO đŸ”ĩ
example
let Logger = BackgroundGeolocation.logger;
BackgroundGeolocation.onLocation((location) => {
  Logger.debug("Location received in Javascript: " + location.uuid);
});

Example Logs

09-19 11:12:18.716 ╔═════════════════════════════════════════════
09-19 11:12:18.716 ║ BackgroundGeolocation Service started
09-19 11:12:18.716 ╠═════════════════════════════════════════════
09-19 11:12:18.723 [c.t.l.BackgroundGeolocationService d]
09-19 11:12:18.723   ✅  Started in foreground
09-19 11:12:18.737 [c.t.l.ActivityRecognitionService a]
09-19 11:12:18.737   🎾  Start activity updates: 10000
09-19 11:12:18.761 [c.t.l.BackgroundGeolocationService k]
09-19 11:12:18.761   🔴  Stop heartbeat
09-19 11:12:18.768 [c.t.l.BackgroundGeolocationService a]
09-19 11:12:18.768   🎾  Start heartbeat (60)
09-19 11:12:18.778 [c.t.l.BackgroundGeolocationService a]
09-19 11:12:18.778   đŸ”ĩ  setPace: null → false
09-19 11:12:18.781 [c.t.l.adapter.TSConfig c] ℹī¸   Persist config
09-19 11:12:18.794 [c.t.locationmanager.util.b a]
09-19 11:12:18.794   ℹī¸  LocationAuthorization: Permission granted
09-19 11:12:18.842 [c.t.l.http.HttpService flush]
09-19 11:12:18.842 ╔═════════════════════════════════════════════
09-19 11:12:18.842 ║ HTTP Service
09-19 11:12:18.842 ╠═════════════════════════════════════════════
09-19 11:12:19.000 [c.t.l.BackgroundGeolocationService onActivityRecognitionResult] still (100%)
09-19 11:12:21.314 [c.t.l.l.SingleLocationRequest$2 onLocationResult]
09-19 11:12:21.314 ╔═════════════════════════════════════════════
09-19 11:12:21.314 ║ SingleLocationRequest: 1
09-19 11:12:21.314 ╠═════════════════════════════════════════════
09-19 11:12:21.314 ╟─ 📍  Location[fused 45.519239,-73.617058 hAcc=15]999923706055 vAcc=2 sAcc=??? bAcc=???
09-19 11:12:21.327 [c.t.l.l.TSLocationManager onSingleLocationResult]
09-19 11:12:21.327   đŸ”ĩ  Acquired motionchange position, isMoving: false
09-19 11:12:21.342 [c.t.l.l.TSLocationManager a] 15.243
09-19 11:12:21.405 [c.t.locationmanager.data.a.c persist]
09-19 11:12:21.405   ✅  INSERT: bca5acc8-e358-4d8f-827f-b8c0d556b7bb
09-19 11:12:21.423 [c.t.l.http.HttpService flush]
09-19 11:12:21.423 ╔═════════════════════════════════════════════
09-19 11:12:21.423 ║ HTTP Service
09-19 11:12:21.423 ╠═════════════════════════════════════════════
09-19 11:12:21.446 [c.t.locationmanager.data.a.c first]
09-19 11:12:21.446   ✅  Locked 1 records
09-19 11:12:21.454 [c.t.l.http.HttpService a]
09-19 11:12:21.454   đŸ”ĩ  HTTP POST: bca5acc8-e358-4d8f-827f-b8c0d556b7bb
09-19 11:12:22.083 [c.t.l.http.HttpService$a onResponse]
09-19 11:12:22.083   đŸ”ĩ  Response: 200
09-19 11:12:22.100 [c.t.locationmanager.data.a.c destroy]
09-19 11:12:22.100   ✅  DESTROY: bca5acc8-e358-4d8f-827f-b8c0d556b7bb
09-19 11:12:55.226 [c.t.l.BackgroundGeolocationService onActivityRecognitionResult] still (100%)

Hierarchy

  • Logger

Index

Properties

ORDER_ASC

ORDER_ASC: SQLQueryOrder

-1. Used to order results of SQLQuery ascending.

ORDER_DESC

ORDER_DESC: SQLQueryOrder

1. Used to order results of SQLQuery descending.

Methods

debug

  • debug(message: string): void
  • Inserts a debug log message into the SDK's log database

    example
    BackgroundGeolocation.logger.debug("This is a debug message");
    

     

    D TSLocationManager: [c.t.l.logger.TSLog log] This is a debug message
    

    Parameters

    • message: string

    Returns void

destroyLog

  • destroyLog(): Promise<boolean>

emailLog

  • emailLog(email: string, query?: SQLQuery): Promise<boolean>
  • Email the result of getLog using device's mail client.

    example
    let Logger = BackgroundGeolocation.logger;
    Logger.emailLog("foo@bar.com").then((success) => {
      console.log("[emailLog] success");
    }).catch((error) => {
      console.log("[emailLog] FAILURE: ", error);
    });
    
    // Or constrain results by providing a SQLQuery
    Logger.emailLog("foo@bar.com", {
      start: Date.parse("2019-09-19"),
      end: Date.parse("2019-09-20"),
      order: Logger.ORDER_ASC,
      limit: 1000
    });
    

    ℹī¸ See also:

    Parameters

    • email: string
    • Optional query: SQLQuery

    Returns Promise<boolean>

error

  • error(message: string): void
  • Inserts an "error" log message into the SDK's log database

    example
    BackgroundGeolocation.logger.error("Something BAD");
    

     

    E TSLocationManager: [c.t.l.logger.TSLog log]
    E TSLocationManager: â€ŧ Something BAD
    

    Parameters

    • message: string

    Returns void

getLog

  • getLog(query?: SQLQuery): Promise<string>
  • Returns the records from log database as a String. Provide an optional SQLQuery to contrain results between dates.

    break

    Depending on the configured Config.logLevel, the plugin can store an immense amount of helpful logging information for debugging location-tracking problems.

    ℹī¸ See also:

    example
    BackgroundGeolocation.logger.getLog().then((log) => {
      // Warning:  this string could be several megabytes.
      console.log("[log] success: ", log);
    });
    
    // Or constrain results by providing a SQLQuery
    let Logger = BackgroundGeolocation.logger;
    
    let log = await Logger.getLog({
      start: Date.parse("2019-09-19 11:12"),
      end: Date.parse("2019-09-19 11:13"),
      order: Logger.ORDER_ASC,
      limit: 100
    });
    
    09-19 11:12:18.716 ╔═════════════════════════════════════════════
    09-19 11:12:18.716 ║ BackgroundGeolocation Service started
    09-19 11:12:18.716 ╠═════════════════════════════════════════════
    09-19 11:12:18.723 [c.t.l.BackgroundGeolocationService d]
    09-19 11:12:18.723   ✅  Started in foreground
    09-19 11:12:18.737 [c.t.l.ActivityRecognitionService a]
    09-19 11:12:18.737   🎾  Start activity updates: 10000
    09-19 11:12:18.761 [c.t.l.BackgroundGeolocationService k]
    09-19 11:12:18.761   🔴  Stop heartbeat
    09-19 11:12:18.768 [c.t.l.BackgroundGeolocationService a]
    09-19 11:12:18.768   🎾  Start heartbeat (60)
    09-19 11:12:18.778 [c.t.l.BackgroundGeolocationService a]
    09-19 11:12:18.778   đŸ”ĩ  setPace: null → false
    09-19 11:12:18.781 [c.t.l.adapter.TSConfig c] ℹī¸   Persist config
    09-19 11:12:18.794 [c.t.locationmanager.util.b a]
    09-19 11:12:18.794   ℹī¸  LocationAuthorization: Permission granted
    09-19 11:12:18.842 [c.t.l.http.HttpService flush]
    09-19 11:12:18.842 ╔═════════════════════════════════════════════
    09-19 11:12:18.842 ║ HTTP Service
    09-19 11:12:18.842 ╠═════════════════════════════════════════════
    09-19 11:12:19.000 [c.t.l.BackgroundGeolocationService onActivityRecognitionResult] still (100%)
    09-19 11:12:21.314 [c.t.l.l.SingleLocationRequest$2 onLocationResult]
    09-19 11:12:21.314 ╔═════════════════════════════════════════════
    09-19 11:12:21.314 ║ SingleLocationRequest: 1
    09-19 11:12:21.314 ╠═════════════════════════════════════════════
    09-19 11:12:21.314 ╟─ 📍  Location[fused 45.519239,-73.617058 hAcc=15]999923706055 vAcc=2 sAcc=??? bAcc=???
    09-19 11:12:21.327 [c.t.l.l.TSLocationManager onSingleLocationResult]
    09-19 11:12:21.327   đŸ”ĩ  Acquired motionchange position, isMoving: false
    09-19 11:12:21.342 [c.t.l.l.TSLocationManager a] 15.243
    09-19 11:12:21.405 [c.t.locationmanager.data.a.c persist]
    09-19 11:12:21.405   ✅  INSERT: bca5acc8-e358-4d8f-827f-b8c0d556b7bb
    09-19 11:12:21.423 [c.t.l.http.HttpService flush]
    09-19 11:12:21.423 ╔═════════════════════════════════════════════
    09-19 11:12:21.423 ║ HTTP Service
    09-19 11:12:21.423 ╠═════════════════════════════════════════════
    09-19 11:12:21.446 [c.t.locationmanager.data.a.c first]
    09-19 11:12:21.446   ✅  Locked 1 records
    09-19 11:12:21.454 [c.t.l.http.HttpService a]
    09-19 11:12:21.454   đŸ”ĩ  HTTP POST: bca5acc8-e358-4d8f-827f-b8c0d556b7bb
    09-19 11:12:22.083 [c.t.l.http.HttpService$a onResponse]
    09-19 11:12:22.083   đŸ”ĩ  Response: 200
    09-19 11:12:22.100 [c.t.locationmanager.data.a.c destroy]
    09-19 11:12:22.100   ✅  DESTROY: bca5acc8-e358-4d8f-827f-b8c0d556b7bb
    09-19 11:12:55.226 [c.t.l.BackgroundGeolocationService onActivityRecognitionResult] still (100%)
    

    Parameters

    Returns Promise<string>

info

  • info(message: string): void
  • Inserts an "info" log message into the SDK's log database

    example
    BackgroundGeolocation.logger.info("Something informative");
    

     

    E TSLocationManager: [c.t.l.logger.TSLog log]
    I TSLocationManager:   ℹī¸  Something informative
    

    Parameters

    • message: string

    Returns void

notice

  • notice(message: string): void
  • Inserts a "notice" log message into the SDK's log database

    example
    BackgroundGeolocation.logger.notice("A Notice");
    

     

    E TSLocationManager: [c.t.l.logger.TSLog log]
    I TSLocationManager:   đŸ”ĩ  A Notice
    

    Parameters

    • message: string

    Returns void

uploadLog

  • uploadLog(url: string, query?: SQLQuery): Promise<boolean>
  • Upload the result of getLog to provided url. Provide an optional SQLQuery to contrain results between dates. The file-upload request will attach your configured Config.headers for authentication.

    Example

    BackgroundGeolocation.logger.uploadLog("https://my.server.com/users/123/logs").then((success) => {
      console.log("[uploadLog] success");
    }).catch((error) => {
      console.log("[uploadLog] FAILURE:", error);
    });
    
    // Or constrain results by providing a [SQLQuery]:
    BackgroundGeolocation.logger.uploadLog("https://my.server.com/users/123/logs", {
      start: Date.parse("2019-10-20 09:00"),
      end: Date.parse("2019-10-20 11:59")
    }).then((success) => {
      console.log("[uploadLog] success");
    }).catch((error) => {
      console.log("[uploadLog] FAILURE:", error);
    });
    

    MultiPart File Upload

    The SDK will upload the gzipped log-file to your server as a Multi-part file upload, the same log-file as used in emailLog. This is what I see with my Node server at request.files:

    app.post("/log", async function(req, res) {
      console.log("[body]: ", req.body);
      console.log("[files]: ", req.files);
      res.status(200).send();
    });
    

    Form Part

    In addition to the log-file, the SDK will upload a form as well, containing the following parameters:

    Key Value
    state JSON-encoded result of SDK's #getState
    model Device model
    manufacturer Device manufacturer
    platform iOS or Android
    version OS version

    ℹī¸ See also:

    Parameters

    Returns Promise<boolean>

warn

  • warn(message: string): void
  • Inserts a "warning" log message into the SDK's log database

    example
    BackgroundGeolocation.logger.warn("Something WEIRD");
    

     

    E TSLocationManager: [c.t.l.logger.TSLog log]
    E TSLocationManager: ⚠ī¸  Something WEIRD
    

    Parameters

    • message: string

    Returns void

Generated using TypeDoc