Verhindern, dass Sequelize bei Ausführung der Abfrage SQL an die Konsole ausgibt?


187

Ich habe eine Funktion zum Abrufen eines Benutzerprofils.

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

Wenn die Funktion "Suchen" aufgerufen wird, wird die select-Anweisung auf der Konsole angezeigt, auf der der Server gestartet wurde.

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

Gibt es eine Möglichkeit, dies nicht anzuzeigen? Ein Flag, das ich irgendwo in einer Konfigurationsdatei gesetzt habe?


Ich habe eine Frage, nehme an, ich möchte nicht, dass das Passwortfeld in der findOrCreate () -Methode zurückgegeben wird. Wie kann ich das machen ?
Sunil Sharma

@SunilSharma das Attribut ausschließen, excludeauf dieser Seite nach sequelize.readthedocs.io/en/latest/docs/querying/#attributes suchen
Karel Frajták

Antworten:


354

Übergeben Sie beim Erstellen Ihres Sequelize-Objekts falseden folgenden loggingParameter:

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

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

});

Weitere Optionen finden Sie in den Dokumenten .


23
Sie sind besser dran, eine neue Frage zu beginnen, als zu versuchen, eine neue Frage auf eine kaum verwandte Frage zu setzen.
Thenetimp

Vielen Dank, dies funktioniert, es wird jedoch für jede ausgeführte Abfrage ein Leerzeichen angezeigt. Können Sie mir bitte helfen ..
Tijo Tom

1
Für den loggingMoment sollte die Option eine Funktion sein .
Lee Han Kyeol

1
Dies scheint bei der Verwendung von Sequelize v4 keine Auswirkungen zu haben. Hat jemand eine Lösung gefunden?
Garbit

35

Wenn die Datei 'config / config.json' verwendet wird, fügen Sie der Datei config.json in diesem Fall im Abschnitt zur Entwicklungskonfiguration 'logging': false hinzu.

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

26

Wie in anderen Antworten können Sie einfach festlegen logging:false, aber ich denke, besser als die Protokollierung vollständig zu deaktivieren, können Sie die Protokollierungsstufen in Ihrer App einfach übernehmen. Manchmal möchten Sie vielleicht einen Blick auf die ausgeführten Abfragen werfen, daher ist es möglicherweise besser, Sequelize so zu konfigurieren, dass es auf ausführlicher oder debug-Ebene protokolliert. Zum Beispiel (ich verwende Winston hier als Protokollierungsframework, aber Sie können jedes andere Framework verwenden):

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

Dies gibt SQL-Anweisungen nur aus, wenn die Winston-Protokollstufe auf Debug oder niedrigere Debug-Stufen eingestellt ist. Wenn die Protokollebene beispielsweise Warnung oder Informationen ist, wird SQL nicht protokolliert


6

Alle diese Antworten werden bei der Erstellung von der Protokollierung deaktiviert.

Aber was ist, wenn wir die Protokollierung zur Laufzeit deaktivieren müssen?

Mit Laufzeit meine ich nach dem Initialisieren des sequelizeObjekts mit der new Sequelize(..Funktion.

Ich warf einen Blick in die Github-Quelle und fand einen Weg, die Protokollierung zur Laufzeit zu deaktivieren .

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

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

2

Basierend auf dieser Diskussion habe ich Folgendes erstellt config.json, das perfekt funktioniert:

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

0

Ich verwende Sequelize ORM 6.0.0 und verwende "logging": false wie der Rest, habe aber meine Antwort für die neueste Version des ORM veröffentlicht.

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

Hinweis: Ich speichere meine Geheimnisse in einer Konfigurationsdatei unter .envBeachtung der 12-Faktor-Methode.


0

Hier ist meine Antwort:

Kurz : Ich habe typeormals ORM-Bibliothek verwendet. Um die Abfrageprotokollierungsstufe festzulegen, habe ich die folgende Option verwendet, anstatt die Protokollierungsoption direkt als festzulegen false.

Lösung: Dateiname - 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'
     }
}

Und setzen Sie in der Umgebungsvariablen den Wert DB_QUERY_LEVEL["Abfrage", "Fehler"].

Ergebnis: Infolgedessen wird nur protokolliert, wenn die Abfrage einen Fehler aufweist, andernfalls nicht.

Referenzlink : typeorm db query logging doc

Hoffe das hilft! Vielen Dank.


0

Ich habe viele Probleme mit dem folgenden Code gelöst. Probleme waren: -

  1. Keine Verbindung zur Datenbank
  2. Probleme mit der Ablehnung der Datenbankverbindung
  3. Protokolle in der Konsole entfernen (speziell dafür).
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
});

Leute benutzen immer noch MAMP?
thenetimp

Ja, für die Entwicklung, wenn Sie eine andere beste kostenlose Option haben, lassen Sie es mich bitte wissen, danke
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.