Winston: هل يمكن استخدام Winston على الواجهة الأمامية (أي المتصفح) للتسجيل؟

تم إنشاؤها على ٢٩ يوليو ٢٠١٣  ·  60تعليقات  ·  مصدر: winstonjs/winston

هل يمكن استخدام Winston على الواجهة الأمامية للتسجيل؟ أرغب في استخدام Winston للحصول على قدرة تسجيل أكبر للواجهة الأمامية. هل يمكن هذا؟

feature request

التعليق الأكثر فائدة

يا رجل ، حصلت على آمالي كبيرة حقًا عندما رأيت الحزمة ثم لاحظت عدم وجود دعم للمتصفح.
سيكون هذا رائعًا حقًا بالنسبة لي في المتصفح لاستبدال بعض العناصر المحلية.

ال 60 كومينتر

لم أجربها ، لكن هذا قد يساعد https://github.com/farpoint/meteor-winston-client

يوجد 404 على هذا الرابط joshacheson !!

هل لديك أي تقدم في هذه القضية؟

بناءً على التعليقات الواردة من # 582 ، يبدو أن أي علاقات عامة مستقبلية ستحتاج إلى التركيز على فصل المنطق الأساسي ووسائل النقل ، بدلاً من استخدام الحشوات مثل brfs . سيكون هذا تغييرًا هيكليًا كبيرًا وسيحتاج بالتأكيد إلى إرشادات من المطورين الأساسيين بشأن الأسلوب والنهج ، حيث سيكونون في نهاية المطاف هم الذين تركوا للحفاظ على هذا.

والخبر السار هو أن الكود في الغالب نظيف ومنظم جيدًا ، ولكنه يحتاج إلى بعض التوجيه من المطورين الأساسيين بشأن الأسلوب والنهج. هل تستطيع indexzero / pose مشاركة أفكارك؟

أي تقدم في هذه القضية؟

يا رجل ، حصلت على آمالي كبيرة حقًا عندما رأيت الحزمة ثم لاحظت عدم وجود دعم للمتصفح.
سيكون هذا رائعًا حقًا بالنسبة لي في المتصفح لاستبدال بعض العناصر المحلية.

+1

نفس الشيء أم أنا. يساعد أيضًا وجود نفس سجل الدخول للأمام والخلف.

كنت أتصفح هذا للتو ويبدو أنه من العار أنه على الرغم من أنه يحتوي على نقل http ، فلا يبدو أنه يوجد أي عميل قياسي للمتصفح / آخر.

من المحزن أنني سأضطر إلى استخدام بنيان

اي اخبار عن هذا؟

إذا كنت تريد حقًا استخدامه ، فيمكنك فقط كتابة وسيلة نقل مخصصة له ، على سبيل المثال:

const Transport = require('winston-transport');

export default class BrowserConsole extends Transport {
  constructor(opts) {
    super(opts);

    this.name = 'BrowserConsole';
    this.levels = {
        error: 0,
        warn: 1,
        info: 2,
        debug: 4,
    };

    this.methods = {
        error: 'error',
        warn: 'warn',
        info: 'info',
        debug: 'log',
    };

    this.level = opts.level && this.levels.hasOwnProperty(opts.level)
                  ? opts.level : 'info';
  }

  log(method, message) {
    setImmediate(() => {
      this.emit('logged', method);
    });

    const val = this.levels[method];
    const mappedMethod = this.methods[method];

    if (val <= this.levels[this.level]) {
      // eslint-disable-next-line
      console[mappedMethod](message);
    }
  }
}

ثم يمكنك استخدامه بهذه الطريقة:

import BrowserConsole from './BrowserConsole';

const { createLogger, transports } = require('winston');

const log = createLogger({
  level: 'info',
});

if (process.env.NODE_ENV !== 'production') {
  log.add(new BrowserConsole({
    level: 'info',
  }));
}

