Winston: لم يتم إنشاء ملفات السجل

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

نظام التشغيل: Ubuntu 14.04
NodeJS: 6.2.0
وينستون: 2.2.0

لا يُنشئ الرمز التالي ملف سجل:

const logger = new Winston.Logger({
    level: 'verbose',
    transports: [
      new Winston.transports.Console({
        timestamp: true
      }),
      new Winston.transports.File({
        filename: 'app.log',
        timestamp: true
      })
    ]
  });

logger.info('Holla');

يتم تسجيله في الغرامة الطرفية:

2016-05-26T13:11:49.927Z - info: Holla

ولكن لم يتم إنشاء ملف سجل.

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

لقد واجهت هذه المشكلة للتو. يجب أن يوجد الدليل أولاً. سيقوم Winston بإنشاء ملفات جديدة لك ، ولكن لا يبدو أنه ينشئ أدلة جديدة لك (على سبيل المثال ، تحتاج إلى إنشاء دليل "logs" إذا كنت تحاول تسجيل الدخول إلى ملف موجود في logs / app.js)

ال 27 كومينتر

+1

+1

+1

+1

يبدو أن هناك مشكلة في العقدة 6 في fs.stat ()
لسبب ما لم يتم تنفيذ رد الاتصال fs.stat ()

    fs.stat(fullname, function (err, stats) {
      if (err) {
        if (err.code !== 'ENOENT') {
          return self.emit('error', err);
        }
        return createAndFlush(0);
      }

      if (!stats || (self.maxsize && stats.size >= self.maxsize)) {
        //
        // If `stats.size` is greater than the `maxsize` for
        // this instance then try again
        //
        return self._incFile(function() {
          checkFile(self._getFile());
        });
      }

      createAndFlush(stats.size);
    });
  })(this._getFile()); 

هل تم إصلاحه؟

لقد أصلحت هذه المشكلة بإعطاء المسار المطلق على هذا النحو:
winston.add(winston.transports.File, { filename: $ {__ dirname} /logs/appError.log })

هذا العمل بالنسبة لي. لقد واجهت مشكلة مؤخرًا في مشروع مع Winston باستخدام Atom حيث لم تكن ملفات .gitignore تظهر في دليل ملف المشروع في Atom بسبب إعداد محدث في حزمة عرض الشجرة ... (الخيار: إخفاء VCS Ignored الملفات)

_استخدام Node 6.2.2 و Winston 2.2.0._

الشفرة:

'use strict';

let Winston = require('winston');


const logger = new Winston.Logger({
    level: 'verbose',
    transports: [
      new Winston.transports.Console({
        timestamp: true
      }),
      new Winston.transports.File({
        filename: 'app.log',
        timestamp: true
      })
    ]
  });

logger.info('Holla');

إنشاء ملف app.log بإخراج: {"level":"info","message":"Holla","timestamp":"2016-07-01T19:29:14.035Z"} وتسجيلات لوحدة التحكم بـ 2016-07-01T19:29:14.034Z - info: Holla

لقد واجهت هذه المشكلة للتو. يجب أن يوجد الدليل أولاً. سيقوم Winston بإنشاء ملفات جديدة لك ، ولكن لا يبدو أنه ينشئ أدلة جديدة لك (على سبيل المثال ، تحتاج إلى إنشاء دليل "logs" إذا كنت تحاول تسجيل الدخول إلى ملف موجود في logs / app.js)

فحص Wish winston ما إذا كان مجلد / دليل السجل موجودًا ، ثم إنشاء مجلد / دليل سجل في حالة عدم وجوده أثناء بدء التشغيل. أعتقد أن FS يمكن أن تفعل هذا بشكل صحيح؟

+1

+1

+1

