0.0.1 • Published 3 years ago

@phistrom/cf-logdna v0.0.1

Weekly downloads
-
License
MIT
Repository
github
Last release
3 years ago

LogDNA Logging on Cloudflare Workers

Beta

Please use care when using in production environments.

Requirements

Install

From your Cloudflare Worker project, run:

npm install @phistrom/cf-logdna`

Specify your LogDNA ingest API key by adding a secret to your Worker:

wrangler secret put LOGDNA_KEY
# put in your API key from LogDNA here when prompted

Specify the APP_NAME in one of two ways:

Add the following to your wrangler.toml file as an environment variable:

vars = { WORKER_NAME = "cf-logdna-testing" }

Or you can add self.WORKER_NAME to your code directly like this:

import "@phistrom/cf-logdna"

self.WORKER_NAME = "myworker"

addEventListener('fetch', event => {
  // ...
})

How to Use

Just import @phistrom/cf-logdna as early in your code as possible to immediately benefit from the logging of incoming requests, responses, unhandled errors, and objects/messages logged to the console.

// as close to the top as possible of your entry script (i.e. index.js)
import "@phistrom/cf-logdna"

addEventListener('fetch', event => {
  // ...
})

console vs event.console

cf-logdna attempts to associate log lines with the request/response context (event) they came from. Sometimes this isn't possible (due to the way that Date.now() works). To ensure that every log line can be associated with a FetchEvent, cf-logdna provides an event.console object.

import "@phistrom/cf-logdna"

addEventListener('fetch', event => {
  console.log("I get logged to LogDNA just fine.")
  event.console.log("I'm a better way of doing things, though.")
  event.console.error("I'm an error message!")
  console.critical("I'm a non-standard critical message! But I *may* not have the FetchEvent information.")
  event.console.critical("critical() behaves the same as console.error, but will log a CRITICAL level entry on LogDNA.")
  $console.log("I don't get sent to LogDNA. I act like the vanilla console object.")
  throw new Error("I'll see you in `wrangler tail` AND in your LogDNA viewer!")
})

event.console ensures that log lines sent to LogDNA have a meta.eventTimestamp field. Using the regular console may still provide this field, but only until the first fetch() call made (the Date.now() clock only advances after I/O calls).

Do not assign the event.console object to a global variable. You should pass it into the functions handling the events. It can be a pain going through and changing all your code to say event.console.log instead of console.log, but it's not a requirement.

License

MIT

Contributing

I'm not very skilled at Javascript. I'm getting better because Cloudflare Workers is such a great product, but I'm sure there are optimizations that could be made or bugs to be squished. Pull requests are very welcome and very much appreciated.