باستخدام هذا النقل ، تحصل على تحذير غير مفيد لأنه يعتبر رمزًا قديمًا. سيكون من الجميل أيضًا إضافة إمكانية استخدام طرق وحدة التحكم الأخرى ( table ، dir ، trace ، ...) ، ولكن من أجل البساطة ، الأمر كما هو.

شكرًا لك chrisvoo ، لقد جربت هذا الحل ولكني حصلت على خطأ:

ReferenceError: Buffer is not defined
    replacer 
    json.js/module.exports< 
    _transform 
    _stream_transform.js/Transform.prototype._read
    _stream_transform.js/Transform.prototype._write
    doWrite
    writeOrBuffer
    _stream_writable.js/Writable.prototype.write
    log

@ dmitry-salnikov لا أعرف ، راجع للشغل لا أستطيع أن أفهم لماذا يستخدم هذا الرمز التدفقات. ربما كانت حالة الاستخدام الخاصة بي بسيطة للغاية. حاول أن تشارك كيف تستخدمه.

chrisvoo لقد قمت بنسخ تنفيذ BrowserConsole إلى ملف منفصل ، ثم قمت بلصق الجزء الثاني من الكود في ملف آخر ، وبعد إضافة رمز النقل BrowserConsole (آخر سطر من مقتطفك) لقد حاولت ببساطة:

log.info('hello world');

ثم حصلت على خطأ وحاولت:

