All Projects → poppinss → fancy-logs

poppinss / fancy-logs

Licence: MIT license
Print fancy logs to the terminal

Programming Languages

typescript
32286 projects
javascript
184084 projects - #8 most used programming language

Projects that are alternatives of or similar to fancy-logs

ink
A Logger backend that logs JSON
Stars: ✭ 64 (+357.14%)
Mutual labels:  logger
Loggaby
📝 A simple, lightweight and customizable logger.
Stars: ✭ 20 (+42.86%)
Mutual labels:  logger
jcabi-log
Static Wrapper of SLF4J easing you from the necessity to create static LOGGER instances in each Java class
Stars: ✭ 53 (+278.57%)
Mutual labels:  logger
ratlog.js
🐀 Ratlog JavaScript library - Application Logging for Rats, Humans and Machines
Stars: ✭ 24 (+71.43%)
Mutual labels:  logger
guzzle-logger
Automatically log all API calls
Stars: ✭ 42 (+200%)
Mutual labels:  logger
react-native-log-ios
React Native iOS standalone logger
Stars: ✭ 37 (+164.29%)
Mutual labels:  logger
Smoke
A pure, flexible, extendable log library for Android.
Stars: ✭ 12 (-14.29%)
Mutual labels:  logger
rest-api-node-typescript
This is a simple REST API with node and express with typescript
Stars: ✭ 154 (+1000%)
Mutual labels:  logger
android-sdk
AppSpector is a debugging service for mobile apps
Stars: ✭ 39 (+178.57%)
Mutual labels:  logger
ErrorHeroModule
💎 A Hero for your Zend Framework/Laminas, and Expressive/Mezzio application to log ( DB and Mail ) and handle php errors & exceptions during Mvc process/between request and response
Stars: ✭ 47 (+235.71%)
Mutual labels:  logger
klog
KLog is a multiplatform free hamradio logger. It runs natively on Linux, macOS and Windows.
Stars: ✭ 31 (+121.43%)
Mutual labels:  logger
node-perj
A fast, flexible JSON logger.
Stars: ✭ 16 (+14.29%)
Mutual labels:  logger
KmLogging
Kotlin multiplatform logging. High performance, composable and simple to use.
Stars: ✭ 21 (+50%)
Mutual labels:  logger
log
PSR-3 compatible logger
Stars: ✭ 32 (+128.57%)
Mutual labels:  logger
Multiplatform-Log
Kotlin Multi Platform Logger, for android an ios : Logcat & print
Stars: ✭ 49 (+250%)
Mutual labels:  logger
eo-logger
Isomorphic JavaScript logger based on Elastic Common Schema
Stars: ✭ 21 (+50%)
Mutual labels:  logger
webpack-log
A logger for the Webpack ecosystem
Stars: ✭ 18 (+28.57%)
Mutual labels:  logger
forcelog
A structured, extensible logger for Salesforce Apex
Stars: ✭ 37 (+164.29%)
Mutual labels:  logger
management tools
A collection of scripts and packages to simplify OS X management.
Stars: ✭ 93 (+564.29%)
Mutual labels:  logger
flor
FLOR: Fast Low-Overhead Recovery. FLOR lets you log ML training data post-hoc, with hindsight.
Stars: ✭ 123 (+778.57%)
Mutual labels:  logger

Fancy Logger

Fancy logger used by AdonisJS CLI apps

circleci-image typescript-image npm-image license-image

Fancy logger for logging colorful messages with consistent UI output. AdonisJs has various command line utilities including ace. (A framework to create CLI applications). We make use of this module to make sure that all parts of the framework output logs with consistent formatting.

A big thanks to the creator of signale for being an inspiration for this module.

We didn't used signale coz of following reasons:

  1. AdonisJs uses kleur for colorizing strings and signale uses chalk. We want to avoid loading different color libraries.
  2. Signale has too many features that we don't need.

Table of contents

Installation

Install the package from npm registry as follows:

npm i @poppinss/fancy-logs

# yarn
yarn add @poppinss/fancy-logs

Usage

Import and use the logger as follows

import fancyLogger from '@poppinss/fancy-logs'

fancyLogger.success('Operation successful')
fancyLogger.info('Hello from L59')
fancyLogger.pending('Write release notes for %s', '1.2.0')
fancyLogger.fatal(new Error('Unable to acquire lock'))
fancyLogger.watch('Recursively watching build directory...')
fancyLogger.complete({
  prefix: '[task]',
  message: 'Fix issue #59',
})

Using a custom instance

import { Logger } from '@poppinss/fancy-logs'

/**
 * Disable underlines and icons
 */
const fancyLogger = new Logger({
  underline: false,
  icon: false,
  color: true,
})

Deferred logs

When running CLI tasks from 3rd party plugins, you may end in a situation where multiple plugins will print the same log messages. For example:

Plugin A updates tsconfig.json

logger.update('tsconfig.json')

Plugin B update tsconfig.json with a different option but logs the same message

logger.update('tsconfig.json')

After this the CLI will reflect 2 lines saying update tsconfig.json. You can avoid this behavior by pausing and resuming the logger.

logger.pauseLogger()

runPluginA()
runPluginB()

const logsSet = new Set()
logger.resumeLogger((message) => {
  if (logsSet.has(message.message)) {
    return false
  }

  logsSet.add(message.message)
  return true
})

The callback passed to resumeLogger must return true when it wants to print a message and false for opposite behavior.

Testing log messages

You can also safely test the log messages by creating an instance with fake=true. For example:

import { Logger } from '@poppinss/fancy-logs'

const logger = new Logger({ fake: true })

logger.warn('Fire in the hole')
logger.info('Account created')

assert.deepEqual(logger.logs, [
  'underline(yellow(warn)) Fire in the hole',
  'underline(blue(info)) Account created',
])
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].