Узел.консоль js.log() в txt-файле

У меня есть еще один вопрос (последний вопрос). На данный момент я работаю над узлом.JS project и в этом у меня много

5 ответов


Я бы использовал библиотеку вместо повторного изобретения колеса. Я искал log4j-введите библиотеку на npm, и она придумала https://github.com/nomiddlename/log4js-node

если вы хотите войти в консоль и файл:

var log4js = require('log4js');
log4js.configure({
  appenders: [
    { type: 'console' },
    { type: 'file', filename: 'logs/cheese.log', category: 'cheese' }
  ]
});

теперь ваш код может создать новый регистратор с

var logger = log4js.getLogger('cheese'); 

и используйте регистратор в своем коде

logger.warn('Cheese is quite smelly.');
logger.info('Cheese is Gouda.');
logger.debug('Cheese is not a food.');

просто запустите сценарий в вашем терминале, как это...

node script-file.js > log-file.txt

это говорит оболочке написать стандартный вывод команды node script-file.js в файл журнала вместо файла по умолчанию, который печатает его на консоли.

это называется перенаправление и очень мощный. Допустим, вы хотите записать все ошибки в отдельный файл...

node script-file.js >log-file.txt 2>error-file.txt

теперь все console.log написано log-file.txt и console.error написано error-file.txt


вы можете попробовать переопределить встроенный console.log сделать что-то другое.

var originalLog = console.log;

console.log = function(str){
  originalLog(str);
  // Your extra code
}

однако при этом originalLog в основной области, поэтому вы должны попробовать обернуть его в функцию. Это называется закрытием, и вы можете прочитать больше о них здесь.

(function(){
   var originalLog = console.log;

  console.log = function(str){
  originalLog(str);
  // Your extra code
})();

для записи файлов, см. этой и StackOverflow вопрос, и переопределить console.log даже лучше, чем то, как я показал, см. этой. Объединение этих двух ответы помогут вам найти наилучшее решение.


@activedecay's ответ, кажется, путь. Однако, по состоянию april 30th 2018, у меня были проблемы с этой конкретной моделью (узел разбился из-за структуры объекта, переданного .configure, который не работает в последней версии). Несмотря на это, мне удалось обойти обновленное решение, спасибо nodejs сообщения отладки...

const myLoggers = require('log4js');

myLoggers.configure({
    appenders: { mylogger: { type:"file", filename: "path_to_file/filename" } },
    categories: { default: { appenders:["mylogger"], level:"ALL" } }
});
const logger = myLoggers.getLogger("default");

теперь, если вы хотите войти в этот файл, вы можете сделать это просто как activedecay показала ты:

logger.warn('Cheese is quite smelly.');
logger.info('Cheese is Gouda.');
logger.debug('Cheese is not a food.');

это, однако, не будет регистрировать ничего на консоли, и поскольку я не понял, как реализовать несколько приложений в одном регистраторе, вы все равно можете реализовать старый добрый console.log();

PD: я знаю, что это несколько старый поток, и что конкретная проблема OP уже решена, но так как я пришел сюда с той же целью, я могу также оставить свой опыт, чтобы помочь кому-либо посетить этот поток в будущем


просто напишите свою собственную функцию журнала:

function log(message) {
   console.log(message);
   fs.writeFileSync(...);
}

затем замените все существующие вызовы на console.log() С log().