Impedir que Sequelize produza SQL no console na execução da consulta?


188

Eu tenho uma função para recuperar o perfil de um usuário.

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);
  });
});

Quando a função "localizar" é chamada, ela exibe a instrução select no console em que o servidor foi iniciado.

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

Existe uma maneira de fazer com que isso não seja exibido? Alguma sinalização que defini em um arquivo de configuração em algum lugar?


Eu tenho uma pergunta, suponha que eu não quero o campo de senha retornado no método findOrCreate (). Como posso fazer isso ?
Sunil Sharma

@SunilSharma excluir o atributo, procure excludenesta página sequelize.readthedocs.io/en/latest/docs/querying/#attributes
Karel Frajták

Respostas:


358

Ao criar seu objeto Sequelize, passe falsepara o loggingparâmetro:

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

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

});

Para mais opções, consulte os documentos .


23
é melhor iniciar uma nova pergunta do que tentar pegar uma nova pergunta sobre uma questão pouco relacionada.
thenetimp

Obrigado, isso está funcionando, mas fornece um espaço em branco para cada consulta executada. Você pode me ajudar ..
Tijo Tom 07/07/16

1
Por enquanto, a loggingopção deve ser uma função .
Lee Han Kyeol

1
Isso não parece ter efeito ao usar o sequelize v4. Alguém encontrou uma resolução?
Garbit

37

Se o arquivo 'config / config.json' for usado, adicione 'logging': false ao config.json, neste caso, na seção de configuração de desenvolvimento.

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

27

Como em outras respostas, você pode apenas definir logging:false, mas acho melhor do que desabilitar completamente o log, você pode apenas abraçar os níveis de log no seu aplicativo. Às vezes, você pode querer dar uma olhada nas consultas executadas, para que seja melhor configurar o Sequelize para fazer logon no nível detalhado ou depurar. por exemplo (estou usando o winston aqui como uma estrutura de log, mas você pode usar qualquer outra estrutura):

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

Isso produzirá instruções SQL apenas se o nível de log do winston estiver definido como depuração ou níveis mais baixos de depuração. Se o nível do log for avisado ou informações, por exemplo, SQL não serão registradas


6

Todas essas respostas estão desativadas no log no momento da criação.

Mas e se precisarmos desativar o log em tempo de execução?

Por tempo de execução, quero dizer depois de inicializar o sequelizeobjeto usando a new Sequelize(..função

Eu espiei a fonte do github , encontrei uma maneira de desativar o log em tempo de execução.

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

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

2

Com base nessa discussão, eu criei isso config.jsonque funciona perfeitamente:

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

2

Aqui está a minha resposta:

Breve : eu estava usando typeormcomo uma biblioteca ORM. Portanto, para definir o nível de log de consulta, usei a seguinte opção em vez de definir diretamente a opção de log como false.

Solução: Nome do arquivo - 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'
     }
}

E, na variável de ambiente, defina DB_QUERY_LEVELcomo ["query", "error"].

Resultado: como resultado, ele registrará apenas quando a consulta tiver erro, caso contrário, não ocorrerá.

Ref link: doc de registro de consulta typeorm db

Espero que isto ajude! Obrigado.


0

Estou usando Sequelize ORM 6.0.0 e estou usando "log": false como o resto, mas postei minha resposta para a versão mais recente do 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: estou armazenando meus segredos em um arquivo de configuração, .envobservando a metodologia de 12 fatores.


0

Resolvi muitos problemas usando o código a seguir. As questões foram: -

  1. Não está se conectando ao banco de dados
  2. Problemas de rejeição de conexão com o banco de dados
  3. Livrar-se dos logs no console (específico para isso).
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
});

as pessoas ainda usam MAMP?
thenetimp

Sim, para o desenvolvimento, se você tiver outra melhor opção gratuita, informe-me, obrigado
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.