Подтвердить что ты не робот

Использование console.log() в приложении Electron

Как я могу регистрировать данные или сообщения на консоли в приложении Electron?

Этот действительно приветственный мир открывает инструменты dev по умолчанию, я не могу использовать console.log('hi'). Есть ли альтернатива для Electron?

main.js

var app = require('app');
var BrowserWindow = require('browser-window');

require('crash-reporter').start();

var mainWindow = null;

app.on('window-all-closed', function() {
  // Mac OS X - close is done explicitly with Cmd + Q, not just closing windows
  if (process.platform != 'darwin') {
    app.quit();
  }
});

app.on('ready', function(){
  mainWindow = new BrowserWindow({ width: 800, height: 600});

  mainWindow.loadUrl('file://' + __dirname + '/index.html');

  mainWindow.openDevTools();

  mainWindow.on('closed', function(){
    mainWindow = null;
  });
});
4b9b3361

Ответ 1

console.log работает, но там, где он регистрируется, зависит от того, вы вызываете его из основного процесса или процесса визуализации.

Если вы вызовете его из процесса визуализации (то есть JavaScript, который включен в ваш файл index.html), он будет занесен в окно инструментов разработчика.

Если вы вызываете его из основного процесса (т.е. в main.js), он будет работать так же, как в Node, - он будет записываться в окно терминала. Если вы начинаете свой процесс Electron с терминала с помощью electron ., вы можете видеть ваши вызовы console.log от основного процесса там.

Ответ 2

Вы также можете добавить переменную окружения в окна:

ELECTRON_ENABLE_LOGGING=1

Это приведет к выводу консольных сообщений на ваш терминал.

Ответ 3

Существует другой способ входа в консоль изнутри процесса рендеринга. Учитывая, что это Electron, вы можете получить доступ к Node родным модулям. Это включает в себя модуль console.

var nodeConsole = require('console');
var myConsole = new nodeConsole.Console(process.stdout, process.stderr);
myConsole.log('Hello World!');

Когда этот код запускается из процесса рендеринга, вы получите Hello World! в терминале, на котором вы запустили Electron.

См. https://nodejs.org/api/console.html для дальнейшей документации по модулю console.

Ответ 4

Еще одна возможность - получить доступ к главной консоли процесса с помощью remote.getGlobal(name):

const con = require('electron').remote.getGlobal('console')
con.log('This will be output to the main process console.')

Ответ 5

Добавляя к М. Дамиану ответ, вот как я настроил его, чтобы я мог получить доступ к основной консоли процесса от любого средства визуализации:

в главном приложении добавьте:

const electron = require('electron');
const app = electron.app;
const console = require('console');
...
app.console = new console.Console(process.stdout, process.stderr);

в любом рендерере, который вы можете добавить:

const remote = require('electron').remote;
const app = remote.app;
...
app.console.log('This will output to the main process console.');

Ответ 6

Вы можете использовать электронный журнал пакета npm https://www.npmjs.com/package/electron-log

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

var log = require('electron-log');

log.info('Hello, log');
log.error('Damn it, an error');

Ответ 7

Это продолжение ответа cscsandy5 для получения дополнительной информации, информации из здесь

process.stdout.write('your output to command prompt console or node js ')

Этот код отлично подходит для вывода простого отладочного сообщения в окно терминала, с которого вы запустили электронное приложение, и это то, что console.log создается поверх.

Вот пример фрагмента (основанный на учебнике по tutorialspoint electon) jQuery script, который будет питать приветствие терминалу при каждом нажатии кнопки (предупреждение: вам нужно добавить свои собственные разрывы строк в строках вывода! )

let $ = require('jquery')
var clicks = 0;

$(function() {
    $('#countbtn').click(function() {
        //output hello <<<<<<<<<<<<<<<<<<<<<<<
        process.stdout.write('hello')

        $('#click-counter').text(++clicks);
    });

    $('#click-counter').text(clicks);
});

Ответ 8

process.stdout.write('your output to command prompt console or node js ')

Ответ 9

Все, что написал Алекс Уоррен, правда. Здесь важно, как запускается Электрон. Если вы используете стандартный скрипт в файле package.json, он не будет работать. Чтобы заставить console.log() работать, замените старый скрипт новым.

Старый:

"scripts": {
    "start": "electron ."
}

Новый:

"scripts": {
    "start": ".\\node_modules\\electron\\dist\\electron.exe ."
}

Теперь все вызовы console.log() отображаются и в терминале.

Ответ 10

Это то, что я использую:

let mainWindow // main window reference, you should assign it below 'mainWindow = new BrowserWindow'

function log(...data) {
  mainWindow.webContents.executeJavaScript("console.log('%cFROM MAIN', 'color: #800', '" + data + "');");
}

Пример использования (такой же как console.log):

log('Error', { msg: 'a common log message' })
log('hello')

Источник: https://github.com/fuse-box/fuse-box-electron-seed/tree/master/src/main в файле logger.js, здесь вы можете увидеть реальный вариант использования.

Ответ 11

Извините, что поднял старую ветку, но это лучший результат для "как вывести console.log на терминал" (или аналогичного поиска.

Для тех, кто хочет получить немного больше контроля над тем, что выводится на терминал, вы можете использовать webContents.on('console-message') следующим образом:

mainWindow.webContents.on('console-message', (event, level, message, line, sourceId) => {
      console.log(message + " " +sourceId+" ("+line+")");
});

Увидеть:

webContents Документация

запись webContents в документах BrowserWindow

Ответ 12

console.log() отлично подойдет для отладки. Поскольку electron построен поверх браузера, у него есть поддержка DevTools, вы можете использовать devtools для целей отладки. Однако есть истерическое поведение метода console.log(). Когда вы вызываете console.log() из main process электронного приложения, оно будет выводиться в окно терминала, откуда вы только что запустили приложение, а когда вы вызываете его из renderer process, оно будет выводиться на консоль DevTools.

Ответ 13

При этом вы можете использовать инструменты разработчика главного окна браузера для просмотра журналов

    function logEverywhere(s) {
        if (_debug === true) {
            console.log(s);
            // mainWindow is main browser window of your app
            if (mainWindow && mainWindow.webContents) {
                mainWindow.webContents.executeJavaScript('console.log("${s}")');
            }
        }
    }

Пример logEverywhere('test') выведет // test на консольную панель инструментов разработчика главного окна браузера

Возможно, вам понадобится усовершенствовать этот метод, чтобы принимать несколько аргументов (вы можете сделать это с помощью оператора распространения с помощью es6)

Ответ 14

Начиная с версии 1.17 существует более быстрый способ, чем console.log:

process.stdout.write

Эта версия работает быстрее, а с версии 1.17 также есть новая опция конфигурации запуска "outputCapture": "std", которая сообщит, что адаптер отладки отображает вывод stdout/stderr в консоли Debug.
Для получения дополнительной информации здесь документация.