programing

쿼리 실행 시 Sequetize에서 콘솔로 SQL을 출력하지 못하게 합니까?

javajsp 2023. 5. 29. 09:42

쿼리 실행 시 Sequetize에서 콘솔로 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);
  });
});

찾기 기능이 호출되면 서버가 시작된 콘솔에 선택 문이 표시됩니다.

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

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

Sequitize 개체를 만들 때 통과false에▁logging매개변수:

var sequelize = new Sequelize('database', 'username', 'password', {
  
  // disable logging; default: console.log
  logging: false

});

추가 옵션을 보려면 문서를 확인하십시오.

한다면config/config.json파일이 사용된 후 추가합니다."logging": false에▁config.json이 경우에는 개발 구성 섹션에 있습니다.

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

다른 답변과 마찬가지로 다음을 설정할 수 있습니다.logging:false하지만 로그를 완전히 비활성화하는 것보다 앱에서 로그 수준을 수용하는 것이 더 낫다고 생각합니다.실행된 쿼리를 검토하여 상세 로그 또는 디버그 수준에서 Sequitize를 구성하는 것이 좋을 수도 있습니다.예를 들어, (여기서는 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 

제 대답은 이렇습니다.

요약: 사용 중입니다.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'
     }
}

에는 그고환변다설을정합니다음서에수경리▁the▁set다니설▁and를 설정합니다.DB_QUERY_LEVEL["오류", "오류"]로 표시됩니다.

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

다시 링크: typeorm db 쿼리 로깅 문서

이것이 도움이 되길 바랍니다!감사해요.

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

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

로깅을 설정한 경우에도 'logging: false'를 옵션으로 추가하여 하나의 쿼리에 대한 로깅을 해제할 수 있습니다.

  User.findAll(
   { where: { emailAddress: request.user.username}
  }, {logging: false}
  )
  .then(function(user)....

https://sequelize.org/master/class/lib/model.js ~Model.html#static-method-findAll에서 자세한 정보 보기

저는 다음 코드를 사용하여 많은 문제를 해결했습니다.문제: -

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

저는 Sufficientize ORM 6.0.0을 사용하고 있으며 나머지는 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-요인 방법론을 준수합니다.

new Sequelize({
    host: "localhost",
    database: "database_name",
    dialect: "mysql",
    username: "root",
    password: "password",
    logging: false        // for disable logs
})

언급URL : https://stackoverflow.com/questions/28927836/prevent-sequelize-from-outputting-sql-to-the-console-on-execution-of-query