Ведение журнала удаленной консоли - PullRequest
0 голосов
/ 07 декабря 2018

Я настроил Express Server с Mongo для записи журналов консоли во время отладочного тестирования приложения Electron с использованием React.

Я просто использую ajax для отправки того, что я обычно печатаю с console.log.Это прекрасно работает с отдельными событиями, которые я хочу зарегистрировать, но как экспортировать всю консоль стиля Chrome как объект, чтобы все, что попадало на консоль (например, сообщения веб-пакета, сообщения от других компонентов и т. Д.), Было доступно как один объектчто я могу сделать POST.

По сути, это способ записи всего, что вы увидите в консоли, независимо от того, было ли это из стороннего пакета, или что я явно вошел в систему самостоятельно.Есть ли консольный дамп всех методов, которые я не вижу в документах по хрому / электрону / реагированию?

пример:

//import some debugger method to POST to server collecting logs

export function debugpost(logobject) {



$.ajax({
    type: "POST",
    url: "http://" + "192.168.0.94" + ":3000/tasks",

    headers: {

    },
    data: {
        log: logobject
    },
    success: function(data) {


    }.bind(this),
    error: function(errMsg) {
        console.log(errMsg);
    }.bind(this)
});
}

//simple way of recording logs in other component.
var testlogmessage = "This isn't right"

debugpost(testlogmessage);

Регистрация отдельных событий на сервере проста.Как сбросить всю консоль?

ОБНОВЛЕНИЕ Упомянутый ниже был связан с процессом stdout и stderr.Я попробовал рекомендованную консоль захвата пакета, а также этот фрагмент кода:

var logs = [],

hook_stream = function(_stream, fn) {
    // Reference default write method
    var old_write = _stream.write;
    // _stream now write with our shiny function
    _stream.write = fn;

    return function() {
        // reset to the default write method
        _stream.write = old_write;
    };
},

// hook up standard output
unhook_stdout = hook_stream(process.stdout, function(string, encoding, fd) {
    logs.push(string);
});

Однако оба дают мне эту ошибку при записи при использовании с реагировать:

TypeError: Cannot read property 'write' of undefined
hook_stream

Этот конкретный метод кажетсяЗаписать сторону электронного узла нормально, когда я использую его в электронном main.js.Однако я не могу заставить его работать в моих реактивных компонентах.

Ответы [ 2 ]

0 голосов
/ 17 декабря 2018

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

После того, как вы зарегистрировали свое сообщение, вы можете вызвать оригинальный метод console.log.

В следующем примере показана пользовательская реализация метода console.log.

var orgLog = console.log;

console.log = function(message) {
  alert("Intercepted -> " + message); //Call Remote API to log the object.
  //Invoke the original console.log
  return orgLog(message);
}

let a = {
  foo: "bar"
};
console.log(a);
0 голосов
/ 08 декабря 2018

Вы связываете потоки stdout , stderr в модуле process .

Взгляните на npm capture-консоль .Вам нужно будет захватить вывод консоли любого процесса рендеринга, а также основного процесса.

ОБНОВЛЕНИЕ

Похоже, электрон совершил странные вещи с процессом рендеринга стандартного потока.Вам лучше использовать специальное решение для ведения журналов, например Electron-Log , и синхронизировать журналы из записанного файла журнала.

...