Не могли бы вы помочь мне с записью журналов в базу данных SQL Server с помощью пакета WINSTON?

Я пробовал с пакетом ниже npm

https://www.npmjs.com/package/winston-sql-transport

Но не смогли добиться? получение конфигурации из другого файла 1) config.LOG.IS_DB_LOG 2) config.LOG.LEVELS.length

 getTransports() {
    let trs = [];
        if (config.LOG.IS_DB_LOG && config.LOG.LEVELS.length > 0) {
            trs.push(
             new SQLTransport({
                 level:"error",
                 label:"logger",
                 client: 'mssql',
               connectionString:'mssql://sa:Password@localhost/SQLEXPRESS/',
                 connection: {  
                   user: 'sa',
                   password: 'Password',
                   server: ".\SQLEXPRESS",
                   database: 'EventLogs'
                 },
                 name: 'SQLTransport',
                 pool: {
                   min: 0,
                   max: 10
                 },
                 tableName: 'LOGS'
             })
            );
        }
        return trs;
}

// ------- Получение транспортов и отправка в массив

initLogger() {
this.logger = createLogger({
    format: combine(
        label({ label: "logger" }),
        timestamp(),
        myFormat,
        format.json(),
        prettyPrint()
    ),
    transports: this.getTransports(),
    exitOnError: false // do not exit on handled exceptions
});

}

Я выполнил ту же процедуру, что и в документе.

1
Jhansi Pasupuleti 2 Янв 2020 в 09:26
Можете ли вы опубликовать код, который вы пробовали до сих пор, отладить будет легко.
 – 
Prabhjot Singh Kainth
2 Янв 2020 в 09:35
Конечно @PrabhjotSinghKainth
 – 
Jhansi Pasupuleti
2 Янв 2020 в 09:38

1 ответ

Я создал свой собственный транспорт SQL с помощью пакета mysql. См. эту ссылку для получения дополнительной информации от Winston Transports.

const sqlTransport = new SQLLogging();
sqlTransport.on("logged", log => {
  let { message, level, timestamp } = log;
  message = message.toString();
  // vars for DB
  timestamp = moment(timestamp).format("YYYY-MM-DD HH:mm:ss");
    sql.query(
      {
        sql:
          "YOUR QUERY",
        timeout: 9999,
        values: [YOURDATA]
      },
      (error, response) => {
      }
    );
  }
});

И в вашем Регистраторе вы должны вызвать функцию sqlTransport

0
Simon 6 Фев 2020 в 12:12