Home > Enterprise >  Custom logging from firebase function
Custom logging from firebase function

Time:01-21

I'm trying to follow this guide to put some custom logging into a firebase function. The function itself is running, and I can see the data being passed in (it's an https 'callable' function). But as soon as it hits the line where it tries to actually write that log entry, I get "Error: 7 PERMISSION_DENIED"

Since the console.log() calls write to the cloud logs, I'd assumed the firebase function has access to Cloud Logging. But perhaps it needs additional permission? I can't find any reference to where this should be set on that page though.

// Logging, logName, region, functions are provided by the surrounding app

const logging = new Logging()
const log = logging.log(logName)
const METADATA = {
  resource: {
    type: 'cloud_function',
    labels: {
      function_name: 'CustomLog',
      region
    }
  }
};

exports = module.exports = functions.https.onCall(async data => {
  const exVersion = 6
  const exId = data.exId

  console.log('***** exVersion:', exVersion, 'exId:', exId)  // exId from caller
  
  const entry = log.entry(METADATA, data.error)  // data.error from caller
  console.log('METADATA:', METADATA)  // Shows in Logs Explorer
  console.log('entry:', entry)  // Shows in Logs Explorer

  log.write(entry)  // Results in Error: 7 PERMISSION_DENIED

  return {
    exVersion,
    exId,
  }
})

If I run it from the CLI using firebase function:shell, the log entry is created correctly, so I'm pretty confident the code is correct.

CodePudding user response:

According to the Firebase documentation page you have linked:

The recommended solution for logging from a function is to use the logger SDK. You can instead use standard JavaScript logging calls such as console.log and console.error, but you first need to require a special module to patch the standard methods to work correctly:

require("firebase-functions/lib/logger/compat");

Once you have required the logger compatibility module, you can use console.log() methods as normal in your code.

Thus you might to require this library, however I am not sure this is producing your "Error: 7 PERMISSION_DENIED error, but you might also try some solutions that have worked for some members of the community.

CodePudding user response:

Perhaps the logging API is not enabled in your project. You'll get a permission denied error when attempting to use it in that case.

It's a couple levels in, but the guide you linked points to https://github.com/googleapis/nodejs-logging#before-you-begin, which includes a step to "Enable the Cloud Logging API"

  •  Tags:  
  • Related