log.log('info, 'hello world');

كلا النداءين يعيدان نفس الخطأ.

بيئتي التي تجعل استخدام Node ممكنًا في المتصفح هي Meteor.js v1.6 (Node 8.8.1). كما أنني لم أقم بتعديل أي سطر من مقتطف الشفرة الخاص بك.

راجع للشغل: لقد بدأت في استخدام وينستون منذ وقت ليس ببعيد ، لذلك ربما كنت أقوم بشيء خاطئ.

@ dmitry-salnikov ما هو نوع الخطأ الذي تتلقاه؟ مثل "المعلومات ليست وظيفة"؟ ربما لسبب ما ، تم استيراده بشكل سيء.

chrisvoo يرجى إلقاء نظرة:
screenshot 2017-11-08 20 35 31

محتويات BrowserConsole.js (يمكنك رؤيتها في شجرة الملفات) هي تمامًا كما في مقتطفك.

وأنا أتفق معك ، أشعر أن هناك خطأ ما في الاستيراد ، لكن لا يمكنني معرفة السبب: (هل يمكنك مشاركة أفكارك حول هذا من فضلك؟

ما هو إصدار Winston الخاص بك؟ العقل هو:

"winston": "^3.0.0-rc1",
"winston-transport": "^3.0.1"

في الواقع نفس الشيء

$ npm ls | grep winston
├─┬ [email protected]
│ └── [email protected]
└── [email protected]
$ cat package.json | grep winston
    "winston": "^3.0.0-rc1",
    "winston-transport": "^3.0.1"

في محاولة لحل هذه المشكلة ، أجريت اختبارًا آخر:

import winston from 'winston';
import BrowserConsole from '/imports/BrowserConsole.js';

const format = winston.format;
// next line throws exception, see below
const { combine, timestamp, label, printf, colorize, prettyPrint } = format;

const logger = winston.createLogger({
...

وحصلت على الخطأ التالي: Cannot find module './combine'

إليك تتبع المكدس والرمز ذي الصلة (لقطة شاشة للمتصفح):
screenshot 2017-11-10 04 01 04

يبدو أن شيئًا ما تم استيراده بشكل سيء حقًا. chrisvoo هل يمكنك إلقاء نظرة من فضلك؟

في Winston 3.0.0 ، النقل عبارة عن تيارات. ومع ذلك ، في browserify-stream readableStream instanceof Stream لا يكون صحيحًا. هذا يجعل Winston يعود إلى تغليف النقل في غلاف Legacy ويصدر تحذيرًا. لقد صنعت علاقات عامة لاستخدام طريقة مختلفة لاكتشاف الانسيابية: # 1145

Jasu صحيح لقد لاحظت هذا أيضًا ، لقد قدمت مشكلة في وقت سابق فيما يتعلق بهذا الأمر على winston-transport . سأقوم أيضًا بتقديم طلب سحب قريبًا حتى يكون نقل وحدة التحكم متماثلًا.

IGNOREME: أعلق هنا حتى أتمكن بسهولة من العثور على هذه المشكلة مرة أخرى في المستقبل ، [بما أنني لا أستطيع فعل ذلك بالاشتراك بمفردي] (https://github.com/isaacs/github/issues/283).

واجهت نفس المشكلة ، Error: Cannot find module './combine' .

+1

chrisvoo : يوجد أدناه الخطأ ، عندما أحاول تشغيل مقتطفك (Winston و winston-transport موجودان في أكثر من 3 إصدارات)
خطأ في winston-transport / index.js
لم يتم العثور على الوحدة النمطية: خطأ: لا يمكن حل "الدفق" في node_modules / winston-transport "

هل هناك أي فرصة لدمج PR # 1145 (الذي تم افتتاحه في نوفمبر 2017) هذا العام؟ :غمزة:

تم دمج @ dmitry-salnikov # 1145 للإتقان. ليس في إصدار حتى الآن على الرغم من.

مغلق مغلق مغلق.

شكرا لدعمك يا بطاطا

5 سنوات ، على الأقل قد أتى ليؤتي ثماره. لا يزال Winston أفضل نظام تسجيل لـ JavaScript IMO

شكرا!

سيظل هذا مفتوحًا حتى تكون هناك اختبارات في مجموعة الاختبار لدينا تتحقق من دعم المتصفح. يبدو أنه تم حل معظم حالات الحافة والزاوية حول babel & webpack.

هنا نحن نحب winston ونحتاج إلى برمجيات وسيطة للتسجيل من جانب العميل.

لقد مرت فترة منذ أن تم تطبيق المتصفح ونرغب في استخدامه من الآن.

أي فكرة تقريبية عن دعم المتصفح ، قبل انتظار اختبارات الوحدة والتغطية الكاملة للمتصفح؟

حاولت استيراد وينستون لمشروعي وفشلت بالرسالة التالية:
خطأ في ./\~/winston/lib/winston/tail-file.js
الوحدة غير موجودة: خطأ: لا يمكن حل 'fs' في '/ Users / me / workspaces / app / node_modules / winston / lib / winston'
@ ./\~/winston/lib/winston/tail-file.js 10: 11-24
@ ./\~/winston/lib/winston/transports/file.js
@ ./\~/winston/lib/winston/transports/index.js
@ ./\~/winston/lib/winston.js
@ ./src/app/app.module.ts
@ ./src/main.ts

winston's index.js يستورد وسائل النقل التي تستورد ".file" التي تتطلب "fs".

كيف يمكنني إلغاء اشتراكي من هذا الجحيم الجديد

  • ميخائيل

في الثلاثاء 7 أغسطس 2018 الساعة 2:19 مساءً كتب Kfir Erez [email protected] :

حاولت استيراد وينستون لمشروعي وفشلت فيما يلي
رسالة:
خطأ في .//winston/lib/winston/tail-file.js
الوحدة غير موجودة: خطأ: لا يمكن حل 'fs' في
"/ Users / me / workspaces / app / node_modules / winston / lib / winston"
@ .//winston/lib/winston/tail-file.js 10: 11-24
@ .//winston/lib/winston/transports/file.js
@ .//winston/lib/winston/transports/index.js
@ ./~/winston/lib/winston.js
@ ./src/app/app.module.ts
@ ./src/main.ts

winston's index.js يستورد وسائل النقل التي تستورد ".file" التي تتطلب
"fs".

-
أنت تتلقى هذا لأنك علقت.
قم بالرد على هذا البريد الإلكتروني مباشرة ، وقم بعرضه على GitHub
https://github.com/winstonjs/winston/issues/287#issuecomment-410946148 ،
أو كتم الخيط
https://github.com/notifications/unsubscribe-auth/AE3lcdZ3aQKEVYvYB2TXjh0dnQ1FaBS2ks5uOTFhgaJpZM4A2vjK
.

mjcd أنت عالق هنا إلى الأبد 😆 (j / k ، يمكنك إلغاء الإرسال باستخدام الرابط الموجود في البريد الإلكتروني أو عبر gh)

لدي نفس الخطأ الذي واجهتهKErez عند استخدام حزمة الويب

هناك طريقة شائعة لحل هذه المشكلة وهي وضع node: { fs: 'empty' } في تهيئة حزمة الويب الخاصة بك - ومن الواضح أنك لا تحاول استخدام النقل File من المتصفح ، فلن يعمل. سيكون من الرائع لو تمكنا من إنشاء حزمة Winston في حزمة الويب بدون إعداد التكوين الإضافي هذا ولكن أتساءل إذا كان ذلك ممكنًا. توصي الحزم الشائعة الأخرى بنفس الشيء - على الرغم من أن https://github.com/pugjs/pug-loader/issues/8#issuecomment -328331541 يقترح أنه يمكننا إصلاح ذلك في ملف winston.json. شخص ما يريد تجربة ذلك وفتح العلاقات العامة إذا تم حل هذا الخطأ (على سبيل المثال ، بدون تغيير تهيئة حزمة الويب للتطبيق الخاص بك ، فقط قم بتغيير winston's package.json)؟

أنا أتلقى خطأ بسبب الإعداد الفوري ... لا أفهم لماذا منذ أن يبدو أن chrisvoo ينجح مع. ربما لأنه يستخدم بوليفيل؟

مشكلتي ذات الصلة: https://github.com/winstonjs/winston/issues/1489

صنعت حزمة بناءً على كود chrisvoo (شكرًا كثيرًا) هنا:
https://www.npmjs.com/package/winston-transport-browserconsole.

أيضًا ، هناك عينة صغيرة هناك حتى تتمكن من المقارنة مع إخراج وحدة تحكم winston الافتراضي.

هناك طريقة شائعة لحل هذه المشكلة وهي وضع العقدة: {fs: 'blank'} في تهيئة حزمة الويب الخاصة بك

هل هناك خطط لدعم حزم متصفح webpack دون الحاجة إلى إجراء هذا التغيير على تهيئة webpack؟

سيكون من الرائع لو تمكنا من إنشاء حزمة Winston في حزمة الويب بدون إعداد التكوين الإضافي هذا ولكن أتساءل إذا كان ذلك ممكنًا. توصي الحزم الشائعة الأخرى بنفس الشيء - على الرغم من أن pugjs / pug-loader # 8 (تعليق) يشير إلى أنه يمكننا إصلاح ذلك في ملف winston.json. شخص ما يريد تجربة ذلك وفتح العلاقات العامة إذا تم حل هذا الخطأ (على سبيل المثال ، بدون تغيير تهيئة حزمة الويب للتطبيق الخاص بك ، فقط قم بتغيير winston's package.json)؟

@ DABH للأسف ، لا أعتقد أن الأمر بهذه البساطة. أنتم يا رفاق تستخدمون حقل المتصفح لتحديد نقطة دخول مختلفة. أعتقد أنه يمكن استخدامها لتحديد نقطة دخول مختلفة أو استبدال وحدات معينة ، كما هو موضح في تلك التذكرة - وليس كليهما. ولكن نظرًا لأنك تقوم بالفعل بإنشاء إصدار المتصفح الخاص بك ، على ما يبدو ، فربما يمكن إزالته من ذلك. سآخذ الذروة إذا سنحت لي الفرصة في نهاية هذا الأسبوع.

أي تقدم في هذا؟ لقد مرت 6 سنوات وغدًا سيكون عام 2020 :-)

ربما يكون الحل هو إعادة حزم winston بحيث يكون الناقلون هم وحدتهم الخاصة. يبدو وكأنه حل أفضل

هل يمكننا استخدام وينستون في الزاوية؟ كيف ؟

ArpithaGMGowda ليس مع CLI الزاوي القياسي

ثم ما الذي يمكننا استخدامه في Angular 7 ؟؟
اي فكرة

لقد استخدمت js-logger في مشروعي الأخير الذي عمل جيدًا ويسمح لي بإرسال السجلات إلى elk على الرغم من أنه يبدو أنه لم يكن لديه نشاط كبير في العام الماضي: https://github.com/jonnyreeves/js-logger
هناك خدمات تسجيل جيدة قد تعمل أيضًا من أجلك ، مثل track.js

أنا أعيد كتابة هذه المكتبة في هيكل جديد يزيل التبعية على العقدة. يجب أن ينتهي في الأسبوع القادم

تحتاج مشكلة Winston القائمة على الكود إلى التحديث دون كسر الميزات الأساسية.

تحتاج طبقة النقل إلى الانقسام إلى قوالب فرعية خاصة بها ، مما سيؤدي في المقابل إلى حدوث تغييرات متقطعة أعتقد أن الفريق لا يريد إحداثها. إلى هذه النقطة ما لم يكن الفريق على استعداد لتبني نظام بيئي جديد. لست متأكدًا من الموافقة على العلاقات العامة التي يتم إصلاحها.

هل جربتم الناس مع NGX-Logger " https://www.npmjs.com/package/ngx-logger

ArpithaGMGowda أعتقد بالنسبة لي ، لا أحب كتابة قاعدة التعليمات البرمجية التي تربطك في إطار عمل محدد. يجب أن تكون الشفرة محايدة قدر الإمكان من واجهة المستخدم إلى مكالمات الخدمة. كما أنني أحب فكرة الآلية الموحدة. لماذا يوجد طريقة للواجهة الخلفية وأخرى للواجهة الأمامية

أنا أعيد كتابة هذه المكتبة في هيكل جديد يزيل التبعية على العقدة. يجب أن ينتهي في الأسبوع القادم

@ جوردان هول أتساءل عما إذا كان لدينا RC قريبًا (وشكرًا).
إن الاضطرار إلى تعديل حزم الويب الخاصة بالجهات الخارجية حتى لا تنكسر عند استخدام مشروعنا / lib الذي يستخدم Winston هو أمر صعب.

MarcoMedrano إنه تغيير أساسي والذي سيكون من الناحية النظرية وقت مكتبة جديد أنهيته.

pose ما رأيك في فصل طبقات النقل عن الحزمة الأساسية؟ أنا أحب وينستون ولكن النظام البيئي لا يحتاج إلى التغيير

استغرقت بعض الوقت لكتابة هذا ، لكنني توصلت إلى حل معقول إلى حد ما لهذا الأمر.
سيسمح لك ما يلي باستخدام مستويات الخطأ والتحذير والمعلومات في المتصفح (مع البادئات المخصصة !) ، وستبدو هكذا:
gHLo47GZ0bvMAsiqhxRfSV3TIWyXn9NO

لكي يعمل هذا ، تحتاج إلى تثبيت winston و logform و winston-transport كاعتماديات.

إليك الكود الذي تحتاجه لتنفيذ ذلك.
لاحظ أن هذا مكتوب بالخط المطبوع ، ومثال جافا سكريبت أدناه.

import * as winston from 'winston';
import {TransformableInfo} from 'logform';
import TransportStream = require('winston-transport');

// enumeration to assign color values to
enum LevelColors {
  INFO = 'darkturquoise',
  WARN = 'khaki',
  ERROR = 'tomato',
}

// type levels used for setting color and shutting typescript up
type Levels = 'INFO' | 'WARN' | 'ERROR';

const defaultColor = 'color: inherit';

//! Overriding winston console transporter
class Console extends TransportStream {
  constructor(options = {}) {
    super(options);

    this.setMaxListeners(30);
  }

  log(info: TransformableInfo, next: () => void) {
    // styles a console log statement accordingly to the log level
    // log level colors are taken from levelcolors enum
    console.log(
      `%c[%c${info.level.toUpperCase()}%c]:`,
      defaultColor,
      `color: ${LevelColors[info.level.toUpperCase() as Levels]};`,
      defaultColor,
      // message will be included after stylings
      // through this objects and arrays will be expandable
      info.message
    );

    // must call the next function here
    // or otherwise you'll only be able to send one message
    next();
  }
}

// creating silent loggers with according levels
// silent by default to be automatically deactivated
// in production mode
export const logger = winston.createLogger({
  transports: [
    new Console({
      silent: true,
      level: 'info',
    }),
  ],
});

// don't log anything in production mode
// probably should go further and return non
// working logger function to reduce
// execution time and improve speed results
// on application
if (process.env.NODE_ENV !== 'production') {
  logger.transports.forEach(transport => (transport.silent = false));
}

وهنا مثال جافا سكريبت

import * as winston from 'winston';

import {TransformableInfo} from 'logform';
import TransportStream = require('winston-transport');

// enumeration to assign color values to
const LevelColors = {
  INFO: 'darkturquoise',
  WARN: 'khaki',
  ERROR: 'tomato',
}

const defaultColor = 'color: inherit';

//! Overriding winston console transporter
class Console extends TransportStream {
  constructor(options = {}) {
    super(options);

    this.setMaxListeners(30);
  }

  log(info, next) {
    // styles a console log statement accordingly to the log level
    // log level colors are taken from levelcolors enum
    console.log(
      `%c[%c${info.level.toUpperCase()}%c]:`,
      defaultColor,
      `color: ${LevelColors[info.level.toUpperCase()]};`,
      defaultColor,
      // message will be included after stylings
      // through this objects and arrays will be expandable
      info.message
    );

    // must call the next function here
    // or otherwise you'll only be able to send one message
    next();
  }
}

// creating silent loggers with according levels
// silent by default to be automatically deactivated
// in production mode
export const logger = winston.createLogger({
  transports: [
    new Console({
      silent: true,
      level: 'info',
    }),
  ],
});

// don't log anything in production mode
// probably should go further and return non
// working logger function to reduce
// execution time and improve speed results
// on application
if (process.env.NODE_ENV !== 'production') {
  logger.transports.forEach(transport => (transport.silent = false));
}

يمكنك تغيير الألوان في تعداد LevelColors. إذا كنت تريد تغيير التنسيق ، فقم بإلقاء نظرة على السطر 29.

لإضافة دعم لمستوى التصحيح. عيّن level في خيارات وحدة التحكم إلى 'debug' .
من الممكن أيضًا إضافة دعم لجميع مستويات winston القياسية ، بمعنى: ظهور ، تنبيه ، نقد ، خطأ ، تحذير ، معلومات وتصحيح. إذا كنت تريد استخدام هذه العناصر أيضًا ، فأنت بحاجة إلى إضافة تعيين هذا الكائن إلى التكوين levels في جذر createLogger

{
   emerg: 0,
   alert: 1,
   crit: 2,
   error: 3,
   warn: 4,
   info: 5,
   debug: 6,
}

ثم قم بإضافة قيم اللون في تعداد LevelColors.

أنا أكافح من أجل الحصول على صورة واضحة عن حالة هذه القضية. هل يمكنني استخدام وينستون في تطبيق React الخاص بي؟

أنا في الواقع لست مهتمًا كثيرًا بتسجيل الدخول إلى وحدة تحكم المتصفح - وبصراحة تامة ، لا أفهم الهدف من تجاوز winston console transporter عندما يخدم console المضمّن نفس الغرض ؛ ربما يمكن لشخص ما أن ينورني.

موقفي هو أن تطبيق React الخاص بي يعمل في حاوية Docker خلف وكيل nginx / Let's Encrypt ، لذلك لا يمكنني الوصول إلى أي إخراج لوحدة تحكم JavaScript ؛ لذلك أود إعادة توجيه أي مخرجات سجل إلى خادم سجل نظام.

لقد نجحت في إعداد حاوية Docker syslog-ng والتي تدمج إخراج السجل من قاعدة البيانات والواجهة الخلفية وبعض الحاويات الأخرى التي يتكون منها مشروعي ، ولكن لا يمكنني العثور على نهج مباشر / متعارف عليه لتسجيل النظام الناتج من واجهة React الأمامية.

قبل أن أبدأ في اختراق بعض الحلول الغبية المصنوعة منزليًا ، هل لدى أي شخص نصيحة أفضل لي؟
ربما تأخذ الكود أعلاه واستبدل console.log ببعض الكود الذي يرسل الرسالة عبر الشبكة إلى خادم سجل النظام؟

@ z00m1n يعتمد الأمر في الغالب على حالة الاستخدام الخاصة بك. أستخدم Winston في المتصفح لتسجيل جميع الطلبات واستدعاءات الوظائف التي أجريها. وإذا كنت في بيئة إنتاج أقصر الإخراج على أخطاء الطباعة فقط.

ويمكن استخدام الكود الخاص بي واستبدال بيان console.log بشيء آخر.

ومع ذلك ، قبل أن تكتب حلًا مبتكرًا لإنجاح هذا الأمر ، أقترح استخدام الحارس.

يعتمد ذلك أيضًا على ما إذا كنت تتحكم في حزمة الويب. للأسف ، هذه الحزمة المذهلة قديمة من الناحية المعمارية مما يجعل من المستحيل حلها حقًا

Keimeno هل لاحظت أي سلوك غريب أو مشاكل في الأداء؟ أريد حقًا استخدامه ولكن يجب أن يكون مستقرًا لأوبر لأن بعض عمليات التسجيل ستحدث في الإنتاج لحالة الاستخدام الخاصة بي ...

gcperrin لست متأكدًا مما إذا كان يمكنك تسميتها بمشكلة في الأداء ، لكنني كنت أقوم بتنفيذ بعض المعايير وحصلت على النتائج التالية:
بيئة dev: تقوم بتسجيل شيء ما في وحدة التحكم
بيئة prod: لا تسجل شيئًا لكنها تستدعي وظيفة السجل

_console.info (بيئة التطوير) _ ؛ 1.863s لـ 10.000 سجل. (0،1893 مللي ثانية لكل منهما)
_logger.info (بيئة التطوير) _: 7.980 ثانية لـ 10.000 سجل. (0.7980 مللي ثانية لكل منهما)

_logger.info (بيئة الإنتاج) _ ؛ 3.731 ثانية لكل 10.000 سجل. (0.3731 مللي ثانية لكل منهما)

هذا يعني أنك إذا استخدمت وظيفتي لإسكات قطع الأشجار في الإنتاج ، فسيظل لديك رمز متزامن يعمل لمدة 0.3731 مللي ثانية (من المحتمل أن تكون أعلى). قد لا تكون مشكلة في الأداء ، ولكن إذا كان لديك بضع مئات من السجلات التي لا تعمل في الإنتاج ، فقد يتسبب ذلك في تأخر تطبيق الويب الخاص بك.

أي طريقة لاستخدام Winston للاستمرار في تسجيل الدخول إلى نظام الملفات في جانب المتصفح؟

لدي تطبيق React وأريد تخزين سجلات جانب العميل في نظام الملفات. يرجى التفضل باقتراح بعض الأفكار.

شكرا لك مقدما.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات