From 16672fc1468070ff838774323939730e3df40a74 Mon Sep 17 00:00:00 2001 From: Jon Kuperman Date: Wed, 18 Aug 2021 17:30:46 -0400 Subject: [PATCH 1/8] Add new page for logging from Workers --- .../src/content/learning/debugging-workers.md | 120 ------------ .../src/content/learning/how-kv-works.md | 2 +- .../content/learning/how-the-cache-works.md | 2 +- .../src/content/learning/how-workers-works.md | 2 +- .../src/content/learning/integrations.md | 2 +- .../src/content/learning/logging-workers.md | 174 ++++++++++++++++++ .../content/learning/metrics-and-analytics.md | 2 +- .../content/learning/security-model/index.md | 2 +- .../content/learning/using-durable-objects.md | 2 +- .../src/content/learning/using-streams.md | 2 +- .../src/content/learning/using-websockets.md | 2 +- 11 files changed, 183 insertions(+), 129 deletions(-) create mode 100644 products/workers/src/content/learning/logging-workers.md diff --git a/products/workers/src/content/learning/debugging-workers.md b/products/workers/src/content/learning/debugging-workers.md index b018ba2b88e..aca6642c94a 100644 --- a/products/workers/src/content/learning/debugging-workers.md +++ b/products/workers/src/content/learning/debugging-workers.md @@ -61,123 +61,3 @@ There is a bug associated with `wrangler dev` documented in the [Known issues se --------------------------------- - -## Accessing production logs with `wrangler tail` - -With your Workers application deployed, you may want to inspect incoming traffic. This can be useful for situations where a user is running into issues or errors that you can’t reproduce. `wrangler tail` allows developers to “tail” their Workers application’s logs, giving you real-time access to information about incoming requests. - -To get started, run `wrangler tail` in your Workers project directory. This will log any incoming requests to your application available in your local terminal. - -The output of each `wrangler tail` log is a structured JSON object: - -```json -{ - "outcome": "ok", - "scriptName": null, - "exceptions": [], - "logs": [], - "eventTimestamp": 1590680082349, - "event": { - "request": { - "url": "https://www.bytesized.xyz/", - "method": "GET", - "headers": {}, - "cf": {} - } - } -} -``` - -By piping the output to tools like [`jq`](https://stedolan.github.io/jq/), you can query and manipulate the requests to look for specific information: - -```sh -$ wrangler tail | jq .event.request.url -"https://www.bytesized.xyz/" -"https://www.bytesized.xyz/component---src-pages-index-js-a77e385e3bde5b78dbf6.js" -"https://www.bytesized.xyz/page-data/app-data.json" -``` - -You can customize how `wrangler tail` works to fit your needs: see [the docs](/cli-wrangler/commands#tail) for available configuration options. - --------------------------------- - -## Identifying and handling errors and exceptions - -### Error pages generated by Workers - -When a Worker running in production has an error that prevents it from returning a response, the client will receive an error page with an error code, defined as follows: - - - -| Error code | Meaning | -| ---------- | ---------------------------------------------------------------------------------------------------------| -| 1101 | Worker threw a JavaScript exception. | -| 1102 | Worker exceeded [CPU time limit](/platform/limits). | -| 1015 | Your client IP is being rate limited. | -| 1027 | Worker exceeded free tier [daily request limit](/platform/limits#daily-request). | -| 1042 | Worker tried to fetch from another Worker on the same zone, which is [unsupported](/runtime-apis/fetch). | - - - -Other 11xx errors generally indicate a problem with the Workers runtime itself — please check our [status page](https://www.cloudflarestatus.com) if you see one. - -### Identifying error: Workers Metrics - -Additionally, you can find out whether your application is experiencing any downtime, or returning any errors by navigating to Workers Metrics in the dashboard. - - - -### Debugging exceptions - -Once you’ve identified your Workers application is returning exceptions, you can use `wrangler tail` to inspect, and fix the exceptions. - - - -Exceptions will show up under the `exceptions` field in the JSON returned by `wrangler tail`. Once you’ve identified the exception that is causing errors, you may redeploy your code with a fix, and continue trailing the logs to confirm that it is indeed fixed. - -### Setup a logging service - -A Worker can make HTTP requests to any HTTP service on the public internet. You can use a service like [Sentry](https://sentry.io) to collect error logs from your Worker, by making an HTTP request to the service to report the error. Refer to your service’s API documentation for details on what kind of request to make. - -When logging using this strategy, remember that outstanding asynchronous tasks are canceled as soon as a Worker finishes sending its main response body to the client. To ensure that a logging subrequest completes, you can pass the request promise to [`event.waitUntil()`](https://developer.mozilla.org/en-US/docs/Web/API/ExtendableEvent/waitUntil). For example: - -```js -addEventListener("fetch", event => { - event.respondWith(handleEvent(event)) -}) - -async function handleEvent(event) { - // ... - - // Without event.waitUntil(), our fetch() to our logging service may - // or may not complete. - event.waitUntil(postLog(stack)) - return fetch(event.request) -} - -function postLog(data) { - return fetch("https://log-service.example.com/", { - method: "POST", - body: data, - }) -} -``` - -### Go to Origin on Error - -By using `event.passThroughOnException`, your Workers application will pass requests to your origin if it throws an exception. This allows you to add logging, tracking, or other features with Workers, without degrading your website’s functionality. - -```js -addEventListener("fetch", event => { - event.passThroughOnException() - - event.respondWith(handleRequest(event.request)) -}) - -async function handleRequest(request) { - // An error here will return the origin response, as if the Worker wasn’t present. - // ... - return fetch(request) -} -``` diff --git a/products/workers/src/content/learning/how-kv-works.md b/products/workers/src/content/learning/how-kv-works.md index ec471335671..249cc7ddcc8 100644 --- a/products/workers/src/content/learning/how-kv-works.md +++ b/products/workers/src/content/learning/how-kv-works.md @@ -1,5 +1,5 @@ --- -order: 5 +order: 6 pcx-content-type: concept --- diff --git a/products/workers/src/content/learning/how-the-cache-works.md b/products/workers/src/content/learning/how-the-cache-works.md index 2572280e702..f82e4630e46 100644 --- a/products/workers/src/content/learning/how-the-cache-works.md +++ b/products/workers/src/content/learning/how-the-cache-works.md @@ -1,5 +1,5 @@ --- -order: 6 +order: 7 pcx-content-type: concept --- diff --git a/products/workers/src/content/learning/how-workers-works.md b/products/workers/src/content/learning/how-workers-works.md index b575209af55..8d25ccb2f76 100644 --- a/products/workers/src/content/learning/how-workers-works.md +++ b/products/workers/src/content/learning/how-workers-works.md @@ -1,5 +1,5 @@ --- -order: 4 +order: 5 pcx-content-type: concept --- diff --git a/products/workers/src/content/learning/integrations.md b/products/workers/src/content/learning/integrations.md index 3696ef11ab7..5b7129a241b 100644 --- a/products/workers/src/content/learning/integrations.md +++ b/products/workers/src/content/learning/integrations.md @@ -1,5 +1,5 @@ --- -order: 12 +order: 13 pcx-content-type: concept --- diff --git a/products/workers/src/content/learning/logging-workers.md b/products/workers/src/content/learning/logging-workers.md new file mode 100644 index 00000000000..518447bf7e0 --- /dev/null +++ b/products/workers/src/content/learning/logging-workers.md @@ -0,0 +1,174 @@ +--- +order: 4 +pcx-content-type: concept +--- + +# Logging from Workers + +You can access logs and exceptions for your Workers from the dashboard and via `wrangler tail`. + +The Workers platform captures all `console.log`'s and uncaught exceptions, in addition to information about the event itself. All of this can be viewed with either `wrangler tail` or the dashboard. + +## Adding custom logs + +Here is an example of a Worker with a `console.log` inside the request handler. + +```js +addEventListener('fetch', event => { + event.respondWith(handleRequest(event.request)) +}) +/** + * Respond with hello worker text + * @param {Request} request + */ +async function handleRequest(request) { + const { cf } = request + const { city, country } = cf + + console.log(`Request came from city: ${city} in country: ${country}`); + + return new Response('Hello worker!', { + headers: { 'content-type': 'text/plain' }, + }) +} +``` + +If you deploy that, run `wrangler tail`, and then access the Worker, it will display: + +```sh +☁ logging-example [master] ⚡ wrangler tail --format=pretty +[2021-08-18 17:06:55] [LAX] [Ok] GET https://logging-example.jkup.workers.dev/ + | [Info] Request came from city: Pacifica in country: US +[2021-08-18 17:06:56] [LAX] [Ok] GET https://logging-example.jkup.workers.dev/favicon.ico + | [Info] Request came from city: Pacifica in country: US +``` + +## Accessing production logs with `wrangler tail` + +With your Workers application deployed, you may want to inspect incoming traffic. This can be useful for situations where a user is running into issues or errors that you can’t reproduce. `wrangler tail` allows developers to “tail” their Workers application’s logs, giving you real-time access to information about incoming requests. + +To get started, run `wrangler tail` in your Workers project directory. This will log any incoming requests to your application available in your local terminal. + +The output of each `wrangler tail` log is a structured JSON object: + +```json +{ + "outcome": "ok", + "scriptName": null, + "exceptions": [], + "logs": [], + "eventTimestamp": 1590680082349, + "event": { + "request": { + "url": "https://www.bytesized.xyz/", + "method": "GET", + "headers": {}, + "cf": {} + } + } +} +``` + +By piping the output to tools like [`jq`](https://stedolan.github.io/jq/), you can query and manipulate the requests to look for specific information: + +```sh +$ wrangler tail | jq .event.request.url +"https://www.bytesized.xyz/" +"https://www.bytesized.xyz/component---src-pages-index-js-a77e385e3bde5b78dbf6.js" +"https://www.bytesized.xyz/page-data/app-data.json" +``` + +You can customize how `wrangler tail` works to fit your needs: see [the docs](/cli-wrangler/commands#tail) for available configuration options. + +## Accessing production logs with the dashboard + +You can also view the production logs associated with any Worker from the [Cloudflare dashboard](https://dash.cloudflare.com?to=/:account/workers/overview). Click on any Worker and then click "Logs." Logging is available for all customers, including those on the free plan. + +A few things worth mentioning: + +- These logs are not stored. You can start and stop the stream at any time to view them, but they do not persist. +- Logs will not display if the Worker's requests per second are over 200 for the last 5 minutes. +- Logs from any [Durable Objects](/learning/using-durable-objects) your Worker is using will show up here. +- A maximum of 10 clients can view a Worker's logs at one time. This can be a combination of either dashboard sessions or `wrangler tail` calls. + +-------------------------------- + +## Identifying and handling errors and exceptions + +### Error pages generated by Workers + +When a Worker running in production has an error that prevents it from returning a response, the client will receive an error page with an error code, defined as follows: + + + +| Error code | Meaning | +| ---------- | ---------------------------------------------------------------------------------------------------------| +| 1101 | Worker threw a JavaScript exception. | +| 1102 | Worker exceeded [CPU time limit](/platform/limits). | +| 1015 | Your client IP is being rate limited. | +| 1027 | Worker exceeded free tier [daily request limit](/platform/limits#daily-request). | +| 1042 | Worker tried to fetch from another Worker on the same zone, which is [unsupported](/runtime-apis/fetch). | + + + +Other 11xx errors generally indicate a problem with the Workers runtime itself — please check our [status page](https://www.cloudflarestatus.com) if you see one. + +### Identifying error: Workers Metrics + +Additionally, you can find out whether your application is experiencing any downtime, or returning any errors by navigating to Workers Metrics in the dashboard. + + + +### Debugging exceptions + +Once you’ve identified your Workers application is returning exceptions, you can use `wrangler tail` to inspect, and fix the exceptions. + + + +Exceptions will show up under the `exceptions` field in the JSON returned by `wrangler tail`. Once you’ve identified the exception that is causing errors, you may redeploy your code with a fix, and continue trailing the logs to confirm that it is indeed fixed. + +### Setup a logging service + +A Worker can make HTTP requests to any HTTP service on the public internet. You can use a service like [Sentry](https://sentry.io) to collect error logs from your Worker, by making an HTTP request to the service to report the error. Refer to your service’s API documentation for details on what kind of request to make. + +When logging using this strategy, remember that outstanding asynchronous tasks are canceled as soon as a Worker finishes sending its main response body to the client. To ensure that a logging subrequest completes, you can pass the request promise to [`event.waitUntil()`](https://developer.mozilla.org/en-US/docs/Web/API/ExtendableEvent/waitUntil). For example: + +```js +addEventListener("fetch", event => { + event.respondWith(handleEvent(event)) +}) + +async function handleEvent(event) { + // ... + + // Without event.waitUntil(), our fetch() to our logging service may + // or may not complete. + event.waitUntil(postLog(stack)) + return fetch(event.request) +} + +function postLog(data) { + return fetch("https://log-service.example.com/", { + method: "POST", + body: data, + }) +} +``` + +### Go to Origin on Error + +By using `event.passThroughOnException`, your Workers application will pass requests to your origin if it throws an exception. This allows you to add logging, tracking, or other features with Workers, without degrading your website’s functionality. + +```js +addEventListener("fetch", event => { + event.passThroughOnException() + + event.respondWith(handleRequest(event.request)) +}) + +async function handleRequest(request) { + // An error here will return the origin response, as if the Worker wasn’t present. + // ... + return fetch(request) +} +``` diff --git a/products/workers/src/content/learning/metrics-and-analytics.md b/products/workers/src/content/learning/metrics-and-analytics.md index b8729621ce0..938459b2aec 100644 --- a/products/workers/src/content/learning/metrics-and-analytics.md +++ b/products/workers/src/content/learning/metrics-and-analytics.md @@ -1,5 +1,5 @@ --- -order: 11 +order: 12 pcx-content-type: concept --- diff --git a/products/workers/src/content/learning/security-model/index.md b/products/workers/src/content/learning/security-model/index.md index f81768dde03..279d3db0825 100644 --- a/products/workers/src/content/learning/security-model/index.md +++ b/products/workers/src/content/learning/security-model/index.md @@ -1,5 +1,5 @@ --- -order: 10 +order: 11 pcx-content-type: concept --- diff --git a/products/workers/src/content/learning/using-durable-objects.md b/products/workers/src/content/learning/using-durable-objects.md index 5912494bb10..5b1d63ccd69 100644 --- a/products/workers/src/content/learning/using-durable-objects.md +++ b/products/workers/src/content/learning/using-durable-objects.md @@ -1,5 +1,5 @@ --- -order: 8 +order: 9 pcx-content-type: concept --- diff --git a/products/workers/src/content/learning/using-streams.md b/products/workers/src/content/learning/using-streams.md index a13c0f3930a..53a403b4f22 100644 --- a/products/workers/src/content/learning/using-streams.md +++ b/products/workers/src/content/learning/using-streams.md @@ -1,5 +1,5 @@ --- -order: 7 +order: 8 pcx-content-type: concept --- diff --git a/products/workers/src/content/learning/using-websockets.md b/products/workers/src/content/learning/using-websockets.md index d688cee48c9..ec1f0bc0b1f 100644 --- a/products/workers/src/content/learning/using-websockets.md +++ b/products/workers/src/content/learning/using-websockets.md @@ -1,5 +1,5 @@ --- -order: 9 +order: 10 pcx-content-type: concept --- From 9764776a6223353d1b21f0eecf7fa6c1ce7055f2 Mon Sep 17 00:00:00 2001 From: Jon Kuperman Date: Thu, 19 Aug 2021 16:33:09 -0400 Subject: [PATCH 2/8] Apply suggestions from code review Co-authored-by: Kate Tungusova <70746074+deadlypants1973@users.noreply.github.com> Co-authored-by: Kristian Freeman --- .../src/content/learning/logging-workers.md | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/products/workers/src/content/learning/logging-workers.md b/products/workers/src/content/learning/logging-workers.md index 518447bf7e0..e8ccbd3c17f 100644 --- a/products/workers/src/content/learning/logging-workers.md +++ b/products/workers/src/content/learning/logging-workers.md @@ -7,7 +7,7 @@ pcx-content-type: concept You can access logs and exceptions for your Workers from the dashboard and via `wrangler tail`. -The Workers platform captures all `console.log`'s and uncaught exceptions, in addition to information about the event itself. All of this can be viewed with either `wrangler tail` or the dashboard. +The Workers platform captures all `console.log`'s and uncaught exceptions, in addition to information about the event itself. All of this can be viewed with either `wrangler tail` or on the dashboard through your **Account Home** > **Workers** > your **Workers script** > **Logs**. ## Adding custom logs @@ -33,7 +33,7 @@ async function handleRequest(request) { } ``` -If you deploy that, run `wrangler tail`, and then access the Worker, it will display: +After you deploy the above code, run `wrangler tail` in your terminal, and then access your Worker. It will display: ```sh ☁ logging-example [master] ⚡ wrangler tail --format=pretty @@ -45,7 +45,7 @@ If you deploy that, run `wrangler tail`, and then access the Worker, it will dis ## Accessing production logs with `wrangler tail` -With your Workers application deployed, you may want to inspect incoming traffic. This can be useful for situations where a user is running into issues or errors that you can’t reproduce. `wrangler tail` allows developers to “tail” their Workers application’s logs, giving you real-time access to information about incoming requests. +With your Workers application deployed, you may want to inspect incoming traffic. This can be useful for situations where a user is running into issues or errors that they cannot reproduce. `wrangler tail` allows developers to “tail” their Workers application’s logs, giving real-time access to information about incoming requests. To get started, run `wrangler tail` in your Workers project directory. This will log any incoming requests to your application available in your local terminal. @@ -82,13 +82,13 @@ You can customize how `wrangler tail` works to fit your needs: see [the docs](/c ## Accessing production logs with the dashboard -You can also view the production logs associated with any Worker from the [Cloudflare dashboard](https://dash.cloudflare.com?to=/:account/workers/overview). Click on any Worker and then click "Logs." Logging is available for all customers, including those on the free plan. +You can also view the production logs associated with any Worker by [logging into the Cloudflare dashboard](https://dash.cloudflare.com?to=/:account/workers/overview). From your **Account Home** > go to *Workers** > select your **Worker script** > and select **Logs**. Logging is available for all customers, from free to enterprise plans. A few things worth mentioning: -- These logs are not stored. You can start and stop the stream at any time to view them, but they do not persist. +- Workers logs are not stored. You can start and stop the stream at any time to view them, but they do not persist. - Logs will not display if the Worker's requests per second are over 200 for the last 5 minutes. -- Logs from any [Durable Objects](/learning/using-durable-objects) your Worker is using will show up here. +- Logs from any [Durable Objects](/learning/using-durable-objects) your Worker is using will show up in the dashboard. - A maximum of 10 clients can view a Worker's logs at one time. This can be a combination of either dashboard sessions or `wrangler tail` calls. -------------------------------- @@ -111,27 +111,27 @@ When a Worker running in production has an error that prevents it from returning -Other 11xx errors generally indicate a problem with the Workers runtime itself — please check our [status page](https://www.cloudflarestatus.com) if you see one. +Other 11xx errors generally indicate a problem with the Workers runtime itself — refer to the [status page](https://www.cloudflarestatus.com) if you are experiencing an error. -### Identifying error: Workers Metrics +### Identifying errors: Workers Metrics -Additionally, you can find out whether your application is experiencing any downtime, or returning any errors by navigating to Workers Metrics in the dashboard. +You can find out whether your application is experiencing any downtime, or returning any errors by navigating from *Account Home** > to **Workers** > your **Worker script** > **Metrics** in the dashboard. ### Debugging exceptions -Once you’ve identified your Workers application is returning exceptions, you can use `wrangler tail` to inspect, and fix the exceptions. +After you have identified your Workers application is returning exceptions, use `wrangler tail` to inspect, and fix the exceptions. -Exceptions will show up under the `exceptions` field in the JSON returned by `wrangler tail`. Once you’ve identified the exception that is causing errors, you may redeploy your code with a fix, and continue trailing the logs to confirm that it is indeed fixed. +Exceptions will show up under the `exceptions` field in the JSON returned by `wrangler tail`. After you have identified the exception that is causing errors, redeploy your code with a fix, and continue tailing the logs to confirm that it is fixed. ### Setup a logging service A Worker can make HTTP requests to any HTTP service on the public internet. You can use a service like [Sentry](https://sentry.io) to collect error logs from your Worker, by making an HTTP request to the service to report the error. Refer to your service’s API documentation for details on what kind of request to make. -When logging using this strategy, remember that outstanding asynchronous tasks are canceled as soon as a Worker finishes sending its main response body to the client. To ensure that a logging subrequest completes, you can pass the request promise to [`event.waitUntil()`](https://developer.mozilla.org/en-US/docs/Web/API/ExtendableEvent/waitUntil). For example: +When logging using this strategy, remember that outstanding asynchronous tasks are canceled as soon as a Worker finishes sending its main response body to the client. To ensure that a logging subrequest completes, pass the request promise to [`event.waitUntil()`](https://developer.mozilla.org/en-US/docs/Web/API/ExtendableEvent/waitUntil). For example: ```js addEventListener("fetch", event => { @@ -157,7 +157,7 @@ function postLog(data) { ### Go to Origin on Error -By using `event.passThroughOnException`, your Workers application will pass requests to your origin if it throws an exception. This allows you to add logging, tracking, or other features with Workers, without degrading your website’s functionality. +By using [`event.passThroughOnException`](/runtime-apis/fetch-event#methods), your Workers application will pass requests to your origin if it throws an exception. This allows you to add logging, tracking, or other features with Workers, without degrading your website’s functionality. ```js addEventListener("fetch", event => { From 770662985ed8724396ce45a52a48e2ade5ad7dfa Mon Sep 17 00:00:00 2001 From: Jon Kuperman Date: Thu, 19 Aug 2021 16:50:31 -0400 Subject: [PATCH 3/8] add screenshot --- .../src/content/learning/logging-workers.md | 5 ++++- .../media/workers-logging-dashboard.png | Bin 0 -> 93088 bytes 2 files changed, 4 insertions(+), 1 deletion(-) create mode 100644 products/workers/src/content/learning/media/workers-logging-dashboard.png diff --git a/products/workers/src/content/learning/logging-workers.md b/products/workers/src/content/learning/logging-workers.md index e8ccbd3c17f..ebe9ca5322b 100644 --- a/products/workers/src/content/learning/logging-workers.md +++ b/products/workers/src/content/learning/logging-workers.md @@ -11,12 +11,13 @@ The Workers platform captures all `console.log`'s and uncaught exceptions, in ad ## Adding custom logs -Here is an example of a Worker with a `console.log` inside the request handler. +You can add custom logs to your Worker with console.log. Any console.log's you add will show up in both the dashboard and wrangler tail. Here is an example of a Worker with a custom log inside the request handler. ```js addEventListener('fetch', event => { event.respondWith(handleRequest(event.request)) }) + /** * Respond with hello worker text * @param {Request} request @@ -84,6 +85,8 @@ You can customize how `wrangler tail` works to fit your needs: see [the docs](/c You can also view the production logs associated with any Worker by [logging into the Cloudflare dashboard](https://dash.cloudflare.com?to=/:account/workers/overview). From your **Account Home** > go to *Workers** > select your **Worker script** > and select **Logs**. Logging is available for all customers, from free to enterprise plans. +![Cloudflare dashboard showing Workers logs](./media/workers-logging-dashboard.png) + A few things worth mentioning: - Workers logs are not stored. You can start and stop the stream at any time to view them, but they do not persist. diff --git a/products/workers/src/content/learning/media/workers-logging-dashboard.png b/products/workers/src/content/learning/media/workers-logging-dashboard.png new file mode 100644 index 0000000000000000000000000000000000000000..152b15c102422582b2432240dd614f8c990cfe6e GIT binary patch literal 93088 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

Qz(OPlQ>tSF;@32!ux4G;S( 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 z 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 PcAV7I*LbC78T@|$K0+?Z literal 0 HcmV?d00001 From 96c19e6d2b2ceac55f880877f609b317ea0cea64 Mon Sep 17 00:00:00 2001 From: Jon Kuperman Date: Thu, 19 Aug 2021 16:52:46 -0400 Subject: [PATCH 4/8] nice rephrase from review --- products/workers/src/content/learning/logging-workers.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/products/workers/src/content/learning/logging-workers.md b/products/workers/src/content/learning/logging-workers.md index ebe9ca5322b..e3d74a0de28 100644 --- a/products/workers/src/content/learning/logging-workers.md +++ b/products/workers/src/content/learning/logging-workers.md @@ -11,7 +11,7 @@ The Workers platform captures all `console.log`'s and uncaught exceptions, in ad ## Adding custom logs -You can add custom logs to your Worker with console.log. Any console.log's you add will show up in both the dashboard and wrangler tail. Here is an example of a Worker with a custom log inside the request handler. +Any `console.log` statements within your Worker will appear within `wrangler tail` and the dashboard output. The following example demonstrates a custom `console.log` within a Worker request handler. ```js addEventListener('fetch', event => { From 00a3ce579a0a1f180eb57524b4f238eb3fa52957 Mon Sep 17 00:00:00 2001 From: Jon Kuperman Date: Thu, 19 Aug 2021 16:54:13 -0400 Subject: [PATCH 5/8] Apply suggestions from code review Co-authored-by: Luke Edwards --- .../src/content/learning/logging-workers.md | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/products/workers/src/content/learning/logging-workers.md b/products/workers/src/content/learning/logging-workers.md index e3d74a0de28..6428e43a4ae 100644 --- a/products/workers/src/content/learning/logging-workers.md +++ b/products/workers/src/content/learning/logging-workers.md @@ -46,7 +46,7 @@ After you deploy the above code, run `wrangler tail` in your terminal, and then ## Accessing production logs with `wrangler tail` -With your Workers application deployed, you may want to inspect incoming traffic. This can be useful for situations where a user is running into issues or errors that they cannot reproduce. `wrangler tail` allows developers to “tail” their Workers application’s logs, giving real-time access to information about incoming requests. +With your Workers application deployed, you may want to inspect incoming traffic. This may be useful in situations where a user is running into production issues that you cannot easily reproduce. In these instances, `wrangler tail` allows developers to “tail” their Workers application’s logs, giving real-time insight into their application's incoming requests. To get started, run `wrangler tail` in your Workers project directory. This will log any incoming requests to your application available in your local terminal. @@ -83,7 +83,7 @@ You can customize how `wrangler tail` works to fit your needs: see [the docs](/c ## Accessing production logs with the dashboard -You can also view the production logs associated with any Worker by [logging into the Cloudflare dashboard](https://dash.cloudflare.com?to=/:account/workers/overview). From your **Account Home** > go to *Workers** > select your **Worker script** > and select **Logs**. Logging is available for all customers, from free to enterprise plans. +You can also view the production logs associated with any Worker by [logging into the Cloudflare dashboard](https://dash.cloudflare.com?to=/:account/workers/overview). From your **Account Home** > go to *Workers** > select your **Worker script** > and select **Logs**. Logging is available for all customers, including those on the free plan. ![Cloudflare dashboard showing Workers logs](./media/workers-logging-dashboard.png) @@ -114,7 +114,7 @@ When a Worker running in production has an error that prevents it from returning -Other 11xx errors generally indicate a problem with the Workers runtime itself — refer to the [status page](https://www.cloudflarestatus.com) if you are experiencing an error. +Other `11xx` errors generally indicate a problem with the Workers runtime itself. Please refer to the [status page](https://www.cloudflarestatus.com) if you are experiencing an error. ### Identifying errors: Workers Metrics @@ -124,7 +124,7 @@ You can find out whether your application is experiencing any downtime, or retur ### Debugging exceptions -After you have identified your Workers application is returning exceptions, use `wrangler tail` to inspect, and fix the exceptions. +After you have identified your Workers application is returning exceptions, use `wrangler tail` to inspect and fix the exceptions. @@ -134,7 +134,7 @@ Exceptions will show up under the `exceptions` field in the JSON returned by `wr A Worker can make HTTP requests to any HTTP service on the public internet. You can use a service like [Sentry](https://sentry.io) to collect error logs from your Worker, by making an HTTP request to the service to report the error. Refer to your service’s API documentation for details on what kind of request to make. -When logging using this strategy, remember that outstanding asynchronous tasks are canceled as soon as a Worker finishes sending its main response body to the client. To ensure that a logging subrequest completes, pass the request promise to [`event.waitUntil()`](https://developer.mozilla.org/en-US/docs/Web/API/ExtendableEvent/waitUntil). For example: +When using an external logging strategy, remember that outstanding asynchronous tasks are canceled as soon as a Worker finishes sending its main response body to the client. To ensure that a logging subrequest completes, pass the request promise to [`event.waitUntil()`](https://developer.mozilla.org/en-US/docs/Web/API/ExtendableEvent/waitUntil). For example: ```js addEventListener("fetch", event => { @@ -144,8 +144,7 @@ addEventListener("fetch", event => { async function handleEvent(event) { // ... - // Without event.waitUntil(), our fetch() to our logging service may - // or may not complete. + // Without event.waitUntil(), the `postLog` function may or may not complete. event.waitUntil(postLog(stack)) return fetch(event.request) } @@ -160,12 +159,11 @@ function postLog(data) { ### Go to Origin on Error -By using [`event.passThroughOnException`](/runtime-apis/fetch-event#methods), your Workers application will pass requests to your origin if it throws an exception. This allows you to add logging, tracking, or other features with Workers, without degrading your website’s functionality. +By using [`event.passThroughOnException`](/runtime-apis/fetch-event#methods), a Workers application will forward requests to your origin if an exception is thrown during the Worker's execution. This allows you to add logging, tracking, or other features with Workers, without degrading your website’s functionality. ```js addEventListener("fetch", event => { event.passThroughOnException() - event.respondWith(handleRequest(event.request)) }) From 22afdf0363ebac633c3d781e7136944e4a54332f Mon Sep 17 00:00:00 2001 From: Jon Kuperman Date: Thu, 19 Aug 2021 20:15:29 -0400 Subject: [PATCH 6/8] Apply suggestions from code review Co-authored-by: Ashcon Partovi --- products/workers/src/content/learning/logging-workers.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/products/workers/src/content/learning/logging-workers.md b/products/workers/src/content/learning/logging-workers.md index 6428e43a4ae..b033b607fe3 100644 --- a/products/workers/src/content/learning/logging-workers.md +++ b/products/workers/src/content/learning/logging-workers.md @@ -5,7 +5,7 @@ pcx-content-type: concept # Logging from Workers -You can access logs and exceptions for your Workers from the dashboard and via `wrangler tail`. +You can access logs and exceptions for your Workers using the dashboard or `wrangler tail`. The Workers platform captures all `console.log`'s and uncaught exceptions, in addition to information about the event itself. All of this can be viewed with either `wrangler tail` or on the dashboard through your **Account Home** > **Workers** > your **Workers script** > **Logs**. @@ -24,7 +24,7 @@ addEventListener('fetch', event => { */ async function handleRequest(request) { const { cf } = request - const { city, country } = cf + const { city, country } = cf console.log(`Request came from city: ${city} in country: ${country}`); @@ -44,7 +44,7 @@ After you deploy the above code, run `wrangler tail` in your terminal, and then | [Info] Request came from city: Pacifica in country: US ``` -## Accessing production logs with `wrangler tail` +## View logs using `wrangler tail` With your Workers application deployed, you may want to inspect incoming traffic. This may be useful in situations where a user is running into production issues that you cannot easily reproduce. In these instances, `wrangler tail` allows developers to “tail” their Workers application’s logs, giving real-time insight into their application's incoming requests. @@ -81,7 +81,7 @@ $ wrangler tail | jq .event.request.url You can customize how `wrangler tail` works to fit your needs: see [the docs](/cli-wrangler/commands#tail) for available configuration options. -## Accessing production logs with the dashboard +## View logs from the dashboard You can also view the production logs associated with any Worker by [logging into the Cloudflare dashboard](https://dash.cloudflare.com?to=/:account/workers/overview). From your **Account Home** > go to *Workers** > select your **Worker script** > and select **Logs**. Logging is available for all customers, including those on the free plan. From d81b62e1f90a4cefc3999ed575e6fa000cbade2b Mon Sep 17 00:00:00 2001 From: Jon Kuperman Date: Fri, 20 Aug 2021 12:05:00 -0400 Subject: [PATCH 7/8] Apply suggestions from code review Co-authored-by: Kate Tungusova <70746074+deadlypants1973@users.noreply.github.com> --- .../src/content/learning/logging-workers.md | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/products/workers/src/content/learning/logging-workers.md b/products/workers/src/content/learning/logging-workers.md index b033b607fe3..29709fd9189 100644 --- a/products/workers/src/content/learning/logging-workers.md +++ b/products/workers/src/content/learning/logging-workers.md @@ -5,7 +5,7 @@ pcx-content-type: concept # Logging from Workers -You can access logs and exceptions for your Workers using the dashboard or `wrangler tail`. +You can access logs and exceptions for your Workers using the dashboard or [`wrangler tail`](/cli-wrangler/commands#tail). The Workers platform captures all `console.log`'s and uncaught exceptions, in addition to information about the event itself. All of this can be viewed with either `wrangler tail` or on the dashboard through your **Account Home** > **Workers** > your **Workers script** > **Logs**. @@ -46,7 +46,7 @@ After you deploy the above code, run `wrangler tail` in your terminal, and then ## View logs using `wrangler tail` -With your Workers application deployed, you may want to inspect incoming traffic. This may be useful in situations where a user is running into production issues that you cannot easily reproduce. In these instances, `wrangler tail` allows developers to “tail” their Workers application’s logs, giving real-time insight into their application's incoming requests. +With your Workers application deployed, you may want to inspect incoming traffic. This may be useful in situations where a user is running into production issues that they cannot easily reproduce. In these instances, `wrangler tail` allows developers to “tail” their Workers application’s logs, giving real-time insight into their application's incoming requests. To get started, run `wrangler tail` in your Workers project directory. This will log any incoming requests to your application available in your local terminal. @@ -79,11 +79,11 @@ $ wrangler tail | jq .event.request.url "https://www.bytesized.xyz/page-data/app-data.json" ``` -You can customize how `wrangler tail` works to fit your needs: see [the docs](/cli-wrangler/commands#tail) for available configuration options. +You can customize how `wrangler tail` works to fit your needs: refer to [the `wrangler tail` documentation](/cli-wrangler/commands#tail) for available configuration options. ## View logs from the dashboard -You can also view the production logs associated with any Worker by [logging into the Cloudflare dashboard](https://dash.cloudflare.com?to=/:account/workers/overview). From your **Account Home** > go to *Workers** > select your **Worker script** > and select **Logs**. Logging is available for all customers, including those on the free plan. +You can review the production logs associated with any Worker by [logging into the Cloudflare dashboard](https://dash.cloudflare.com?to=/:account/workers/overview). From your **Account Home** > go to *Workers** > select your **Worker script** > and select **Logs**. Logging is available for all customers, including those on the free plan. ![Cloudflare dashboard showing Workers logs](./media/workers-logging-dashboard.png) @@ -114,11 +114,11 @@ When a Worker running in production has an error that prevents it from returning -Other `11xx` errors generally indicate a problem with the Workers runtime itself. Please refer to the [status page](https://www.cloudflarestatus.com) if you are experiencing an error. +Other `11xx` errors generally indicate a problem with the Workers runtime itself. Refer to the [status page](https://www.cloudflarestatus.com) if you are experiencing an error. ### Identifying errors: Workers Metrics -You can find out whether your application is experiencing any downtime, or returning any errors by navigating from *Account Home** > to **Workers** > your **Worker script** > **Metrics** in the dashboard. +You can find out whether your application is experiencing any downtime, or returning any errors by navigating from **Account Home** > to **Workers** > your **Worker script** > **Metrics** in the dashboard. @@ -130,9 +130,9 @@ After you have identified your Workers application is returning exceptions, use Exceptions will show up under the `exceptions` field in the JSON returned by `wrangler tail`. After you have identified the exception that is causing errors, redeploy your code with a fix, and continue tailing the logs to confirm that it is fixed. -### Setup a logging service +### Set up a logging service -A Worker can make HTTP requests to any HTTP service on the public internet. You can use a service like [Sentry](https://sentry.io) to collect error logs from your Worker, by making an HTTP request to the service to report the error. Refer to your service’s API documentation for details on what kind of request to make. +A Worker can make HTTP requests to any HTTP service on the public Internet. You can use a service like [Sentry](https://sentry.io) to collect error logs from your Worker, by making an HTTP request to the service to report the error. Refer to your service’s API documentation for details on what kind of request to make. When using an external logging strategy, remember that outstanding asynchronous tasks are canceled as soon as a Worker finishes sending its main response body to the client. To ensure that a logging subrequest completes, pass the request promise to [`event.waitUntil()`](https://developer.mozilla.org/en-US/docs/Web/API/ExtendableEvent/waitUntil). For example: @@ -157,9 +157,9 @@ function postLog(data) { } ``` -### Go to Origin on Error +### Go to origin on error -By using [`event.passThroughOnException`](/runtime-apis/fetch-event#methods), a Workers application will forward requests to your origin if an exception is thrown during the Worker's execution. This allows you to add logging, tracking, or other features with Workers, without degrading your website’s functionality. +By using [`event.passThroughOnException`](/runtime-apis/fetch-event#methods), a Workers application will forward requests to your origin if an exception is thrown during the Worker's execution. This allows you to add logging, tracking, or other features with Workers, without degrading your application's functionality. ```js addEventListener("fetch", event => { From bfcf5c1619054ec34b4774a4434837f2d61d2745 Mon Sep 17 00:00:00 2001 From: Jon Kuperman Date: Fri, 20 Aug 2021 12:07:32 -0400 Subject: [PATCH 8/8] Update copy from PR review --- products/workers/src/content/learning/logging-workers.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/products/workers/src/content/learning/logging-workers.md b/products/workers/src/content/learning/logging-workers.md index 29709fd9189..de118d62d57 100644 --- a/products/workers/src/content/learning/logging-workers.md +++ b/products/workers/src/content/learning/logging-workers.md @@ -34,7 +34,7 @@ async function handleRequest(request) { } ``` -After you deploy the above code, run `wrangler tail` in your terminal, and then access your Worker. It will display: +After you deploy the above code, run `wrangler tail` in your terminal, and then access your Worker. Your terminal will display: ```sh ☁ logging-example [master] ⚡ wrangler tail --format=pretty