DEV Community

James
James

Posted on

2 2

Netlify build logging with Datadog

Netlify's build plugins allow us to to perform a variety of custom build/deploy related tasks. One such task might be to log deployment status in Datadog for analysis. Thankfully this is easy using agent-less logging.

Here's what a simple log plugin might look like.

const createLogger = require('./logger');

module.exports = {
  onSuccess: async ({ inputs: { service } }) => {
    const logger = createLogger({ service });
    logger.info('Deploy successful');
    await logger.send();
  },

  onError: async ({ inputs: { service } }) => {
    let logger = createLogger({ service });
    logger.info('Deploy failed');
    await logger.send();
  },
};

Enter fullscreen mode Exit fullscreen mode

And below, a logger implementation using Winston.

const {
  env: { DATADOG_API_KEY, VERSON, ENVIRONMENT },
} = require('process');

function createLogger({ service }) {
  const { createLogger, format, transports } = require('winston');
  const queryString = require('query-string');
  const { combine, json, timestamp } = format;

  const query = queryString.stringify(
    {
      ddsource: `nodejs`,
      service,
      ddtags: [`env:${ENVIRONMENT)}`, `releaseVersion:${VERSON)}`],
    },
    { arrayFormat: 'comma' },
  );

  const httpTransportOptions = {
    host: 'http-intake.logs.datadoghq.com',
    path: `/v1/input/${DATADOG_API_KEY}?${query}`,
    format: combine(timestamp(), json()),
    ssl: true,
  };

  const logger = createLogger({
    level: 'info',
    exitOnError: false,
    transports: [new transports.Http(httpTransportOptions)],
  });

  return {
    info: (...args) => logger.info(...args),
    send: () => {
      const completePromise = new Promise((resolve) => {
        logger.on('finish', () => {
          clearTimeout(timeout);
          console.log(`Successfully sent logs to Datadog`);
          resolve(true);
        });
      });

      logger.end();
      return completePromise;
    },
  };
}
Enter fullscreen mode Exit fullscreen mode

SurveyJS custom survey software

Build Your Own Forms without Manual Coding

SurveyJS UI libraries let you build a JSON-based form management system that integrates with any backend, giving you full control over your data with no user limits. Includes support for custom question types, skip logic, an integrated CSS editor, PDF export, real-time analytics, and more.

Learn more

Top comments (0)

SurveyJS custom survey software

JavaScript Form Builder UI Component

Generate dynamic JSON-driven forms directly in your JavaScript app (Angular, React, Vue.js, jQuery) with a fully customizable drag-and-drop form builder. Easily integrate with any backend system and retain full ownership over your data, with no user or form submission limits.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay