johnpapa / lite-server

Lightweight node server
MIT License
2.32k stars 269 forks source link

How to stop verbose output to the console #73

Open areijngoudt opened 8 years ago

areijngoudt commented 8 years ago

I have lite-server setup in package.json:

"scripts": {
    "start": "concurrently \"npm run tsc:w\" \"npm run scss:w\" \"npm run lite\" ",
    "tsc": "tsc --inlineSourceMap --allowSyntheticDefaultImports -outDir .build/js",
    "tsc:w": "tsc -w --inlineSourceMap --allowSyntheticDefaultImports -outDir .build/js",
    "scss": "node-sass --include-path styles/app.scss .build/css/app.css",
    "scss:w": "node-sass -w --include-path styles styles/app.scss .build/css/app.css",
    "lite": "lite-server -c bs-config.json",
    "typings": "typings",
    "postinstall": "typings install"
  },

with the following bs-config.json file:

{
    "notify": false,
    "files": ["./.build/css/*.css", "./.build/js/**/*.js", "./app/**/*.{html,css}", "index.html"],
    "injectChanges": true,
    "logLevel": "silent",
    "debugInfo": false,
    "ghostMode": false,
     "server": { "baseDir": "." }
}

Upon starting I see that the bs-config.json configuration is written to te console:

** browser-sync config **
[2] { injectChanges: true,
[2]   files: 
[2]    [ './.build/css/*.css',
[2]      './.build/js/**/*.js',
[2]      './app/**/*.{html,css}',
[2]      'index.html' ],
[2]   watchOptions: { ignored: 'node_modules' },
[2]   server: { baseDir: '.', middleware: [ [Function], [Function] ] },
[2]   notify: false,
[2]   logLevel: 'silent',
[2]   debugInfo: false,
[2]   ghostMode: false }
[0] 8:02:46 AM - Compilation complete. Watching for file changes.

Since the logLevel is set to silent, I expect to see very little info in the console. However, each and every get is displayed:

[2] 16.04.23 08:02:50 200 GET /index.html
[2] 16.04.23 08:02:50 304 GET /node_modules/bootstrap/dist/css/bootstrap.min.css
[2] 16.04.23 08:02:50 304 GET /node_modules/font-awesome/css/font-awesome.min.css
[2] 16.04.23 08:02:50 304 GET /node_modules/ng2-notify/dist/css/ng2notify.css
[2] 16.04.23 08:02:50 304 GET /.build/css/app.css
[2] 16.04.23 08:02:50 304 GET /node_modules/es6-shim/es6-shim.min.js
[2] 16.04.23 08:02:50 304 GET /node_modules/angular2/bundles/angular2-polyfills.js
[2] 16.04.23 08:02:50 304 GET /node_modules/systemjs/dist/system-polyfills.js
[2] 16.04.23 08:02:50 304 GET /node_modules/angular2/es6/dev/src/testing/shims_for_IE.js
[2] 16.04.23 08:02:50 304 GET /node_modules/systemjs/dist/system.src.js
[2] 16.04.23 08:02:50 304 GET /node_modules/rxjs/bundles/Rx.js
[2] 16.04.23 08:02:50 304 GET /node_modules/angular2/bundles/angular2.dev.js
etc...

Environment

raphaelparent commented 8 years ago

:+1: would love to have a way to hide those logs.

terciodemelo commented 8 years ago

I'd recommend to write your "lite" script like that: "lite": "lite-server -c bs-config.json > /dev/null", It works fine to me

houbenbert commented 8 years ago

If you do not want to see all HTTP requests, you will need to disable the logging middleware as described in README.md.

So in stead of a bs-config.json , use a bs-config.js file like this one:

module.exports = {
  logLevel: "silent",
  server: {
    middleware: {
      0: null
    }
  }
};

the 0:null clears out the first middleware, which is the logger. You might still want to set the logLevel to "silent" or "debug" as well, since browsersync by itself can be quite verbose as well

GabrielDelepine commented 8 years ago

Personally I wanted to keep the middleware logger, but hide the success response. So I finally use npm start |grep -v "200" |grep -v "304"

lasanthabandara commented 8 years ago

Thanks @houbenbert ! works like a charm!

rbosneag commented 7 years ago

Thanks @GabrielDelepine, exactly what I needed!

fromcouch commented 7 years ago

Any change to remove 200 and 304 code natively?

I have the same behaviour and I wish to made via bs-config.

Thanks

hamioraz commented 7 years ago

A quick hack: lite-server configures the http request logger in lib\config-defaults.js which in turn uses the module 'connect-logger'

var log = require('connect-logger')

Intercept log messages by putting a wrapper around the log function:

var proxy = function(options) {

    console.log('Proxy logger');
    var targetLog = log(options);

    return function(req, res, next) {
        var originalEnd = res.end;
        var targetNext = targetLog(req, res, next);

        //res.end is now a new function
        var targetEnd = res.end;

        res.end = function(chunk, encoding) {
            if (res.statusCode === 200 || res.statusCode === 304) {
                res.end = originalEnd;
                res.end(chunk, encoding);
                return undefined;
            } else {
                return targetEnd(chunk, encoding);
            }
        };
        return targetNext;
    };
}

And in the middleware config replace log() with proxy():

proxy({ format: '%date %status %method %url' })

A bit painful because of the nesting hell. Probably a simpler solution but works for me