[node.js] 쿼리 실행시 Sequelize가 콘솔에 SQL을 출력하지 못하게 하시겠습니까?

사용자의 프로필을 검색하는 기능이 있습니다.

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

“찾기”기능이 호출되면 서버가 시작된 콘솔에 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;

이것을 표시하지 않는 방법이 있습니까? 구성 파일에서 어딘가에 설정 한 플래그?



답변

Sequelize 객체를 만들 때 매개 변수로 전달 false하십시오 logging.

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

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

});

더 많은 옵션을 보려면 docs를 확인하십시오 .


답변

‘config / config.json’파일이 사용되는 경우이 경우 개발 구성 섹션에서 config.json에 ‘logging’: false를 추가하십시오.

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


답변

다른 답변과 마찬가지로을 설정할 수 logging:false는 있지만 로깅을 완전히 비활성화하는 것보다 낫다고 생각하면 앱에서 로그 수준을 포용 할 수 있습니다. 때로는 실행 된 쿼리를 살펴보고 상세 레벨 또는 디버그 레벨로 로그하도록 Sequelize를 구성하는 것이 좋습니다. 예를 들어 (여기서는 winston을 로깅 프레임 워크로 사용하고 있지만 다른 프레임 워크를 사용할 수 있습니다) :

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

winston 로그 레벨이 디버그 레벨 또는 디버그 레벨로 설정된 경우에만 SQL 문을 출력합니다. 로그 레벨이 경고되거나 SQL과 같은 정보가 기록되지 않는 경우


답변

이러한 모든 답변은 생성시 로깅 기능 이 해제되어 있습니다 .

그러나 런타임에 로깅 을 해제해야하는 경우 어떻게해야 합니까?

런타임에 함수를 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 


답변

이 토론을 바탕으로 config.json완벽하게 작동하는 것을 만들었습니다 .

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


답변

내 대답은 다음과 같습니다.

요약 : 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'
     }
}

그리고 envrionment 변수에서 DB_QUERY_LEVEL[ “query”, “error”]로 설정하십시오.

결과 : 결과적으로 쿼리에 오류가있는 경우에만 기록되고 그렇지 않으면 기록되지 않습니다.

참조 링크 : typeorm db query logging doc

도움이 되었기를 바랍니다! 감사.


답변

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 요소 방법론을 준수 하는 구성 파일에 저장하고 있습니다 .