MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Cách bật tính năng ghi nhật ký cho Mongoose và trình điều khiển MongoDB Node.JS

Thu thập nhật ký chi tiết là bước quan trọng khi gỡ lỗi các vấn đề liên quan đến kết nối với MongoDB. Trong bài đăng ngắn này, chúng tôi sẽ hướng dẫn cách kích hoạt đăng nhập trên trình điều khiển MongoDB Node.JS và Mongoose. Chúng tôi đề cập đến phiên bản Mongoose 5.x và phiên bản trình điều khiển 3.5 trong cuộc thảo luận này.

Ghi nhật ký trình điều khiển MongoDB Node.JS

Cơ chế ghi nhật ký cho trình điều khiển gốc được giải thích rõ trong tài liệu ghi nhật ký. Các tính năng cơ bản là:

  • Có 3 cấp độ nhật ký - debug , info , warn và lỗi error . Mặc định là error . info là một lựa chọn tốt khi cố gắng gỡ lỗi các vấn đề. debug cho phép theo dõi cực kỳ chi tiết, vì vậy chỉ sử dụng khi nhật ký được tạo tại info cấp độ là không đủ.
  • Theo mặc định, nhật ký truy cập console.log()

Đặt mức nhật ký

Trong mã

const MongoClient = require('mongodb').MongoClient;
const Logger = require('mongodb').Logger;
Logger.setLevel('info');

Khi đặt cấp độ nhật ký trong mã, bạn cũng có thể thêm bộ lọc cho các lớp cụ thể. Ví dụ:

Logger.filter('class', ['Connection', 'Pool']); // Log only Connection and Pool create things

Qua các tùy chọn

Trình ghi errorlogLevel cũng có thể được chuyển qua các tùy chọn kết nối, chúng tôi sẽ hiển thị cho bạn một ví dụ trong phần Mongoose.

Ghi nhật ký cho Mongoose

Bật ghi nhật ký cấp gỡ lỗi cho Mongoose rất đơn giản:

mongoose.set('debug', true)

Tuy nhiên, điều này chỉ cho phép ghi nhật ký các hoạt động MongoDB như truy vấn và cập nhật. Nếu bạn đang tìm cách gỡ lỗi các vấn đề liên quan đến kết nối, nhóm kết nối, v.v. thì điều này không có ích gì.

Mặt khác, vì Mongoose sử dụng trình điều khiển MongoDB Node.JS bên dưới, nếu chúng tôi bật ghi nhật ký cho trình điều khiển, chúng tôi cũng sẽ có thể lấy được nhật ký từ trình điều khiển. Cách dễ nhất để làm điều này là vượt qua các tùy chọn liên quan đến nhật ký. Ví dụ:

// logging options for the driver
var options = {
    logger: console.log,
    loggerLevel: 'info',
    poolSize: 10
}

var uri = 'mongodb://user:pass@localhost:port,anotherhost:port,yetanother:port/mydatabase';
// with options
mongoose.connect(uri, options);

Ngoại trừ các tùy chọn cụ thể của Mongoose, Mongoose chuyển tất cả các tùy chọn khác cho trình điều khiển. Tài liệu trình điều khiển giải thích các tùy chọn sau:

  • loggerLevel - chuỗi - tùy chọn - Mức ghi nhật ký (lỗi / cảnh báo / thông tin / gỡ lỗi)
  • logger - đối tượng - tùy chọn - Đối tượng trình ghi tùy chỉnh

Trong ví dụ trên, chúng ta chuyển loggerLevel dưới dạng infologger dưới dạng console.log .

Cách bật tính năng ghi nhật ký cho Mongoose và trình điều khiển MongoDB Node.JS Nhấp vào để Tweet

Trình ghi nhật ký tùy chỉnh

Mặc dù tài liệu trình điều khiển cung cấp ví dụ về cách viết trình ghi tùy chỉnh, nhưng nó không hữu ích lắm. Thông thường, chúng tôi sẽ cố gắng gửi các nhật ký này đến một tệp khác, không phải các nhật ký ứng dụng tiêu chuẩn và chúng tôi có thể sử dụng chức năng ghi nhật ký tùy chỉnh để có thể thực hiện điều đó.

