Mencegah Sequelize dari keluaran SQL ke konsol pada pelaksanaan permintaan?


188

Saya memiliki fungsi untuk mengambil profil pengguna.

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

Ketika fungsi "find" dipanggil, ini akan menampilkan pernyataan pilih pada konsol tempat server dimulai.

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

Apakah ada cara untuk mendapatkan ini agar tidak ditampilkan? Beberapa bendera yang saya atur di file konfigurasi di suatu tempat?


Saya punya pertanyaan, misalkan saya tidak ingin bidang kata sandi dikembalikan dalam metode findOrCreate (). Bagaimana saya bisa melakukan ini?
Sunil Sharma

@SunilSharma mengecualikan atribut, cari excludedi halaman ini sequelize.readthedocs.io/en/latest/docs/querying/#attributes
Karel Frajták

Jawaban:


359

Saat Anda membuat objek Sequelize Anda, kirimkan falseke loggingparameter:

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

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

});

Untuk opsi lebih lanjut, periksa dokumen .


23
Anda lebih baik memulai pertanyaan baru daripada mencoba membonceng pertanyaan baru pada pertanyaan yang hampir tidak berhubungan.
thenetimp

Terima kasih, ini berfungsi namun memberikan ruang putih untuk setiap kueri yang dieksekusi. Bisakah Anda membantu saya ..
Tijo Tom

1
Untuk saat ini, loggingopsi harus berupa fungsi .
Lee Han Kyeol

1
Ini tampaknya tidak berpengaruh ketika menggunakan sekuel v4. Adakah yang menemukan resolusi?
Garbit

37

Jika file 'config / config.json' digunakan maka tambahkan 'logging': false ke config.json dalam kasus ini di bawah bagian konfigurasi pengembangan.

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

27

Seperti pada jawaban lain, Anda bisa mengatur logging:false, tapi saya pikir lebih baik daripada sepenuhnya menonaktifkan logging, Anda bisa merangkul level log di aplikasi Anda. Terkadang Anda mungkin ingin melihat kueri yang dieksekusi sehingga mungkin lebih baik untuk mengonfigurasi Sequelize untuk masuk pada level verbose atau debug. misalnya (saya menggunakan winston di sini sebagai kerangka kerja logging tetapi Anda dapat menggunakan kerangka kerja lain):

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

Ini akan menghasilkan pernyataan SQL hanya jika tingkat log winston diatur ke debug atau menurunkan tingkat debug. Jika tingkat log diperingatkan atau info misalnya SQL tidak akan dicatat


6

Semua jawaban ini dimatikan saat pencatatan .

Tetapi bagaimana jika kita perlu mematikan logging saat runtime?

Maksud saya runtime setelah menginisialisasi sequelizeobjek menggunakan new Sequelize(..fungsi.

Saya mengintip ke sumber github , menemukan cara untuk mematikan proses masuk runtime.

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

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

2

Berdasarkan diskusi ini, saya membangun ini config.jsonyang bekerja dengan sempurna:

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

2

Inilah jawaban saya:

Singkat : Saya menggunakan typeormsebagai perpustakaan ORM. Jadi, untuk mengatur tingkat pencatatan kueri, saya telah menggunakan opsi berikut daripada langsung mengatur opsi pencatatan sebagai false.

Solusi: Nama file - 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'
     }
}

Dan, dalam variabel lingkungan setel DB_QUERY_LEVELsebagai ["kueri", "kesalahan"].

Hasil: Sebagai hasilnya, ia hanya akan mencatat ketika kueri memiliki kesalahan yang lain.

Tautan ref: typeorm db query logging doc

Semoga ini membantu! Terima kasih.


0

Saya menggunakan Sequelize ORM 6.0.0 dan saya menggunakan "logging": false sebagai yang lain tetapi memposting jawaban saya untuk versi ORM terbaru.

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

Catatan: Saya menyimpan rahasia saya di file konfigurasi .envmengamati metodologi 12-faktor.


0

Saya memecahkan banyak masalah dengan menggunakan kode berikut. Masalahnya adalah: -

  1. Tidak terhubung dengan database
  2. Koneksi basis data Masalah penolakan
  3. Menyingkirkan log di konsol (khusus untuk ini).
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
});

orang masih menggunakan MAMP?
thenetimp

Ya, untuk pengembangan, jika Anda memiliki pilihan gratis terbaik lainnya, harap beri tahu saya, terima kasih
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.