クエリの実行時にSequelizeがコンソールにSQLを出力しないようにしますか?


188

ユーザーのプロファイルを取得する機能があります。

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

「find」関数が呼び出されると、サーバーが起動されたコンソールにselectステートメントが表示されます。

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

これを表示しないようにする方法はありますか?どこかで設定ファイルに設定したいくつかのフラグ?


私は質問があります。パスワードフィールドがfindOrCreate()メソッドで返されないようにするとします。これどうやってするの ?
— Sunil Sharma

@SunilSharmaは属性を除外し、excludeこのページで検索しますsequelize.readthedocs.io/en/latest/docs/querying/#attributes
— KarelFrajták

回答:


358

Sequelizeオブジェクトを作成するときfalseに、loggingパラメーターに渡します。

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

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

});

その他のオプションについては、ドキュメントを確認してください。


23
かろうじて関連している質問に新しい質問を便乗させようとするよりも、新しい質問を始める方がよいでしょう。
— thenetimp 2015

ありがとうございます。これは機能していますが、実行されるクエリごとに空白が表示されます。私を助けてくれませんか..
— Tijo Tom '07 / 07/17

1
今のところ、loggingオプションは関数でなければなりません。
— イハンキョル2017年

1
これは、sequelize v4を使用する場合には効果がないようです。誰かが解決策を見つけましたか?
— ガービット2018年

37

「config / config.json」ファイルが使用されている場合、「logging」を追加します。この場合、config.jsonにfalseを追加します。

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

27

他の回答と同様に、を設定することもできますがlogging:false、ログを完全に無効にするよりも、アプリでログレベルを受け入れることができます。場合によっては、実行されたクエリを確認して、詳細またはデバッグレベルでログを記録するようにSequelizeを構成する方がよい場合があります。たとえば(ここではロギングフレームワークとしてwinstonを使用していますが、他の任意のフレームワークを使用できます):

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

これは、winstonログレベルがデバッグまたはより低いデバッグレベルに設定されている場合にのみ、SQLステートメントを出力します。ログレベルが警告または情報である場合、SQLなどはログに記録されません


6

これらの回答はすべて、作成時にロギングをオフにします。

しかし、ランタイムのロギングをオフにする必要がある場合はどうでしょうか。

ランタイムとは、関数sequelizeを使用してオブジェクトを初期化した後を意味しnew Sequelize(..ます。

私はgithubソースをのぞいて、ランタイムでロギングをオフにする方法を見つけました。

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

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

2

この議論に基づいて、私はこれconfig.jsonを完璧に機能するように構築しました:

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

2

これが私の答えです:

簡単な説明:typeormORMライブラリとして使用していました。したがって、クエリのログレベルを設定するには、ログオプションをとして直接設定する代わりに、次のオプションを使用しましたfalse。

解決策:ファイル名-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'
     }
}

そして、環境変数で、DB_QUERY_LEVEL["query"、 "error"]を設定します。

結果:結果として、クエリにエラーがある場合のみログに記録されます。それ以外の場合はログに記録されません。

Ref link: typeorm db query logging doc

お役に立てれば!ありがとう。


0

私はSequelize ORM 6.0.0を使用していて、「logging」を使用しています。残りはfalseですが、最新バージョンの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
            }
        }
    );

注:私は.env12要素の方法論に従って、設定ファイルに秘密を保存しています。


0

次のコードを使用して多くの問題を解決しました。問題は:-

  1. データベースに接続していません
  2. データベース接続拒否の問題
  3. コンソールでログを削除する(これに固有)。
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
});

人々はまだMAMPを使用していますか?
— thenetimp

はい、開発のために、別の最良の無料オプションがある場合は、お知らせください。ありがとう
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.