Узел.консоль 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()
.