if (!fs.existsSync('path') {
    fs.mkdirSync('path');
}

http://thisdavej.com/using-winston-a-versatile-logging-library-for-node-js/

كنت أواجه هذه المشكلة وقمت بحلها باستخدام الشرطة المائلة المزدوجة:

        Logger.loggerInfo = new Winston.Logger({
            level: 'info',
            transports: [
                new Winston.transports.File({
                    filename: process.cwd() + '\\logs\\info.log',
                    timestamp: true
                })
            ]
        });

لقد أجريت العديد من الاختبارات باستخدام العديد من آليات التسجيل المتقدمة (بما في ذلك winston) ويبدو أن المسجلين غير قادرين على الكتابة في الملف إذا أجريت خروجًا نظيفًا (process.exit (0)).
إزالة المخرج النظيف يحل المشكلة.

fvuilleumier أنت على حق ، شكرًا ، لكن الإزالة ليست ملائمة لأدوات CLI على سبيل المثال. لكن استخدام process.exitCode = 0 (أو أي رمز) يعمل بشكل مثالي لأنه يسمح للحلقة بالانتهاء برشاقة.

هناك مثال لإنشاء ملف

const filename = path.join(__dirname, 'created-logfile.log');

const logger = winston.createLogger({
  transports: [
    new winston.transports.Console(),
    new winston.transports.File({ filename })
  ]
});

مثال على إنشاء ملف

fvuilleumiernicosommi ولكن ماذا عن إذا كنت تريد الخروج من التطبيق بعد أن قام بتسجيل خطأ؟ هل تمكنت من العثور على جولة؟

danbrownbox @ في نهاية اليوم ، يعد البرنامج النصي js مجرد ملف يتم تنفيذه حتى النهاية ، لذلك إذا كنت تريد الخروج من التطبيق بعد سطر معين ، فأنت تحتاج فقط إلى إنشاء تدفق تنفيذ مناسب لوظيفتك

لا يعمل مع المسار النسبي على جهاز Mac الخاص بي ، ولكنه ينشئ ملفًا إذا تم توفير المسار المطلق.

سواء كنت أستخدم المطلق أو النسبي ، لا يهم. إنه لا يعمل بالنسبة لي عند إضافة النقل ديناميكيًا.

function createLogFile(appName) {
  pathUtils.ensureDirectoryExists('logs');
  pathUtils.ensureDirectoryExists(`logs/${appName}`);
  winston.add(winston.transports.File, {
    level: 'debug',
    //filename: `logs/${appName}/export-${Date.now()}.log`,
    //filename: `${__dirname}/logs/${appName}/export-${Date.now()}.log`,
    filename: `${process.cwd()}/logs/${appName}/export-${Date.now()}.log`,
    json: false,
    formatter: _formatLog()
  });
}

ومع ذلك ، إذا أضفت هذا النقل في createLogger() فإنه يعمل مع القيمة المطلقة.

هذه الإجابة تعمل بالنسبة لي.
هذا هو الكود الخاص بي:
""
const winston = تتطلب ('winston') ؛
const logDir = 'سجلات' ؛
const fs = تتطلب ('fs') ؛

إذا (! fs.existsSync (logDir)) {
fs.mkdirSync (logDir) ؛
}

const logger = winston.createLogger ({
المستوى: "معلومات" ،
التنسيق: winston.format.json () ،
exitOnError: خطأ ،
النقل: [
جديد (يتطلب ('winston-daily-rotate-file')) ({
اسم الملف: ${logDir}/logs.log ،
نمط التاريخ: "YYYY-MM-DD-HH" ،
أرشيف مضغوط: صحيح ،
المستوى: "سخيف"
}) ،
جديد (يتطلب ('winston-daily-rotate-file')) ({
اسم الملف: ${logDir}/errors.log ،
نمط التاريخ: "YYYY-MM-DD-HH" ،
أرشيف مضغوط: صحيح ،
المستوى: "خطأ"
})
] ،
}) ؛

تصدير {المسجل} ؛

logger.silly ("اختبار سخيف") ؛
logger.info ("اختبار المعلومات") ؛
logger.warn ("اختبار التحذير") ؛
logger.error ("اختبار الخطأ") ؛
""

أنا المؤلف الأصلي لهذه المشكلة (حساب مختلف). لقد عدت ... لأن لدي نفس المشكلة ونسيت كيف حللتها 🤣

هل تستخدم أحدث [email protected] ؟ هل تأكدت من وجود الدليل في المكان الذي تريد أن يكون ملف السجل فيه ( winston لن يقوم بإنشاء dirs لك ، على الرغم من أننا نقبل PR مما يجعل هذا خيارًا أو حتى السلوك الافتراضي). من المحتمل أن نغلق هذه المشكلة القديمة بمجرد أن نتمكن من تشغيلك مرة أخرى :)

سأكون على استعداد للعمل في العلاقات العامة من أجل هذا في وقت فراغي ، لذا اترك الأمر معي 👍

رائع! 👍 عند إغلاق هذا ، يمكننا تتبع عناصر الدليل في # 1465. يجب اختبار المشكلات المنفصلة مقابل master وفتحها كمشكلات جديدة إذا استمرت المشكلات. شكرا!

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