在Electron应用程序中使用console.log()

在Electron应用程序中使用console.log(),electron,Electron,如何在我的Electron应用程序中将数据或消息记录到控制台 这个非常基本的hello world默认情况下会打开开发工具,因为我无法使用console.log('hi')。有电子的替代品吗 main.js var-app=require('app'); var BrowserWindow=require('browser-window'); require('crash-reporter')。start(); var mainfown=null; app.on('window-all-clos

如何在我的Electron应用程序中将数据或消息记录到控制台

这个非常基本的hello world默认情况下会打开开发工具,因为我无法使用
console.log('hi')
。有电子的替代品吗

main.js

var-app=require('app');
var BrowserWindow=require('browser-window');
require('crash-reporter')。start();
var mainfown=null;
app.on('window-all-closed',function(){
//MacOSX-close是通过Cmd+Q显式完成的,而不仅仅是关闭窗口
if(process.platform!=“darwin”){
app.quit();
}
});
app.on('ready',function(){
主窗口=新浏览器窗口({宽度:800,高度:600});
mainWindow.loadUrl('file://'+\uu dirname+'/index.html');
mainWindow.openDevTools();
mainWindow.on('closed',function(){
主窗口=空;
});
});

console.log
工作,但它的登录位置取决于您是从主进程还是渲染器进程调用它

如果从渲染器进程调用它(即
index.html
文件中包含的JavaScript),它将被记录到“开发工具”窗口


如果从主进程(即在
main.js
中)调用它,它的工作方式将与在节点中的工作方式相同-它将登录到终端窗口。如果您使用
Electron从终端启动Electron进程。
您可以看到
控制台。在那里记录来自主进程的调用。

您还可以在windows中添加环境变量:

ELECTRON_ENABLE_LOGGING=1

这将向终端输出控制台消息。

还有另一种从渲染器进程内部登录控制台的方法。如果这是Electron,您可以访问节点的本机模块。这包括
控制台
模块

var nodeConsole=require('console');
var myConsole=newnodeconsole.Console(process.stdout,process.stderr);
myConsole.log('helloworld!');
当从渲染器进程内部运行此代码时,您将获得
helloworld

有关
控制台
模块的更多文档,请参阅。

process.stdout.write('输出到命令提示符控制台或节点js')

除了M.Damian的答案之外,我还介绍了如何设置它,以便可以从任何渲染器访问主进程的控制台

在主应用程序中,添加:

const electron=require('electron');
const app=electron.app;
const console=require('console');
...
app.console=新的console.console(process.stdout,process.stderr);
在任何渲染器中,都可以添加:

const remote=require('electron')。remote;
const app=remote.app;
...
app.console.log('这将输出到主进程控制台');

另一种可能是通过以下方式访问主流程控制台:

const con=require('electron').remote.getGlobal('console'))
con.log('这将输出到主进程控制台')

这是cscsandy5对一些附加信息的回答的后续,信息来自

这段代码非常适用于将一条简单的调试消息输出到您启动electron应用程序的终端窗口,这是console.log的构建基础

下面是一个jQuery脚本的示例片段(基于tutorialspoint electron教程),该脚本将在每次按下按钮时向终端写入hello(警告:您需要在输出字符串中添加自己的换行符!)

let$=require('jquery'))
var=0;
$(函数(){
$('#countbtn')。单击(函数(){

//输出hello您可以使用npm包电子日志

它将在本机操作系统日志中记录错误、警告、信息、详细信息、调试和愚蠢的输出

var log=require('electron-log');
log.info('Hello,log');
log.error(“该死的,一个错误”);
一切都是真的。重要的是Electron是如何启动的。如果使用package.json文件中的标准脚本,它将不起作用。要使
console.log()
起作用,请使用此新脚本替换旧脚本

旧的:

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

"scripts": {
    "start": ".\\node_modules\\electron\\dist\\electron.exe ."
}
现在,所有
console.log()
调用也显示在终端中。

这就是我使用的:

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
)相同:


来源:在logger.js文件中,您可以看到一个真实的用例。

很抱歉提出一个旧线程,但这是“如何将console.log输出到终端”(或类似搜索)的最高结果

对于希望对终端输出内容获得更多控制的任何人,您可以使用WebContent。在('console-message')上,如下所示:

见:


console.log()
可以很好地进行调试。由于
electron
构建在浏览器之上,因此它具有
DevTools
支持,您可以使用DevTools进行调试。但是,
console.log()
方法有一种歇斯底里的行为。当您调用
console.log()时
从electron app的
主进程
中,它将输出到您刚刚启动应用程序的终端窗口,当您从
渲染器进程调用它时,它将输出到DevTools控制台。

使用主浏览器窗口的开发者工具查看日志

函数logEverywhere(s){
如果(_debug==true){
控制台日志;
//mainWindow是应用程序的主浏览器窗口
if(mainWindow&&mainWindow.WebContent){
mainWindow.webContents.executeJavaScript(`console.log(${s}')`);
}
}
}
示例
logEverywhere('test')
将在主浏览器窗口的开发人员工具的控制台面板中输出
//test


您可能需要增强此方法以接受多个参数(您可以通过es6使用spread operator完成)

好吧,现在是2019年,我不敢相信上面的所有答案中没有人提到此技巧。 好的,s
"scripts": {
    "start": ".\\node_modules\\electron\\dist\\electron.exe ."
}
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 + "');");
}
log('Error', { msg: 'a common log message' })
log('hello')
mainWindow.webContents.on('console-message', (event, level, message, line, sourceId) => {
      console.log(message + " " +sourceId+" ("+line+")");
});