9

I've written a standard express server with Nodejs and Winston logger. For some reason, the log output is written both to console and the designated log file.

Every line in the code:

winston.log('info', '**************************************');

Is written to both console and log file.

Why is this happening?

He is my code:

var express = require('express');
var bodyParser = require('body-parser');
var mysql = require ('mysql');
var winston = require('winston');

var app = express();

//Init Winston logger, max file size 5MB with 10 file retention
winston.add(winston.transports.File, { filename: './logs/eclipse_server.log', level: 'info',handleExceptions: true,
            maxsize: 5242880,maxFiles: 10});

winston.log('info', '**************************************');
winston.log('info', 'Eclipse web server - start up process');
winston.log('info', 'Express server mode initialized');                 
winston.log('info', 'Initialize database connection');
var connection = mysql.createConnection({
    host: '127.0.0.1',
    user: 'root',
    password: '12345678',
    database: 'project_eclipse',
    port: 3306 });

    winston.log('info', 'Database connection initialized');
    winston.log('info', 'Database connection attempted');
    connection.connect(function(err){
    if(!err) { 
        winston.log('info', 'Database connection success - connected'); 
    } else {
        winston.log('error', 'Database connection - failed');   
        winston.log('error', err);
    }
    }); 


// instruct the app to use the `bodyParser()` middleware for all routes

winston.log('info', 'using bodyParser()');  
app.use(bodyParser());
winston.log('info', 'using bodyParser.text()'); 
app.use(bodyParser.text());
winston.log('info', 'initialize HTML directory');
app.use(express.static(__dirname + '/public'));
winston.log('info', 'initialized HTML directory');

app.post('/', function(request, response){
    winston.log('info', 'In game POST login request recieved');
    var usr = request.body.usr;
    var pass = request.body.pass;

    //var client_ip = req.header('x-forwarded-for') || req.connection.remoteAddress;

    winston.log('info', 'login request recieved from  '+usr);

    connection.query('SELECT * FROM eclipse_users WHERE username=? AND password = md5(?)', [ usr, pass ], function(err, rows, fields) {

      if (!err)
      {
        var n_rows = rows.length;
         if(n_rows==1)
         {   
            //user exists
            winston.log('info', 'user exists - response will be send');
            response.json({msg:'user exists'});
            winston.log('info', 'user exists - response sent');
         }
        else
        {
            //user not found
            winston.log('info', 'user not found - response will be send');
            response.json({msg:'user does not exist'});
            winston.log('info', 'user not found - response sent');
        }
      }
     else
        //SQL query error
        {
        winston.log('error', 'Error while performing select query');    
        winston.log('error', err);
        connection.end();}
      });
});

app.post('/weblogin', function(request, response){

    winston.log('info', 'web POST login request recieved');
    var usr = request.body.usr;
    var pass = request.body.password;

    //var client_ip = req.header('x-forwarded-for') || req.connection.remoteAddress;

    winston.log('info', 'login request recieved from  '+usr);

    connection.query('SELECT * FROM eclipse_users WHERE username=? AND password = md5(?)', [ usr, pass ], function(err, rows, fields) {

      if (!err)
      {
        var n_rows = rows.length;
         if(n_rows==1)
         {
            //user exists
            winston.log('info', 'user exists - response will be send');
            response.send('1');
            winston.log('info', 'user exists - response sent');
         }
        else{
            //user does not exist
            winston.log('info', 'user not found - response will be send');
            response.send('0');
            winston.log('info', 'user not found - response sent');
        }
    }
      else
        //SQL query error
        {
        winston.log('error', 'Error while performing select query');    
        winston.log('error', err);
        connection.end();}
      });
});

app.post('/myaction', function(request, response) {

  winston.log('info', 'web POST register user request recieved');
    var usr = request.body.username;
    var pass = request.body.pass;
    var uemail = request.body.mail;

    winston.log('info', 'preparing sql query');
    var check = connection.query('INSERT INTO eclipse_users (username, password,email) VALUES (?, md5(?),?)', [ usr, pass,uemail ], function(err,result) {

    if (!err)
    {
        winston.log('info', 'new user registered');
        response.send('User registered');}
    else
    {
        winston.log('error', 'err');
        response.send('ERROR');
    }

    });

});

winston.log('info', 'binding port 80 on IP 172.31.16.218');
app.listen(80,"172.31.16.218");
winston.log('info', 'server running at http://172.31.16.218:80');

1 Answer 1

7

Winston adds the Console transport by default. If you don't want log to the console you have two options.

Remove it:

winston.remove(winston.transports.Console);

Or instantiate your own logger:

var logger = new (winston.Logger)({
    transports: [
      new (winston.transports.File)({ filename: 'somefile.log' })
    ]
  });

And use your new logger:

logger.log('info', "this won't be printed to the console");
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.