¿Evitar que Sequelize envíe SQL a la consola al ejecutar la consulta?


189

Tengo una función para recuperar el perfil de un usuario.

app.get('/api/user/profile', function (request, response)
{
  // Create the default error container
  var error = new Error();

  var User = db.User;
  User.find({
    where: { emailAddress: request.user.username}
  }).then(function(user)
  {
    if(!user)
    {
      error.status = 500; error.message = "ERROR_INVALID_USER"; error.code = 301;
      return next(error);
    }

    // Build the profile from the user object
    profile = {
      "firstName": user.firstName,
      "lastName": user.lastName,
      "emailAddress": user.emailAddress
    }
    response.status(200).send(profile);
  });
});

Cuando se llama a la función "buscar", muestra la instrucción select en la consola donde se inició el servidor.

Executing (default): SELECT `id`, `firstName`, `lastName`, `emailAddress`, `password`, `passwordRecoveryToken`, `passwordRecoveryTokenExpire`, `createdAt`, `updatedAt` FROM `Users` AS `User` WHERE `User`.`emailAddress` = 'johndoe@doe.com' LIMIT 1;

¿Hay alguna manera de hacer que esto no se muestre? ¿Alguna marca que configuré en un archivo de configuración en alguna parte?


Tengo una pregunta, supongamos que no quiero que se devuelva el campo de contraseña en el método findOrCreate (). Cómo puedo hacer esto ?
Sunil Sharma

@SunilSharma excluye el atributo, busque excludeen esta página sequelize.readthedocs.io/en/latest/docs/querying/#attributes
Karel Frajták

Respuestas:


360

Cuando cree su objeto Sequelize, pase falseal loggingparámetro:

var sequelize = new Sequelize('database', 'username', 'password', {

  // disable logging; default: console.log
  logging: false

});

Para más opciones, consulte los documentos .


23
es mejor comenzar una nueva pregunta que tratar de incluir una nueva pregunta apenas relacionada.
thenetimp

Gracias, esto funciona, sin embargo, proporciona un espacio en blanco para cada consulta ejecutada. ¿Pueden ayudarme, por favor?
Tijo Tom

1
Por ahora, la loggingopción debería ser una función .
Lee Han Kyeol

1
Esto no parece tener un efecto cuando se utiliza secuelizar v4. ¿Alguien encontró una resolución?
Garbit

37

Si se utiliza el archivo 'config / config.json', agregue 'logging': false al config.json en este caso en la sección de configuración de desarrollo.

  // file config/config.json
  {
      {
      "development": {
        "username": "username",
        "password": "password",
        "database": "db_name",
        "host": "127.0.0.1",
        "dialect": "mysql",
        "logging": false
      },
      "test": {
    ...
   }

27

Como en otras respuestas, solo puede configurar logging:false, pero creo que es mejor que deshabilitar el registro por completo, simplemente puede adoptar los niveles de registro en su aplicación. A veces es posible que desee echar un vistazo a las consultas ejecutadas, por lo que puede ser mejor configurar Sequelize para iniciar sesión en el nivel detallado o de depuración. por ejemplo (estoy usando winston aquí como marco de registro pero puedes usar cualquier otro marco):

var sequelize = new Sequelize('database', 'username', 'password', {
  logging: winston.debug
});

Esto generará sentencias SQL solo si el nivel de registro de winston está configurado para depurar o reducir los niveles de depuración. Si el nivel de registro es de advertencia o la información, por ejemplo, SQL no se registrará


6

Todas estas respuestas se desactivan en el registro en el momento de la creación.

Pero, ¿qué pasa si necesitamos desactivar el inicio de sesión en tiempo de ejecución?

Por tiempo de ejecución quiero decir después de inicializar el sequelizeobjeto usando la new Sequelize(..función.

Me asomé a la fuente de Github , encontré una manera de desactivar el inicio de sesión en tiempo de ejecución.

// Somewhere your code, turn off the logging
sequelize.options.logging = false

// Somewhere your code, turn on the logging
sequelize.options.logging = true 

2

Basado en esta discusión, construí esto config.jsonque funciona perfectamente:

{
  "development": {
    "username": "root",
    "password": null,
    "logging" : false,
    "database": "posts_db_dev",
    "host": "127.0.0.1",
    "dialect": "mysql",
    "operatorsAliases": false 
  }
}

2

Aquí está mi respuesta:

Breve : Estaba usando typeormcomo una biblioteca ORM. Entonces, para establecer el nivel de registro de consultas, he usado la siguiente opción en lugar de establecer directamente la opción de registro como false.

Solución: nombre de archivo - ormconfig.ts

{
    'type': process.env.DB_DRIVER,
    'host': process.env.DB_HOST,
    'port': process.env.DB_PORT,
    'username': process.env.DB_USER,
    'password': process.env.DB_PASS,
    'database': process.env.DB_NAME,
    'migrations': [process.env.MIGRATIONS_ENTITIES],
    'synchronize': false,
    'logging': process.env.DB_QUERY_LEVEL,
    'entities': [
        process.env.ORM_ENTITIES
    ],
    'cli': {
        'migrationsDir': 'migrations'
     }
}

Y, en la variable de entorno, establezca DB_QUERY_LEVELcomo ["consulta", "error"].

Resultado: como resultado, se registrará solo cuando la consulta tenga un error; de lo contrario, no lo hará.

Enlace de referencia: typeorm db query logc doc

¡Espero que esto ayude! Gracias.


0

Estoy usando Sequelize ORM 6.0.0 y estoy usando "logging": falso como el resto, pero publiqué mi respuesta para la última versión del ORM.

const sequelize = new Sequelize(
        process.env.databaseName,
        process.env.databaseUser,
        process.env.password,
        {
            host: process.env.databaseHost,
            dialect: process.env.dialect,
            "logging": false,
            define: {
                // Table names won't be pluralized.
                freezeTableName: true,
                // All tables won't have "createdAt" and "updatedAt" Auto fields.
                timestamps: false
            }
        }
    );

Nota: Estoy almacenando mis secretos en un archivo de configuración .envobservando la metodología de 12 factores.


0

Resolví muchos problemas usando el siguiente código. Los problemas fueron: -

  1. No se conecta con la base de datos
  2. Problemas de rechazo de conexión de base de datos
  3. Deshacerse de los registros en la consola (específico para esto).
const sequelize = new Sequelize("test", "root", "root", {
  host: "127.0.0.1",
  dialect: "mysql",
  port: "8889",
  connectionLimit: 10,
  socketPath: "/Applications/MAMP/tmp/mysql/mysql.sock",
  // It will disable logging
  logging: false
});

la gente todavía usa MAMP?
thenetimp

Sí, para el desarrollo, si tiene otra mejor opción gratuita, hágamelo saber, gracias
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.