Nếu bạn nhìn vào mã nguồn ghi nhật ký của trình điều khiển, điều sau sẽ rõ ràng:

  • Trình ghi mặc định là console.log
  • Trình ghi nhật ký phải là một chức năng
  • Chức năng ghi nhật ký mất hai đối số:
    • Chuỗi thông báo có định dạng như sau:
      [LEVEL-className:pid] timestamp logMsg

      Ví dụ:

      [INFO-Server:9224] 1589439590772 server sg-example-100.servers.scalegrid.io:27017 fired event error out with message {"name":"MongoNetworkError"}
    • Một đối tượng trạng thái có chứa thông tin sau:
      var state = {
        type: 'warn', // level
        message: message, // log message
        className: className, // className
        pid: pid,
        date: dateTime
      };

      Ví dụ:

      {
         type: 'info',
        message:
         'server sg-rs-91.servers.scalegrid.io:27017 fired event error out with message {"name":"MongoNetworkError"}',
         className: 'Server',
         pid: 9224,
         date: 1589439590772
      }
      

Vì vậy, để viết trình ghi tùy chỉnh, bạn có thể chỉ cần viết một hàm để sử dụng khung ghi nhật ký mà bạn chọn để ghi những thông báo này theo định dạng bạn muốn.

Đây là trình ghi Bunyan khá nguyên thủy được thiết lập làm trình ghi tùy chỉnh:

var Logger = require('bunyan');
var log = Logger.createLogger({
  name: "MongoDB Driver",
  streams: [
  {
    stream: process.stdout,
    level: 'info'
  },
  {
      stream: process.stdout,
      level: 'debug'
  },
  {
      stream: process.stderr,
      level: 'error'
  }
  ],
});
 
function mongoLogger(msg, state) {
  // console.log(msg, state);
 
  switch (state.type) {
    case 'debug':
      log.debug(state);
      break;
    case 'info':
      log.info(state);
      break;
    case 'warn':
      log.warn(state);
    case 'error':
    default:
      log.error(state);
  }
}

Sau đó, chuyển nó vào tùy chọn của bạn:

var options = {
  logger: mongoLogger,
  loggerLevel : 'info'
}

Kết quả đầu ra từ console.log sau đó sẽ là:

[INFO-Server:9413] 1589442507330 server SG-example-85.servers.scalegrid.io:27017 fired event close out with message {"name":"MongoNetworkError","message":"getaddrinfo ENOTFOUND SG-example-85.servers.scalegrid.io SG-example-85.servers.scalegrid.io:27017","stack":"Error: getaddrinfo ENOTFOUND SG-example-85.servers.scalegrid.io SG-example-85.servers.scalegrid.io:27017\n	at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:56:26)"} { type: 'info',
  message:
   'server SG-example-85.servers.scalegrid.io:27017 fired event close out with message {"name":"MongoNetworkError","message":"getaddrinfo ENOTFOUND SG-example-85.servers.scalegrid.io SG-example-85.servers.scalegrid.io:27017","stack":"Error: getaddrinfo ENOTFOUND SG-example-85.servers.scalegrid.io SG-example-85.servers.scalegrid.io:27017\\n	at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:56:26)"}',
  className: 'Server',
  pid: 9413,
  date: 1589442507330 }

Đầu ra của Bunyan sẽ là:

{"name":"MongoDB Driver","hostname":"<hostname>","pid":9413,"level":30,"type":"info","message":"server SG-example-85.servers.scalegrid.io:27017 fired event close out with message {\"name\":\"MongoNetworkError\",\"message\":\"getaddrinfo ENOTFOUND SG-example-85.servers.scalegrid.io SG-example-85.servers.scalegrid.io:27017\",\"stack\":\"Error: getaddrinfo ENOTFOUND SG-example-85.servers.scalegrid.io SG-example-85.servers.scalegrid.io:27017\\n	at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:56:26)\"}","className":"Server","date":1589442507330,"msg":"","time":"2020-05-14T07:48:27.331Z","v":0}

Sau đó, bạn sẽ có thể sử dụng tất cả các tính năng của Bunyan để xử lý các bản ghi khi bạn thấy phù hợp, ví dụ:gửi chúng đến một tệp luân phiên, tách ra các thông báo lỗi và thông tin, v.v.

Chúng tôi hy vọng hướng dẫn bật đăng nhập trên trình điều khiển MongoDB Node.JS và Mongoose này sẽ hữu ích cho bạn trong quá trình thiết lập. Hãy để lại ý kiến ​​trong phần bình luận bên dưới nếu bạn có bất kỳ câu hỏi hoặc cần bất kỳ trợ giúp nào.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. SQL LPAD ()

  2. MongoDB $ atan2

  3. Làm cách nào để đặt giá trị mặc định của một số nguyên trong mongodb?

  4. Truy vấn để nhận dữ liệu X phút cuối cùng với Mongodb

  5. Xóa một tài liệu con được lồng trong một mảng trong MongoDB