Logging and Debugging
Logging
Yoga uses 4 log levels debug, info, warn and error. By default, Yoga will only log info, warn and error messages.
Log Level Overview
error
- Only log unexpected errors
warn
- All prior log levels
- deprecation notices
info
- All prior log levels
- Information about the current state of the system
debug
- All prior log levels
- Processing of GraphQL parameters
- Parsing of GraphQL parameters
- Execution or subscription start
- Received GraphQL operation variables
- Execution or subscription end
- GraphiQL rendering
- Health checks
Enabling Debug Logging
Instead, on JavaScript environments that support environment variables via
process.env (e.g. Node.js), you can also conditionally enable debug
logging by setting the DEBUG environment variable to 1.
import { createYoga } from 'graphql-yoga'
import { createServer } from 'node:http'
import { schema } from './my-schema.js'
const yoga = createYoga({
schema,
logging: 'debug'
})Change log level
You can customize the log lovel by passing on of the 4 levels to the logging option:
We recommend not changing the default log level and only recommend changing it if you know what you are doing.
import { createYoga } from 'graphql-yoga'
import { createServer } from 'node:http'
import { schema } from './my-schema.js'
const yoga = createYoga({
schema,
logging: 'warn'
})Specifying the log level of warn will only log warn and error messages being logged.
Custom logger
You can of course provide your own logger for piping to your favorite logging service/utility:
import { createYoga } from 'graphql-yoga'
import { createServer } from 'node:http'
import { schema } from './my-schema.js'
import { logger } from './my-logger.js'
const yoga = createYoga({
schema,
logging: {
debug(...args) {
logger.debug(...args)
},
info(...args) {
logger.info(...args)
},
warn(...args) {
logger.warn(...args)
},
error(...args) {
logger.error(...args)
}
}
})
const server = createServer(yoga)
server.listen(4000, () => {
console.info('Server is running on http://localhost:4000/graphql')
})Further hook into the logging system by leveraging envelop's useLogger plugin:
import { createYoga, useLogger } from 'graphql-yoga'
import { createServer } from 'node:http'
import { schema } from './my-schema'
import { logger } from './my-logger'
const yoga = createYoga({
schema,
plugins: [
useLogger({
logFn: (eventName, args) => {
// Event could be execute-start / execute-end / subscribe-start / subscribe-end / etc.
// args will include the arguments passed to execute/subscribe (in case of "start" event) and additional result in case of "end" event.
logger.debug(eventName, ...args)
}
})
]
})
const server = createServer(yoga)
server.listen(4000, () => {
console.info('Server is running on http://localhost:4000/graphql')
})