如何从 vscode 扩展写入日志?

     2023-02-15     58

关键词:

【中文标题】如何从 vscode 扩展写入日志?【英文标题】:How to write to log from vscode extension? 【发布时间】:2016-03-09 04:59:51 【问题描述】:

我正在尝试为 VSCode 开发带有语言服务器的扩展。我试图弄清楚如何从扩展的语言服务器部分编写文本以记录日志。 console.log 什么也没产生

【问题讨论】:

【参考方案1】:

在服务器端尝试使用 connection.console.log。

// Create a connection for the server. The connection uses 
// stdin / stdout for message passing
let connection: IConnection = createConnection(process.stdin, process.stdout);
connection.console.log(`Console test.`);

在客户端的调试控制台中显示的消息。

对于客户端,简单的 console.log 对我来说效果很好。

【讨论】:

IConnection 是vscode-languageserver-node 模块的一部分。【参考方案2】:

您必须在客户端扩展代码中的客户端选项上设置outputChannelName 属性:

let clientOptions: LanguageClientOptions = 
  outputChannelName: 'XYZ Language Server',
;

完成后,您可以使用console.log(),它将显示在 VSCode 扩展输出面板中。

【讨论】:

【参考方案3】:

语言服务器协议支持日志,使用通知window/logMessage从服务器发送日志消息,VS Code将在输出面板中显示服务器的日志,在与启动服务器的语言客户端对应的通道中。

【讨论】:

【参考方案4】:

作为更新,您可以使用vscode.window.createOutputChannel 创建输出容器,然后使用appendLine 方法写入它。

    //Create output channel
    let orange = vscode.window.createOutputChannel("Orange");

    //Write to output.
    orange.appendLine("I am a banana.");

【讨论】:

这行得通,但我无法让它在附加行时切换到Orange 频道。其他扩展似乎有办法自动切换频道。 这个回复有点晚了,不过你可以打电话orange.show();让输出通道显示出来。 @Kugelblitz 哇,谢谢,我花了好几个小时寻找调试窗口,哈哈 那个躺着的香蕉/橙子! :)【参考方案5】:

只需打开 vscode 并转到菜单“帮助”->“切换开发者工具”,控制台就会显示在右侧窗口中。

【讨论】:

【参考方案6】:

谢谢大家!



export let config: any = ;
export function getConfig() 

    //debug
    config.debug = workspace.getConfiguration().get('VBI.debug');
    config.debugToChannel = workspace.getConfiguration().get('VBI.debugToChannel'); //Instead into dev-tools-console

    return config;





/**
 * @param cat Type String --> define Cathegory [info,warn,error]
 * @param o   Rest Parameter, Type Any --> Data to Log
 */
export let info = vscode.window.createOutputChannel("VBI-Info");
export function log(cat: string, ...o: any) 

    function mapObject(obj: any) 

        switch (typeof obj) 
            case 'undefined':
                return 'undefined';

            case 'string':
                return obj;

            case 'number':
                return obj.toString;

            case 'object':
                let ret: string = '';
                for (const [key, value] of Object.entries(obj)) 
                    ret += (`$key: $value\n`);
                
                return ret;

            default:
                return obj; //function,symbol,boolean

        

    

    if (config.debug) 
        if (config.debugToChannel) 

            
            
            switch (cat.toLowerCase()) 
                case 'info':
                    
                    info.appendLine('INFO:');
                    o.map((args: any) => 
                        info.appendLine('' + mapObject(args));
                    );
                    info.show();
                    return;
                    
                case 'warn':
                    info.appendLine('WARN:');
                    o.map((args: any) => 
                        info.appendLine('' + mapObject(args));
                    );
                    info.show();
                    return;

                case 'error':
                    let err:string=''; 
                    info.appendLine('ERROR: ');
                    //err += mapObject(cat) + ": \r\n";
                    o.map((args: any) => 
                        err += mapObject(args);
                    );
                    info.appendLine(err);
                    vscode.window.showErrorMessage(err);//.replace(/(\r\n|\n|\r)/gm,"")
                    info.show();
                    return;
                    
                default:
                    
                    info.appendLine('INFO-Other:');
                    info.appendLine(mapObject(cat));
                    o.map((args: any) => 
                        info.appendLine('' + mapObject(args));
                    );
                    info.show();
                    return;
            

        
        else 
            switch (cat.toLowerCase()) 
                case 'info':
                    console.log('INFO:', o);
                    return;
                case 'warn':
                    console.log('WARNING:', o);
                    return;
                case 'error':
                    console.log('ERROR:', o);
                    return;
                default:
                    console.log('log:',cat, o);
                    return;
            
        
    


测试:

import * as func from './functions';
import  config  from './functions';
func.getConfig();
let text = `debugToChannel:$config.debugToChannel\n`;

            func.log('info','vbi-format',text);
            func.log('warn','vbi-format',text);
            func.log('error','vbi-format',text);

【讨论】:

您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。

如何从 VSCode 扩展运行系统命令

】如何从VSCode扩展运行系统命令【英文标题】:HowtorunasystemcommandfromVSCodeextension【发布时间】:2017-08-1720:24:30【问题描述】:我正在尝试创建一个简单的VSCode扩展,以便在打开文件夹时运行一组命令。基本上这些命令将设置我们... 查看详情

如何从 VSCode 中的“保存格式”中排除文件扩展名和语言?

】如何从VSCode中的“保存格式”中排除文件扩展名和语言?【英文标题】:Howtoexcludefileextensionsandlanguagesfrom"formatonsave"inVSCode?【发布时间】:2017-12-0312:28:24【问题描述】:目前在VSCode设置中,您可以配置保存时的格式如下... 查看详情

如何从 Startup.cs 中写入日志?

】如何从Startup.cs中写入日志?【英文标题】:HowdoIwritelogsfromwithinStartup.cs?【发布时间】:2016-12-2216:27:22【问题描述】:为了调试在启动时失败的.NETCore应用程序,我想从startup.cs文件中写入日志。我在文件中有日志记录设置,可... 查看详情

扩展的 VSCode 错误日志在哪里?

】扩展的VSCode错误日志在哪里?【英文标题】:WherearetheVSCodeerrorlogsforextensions?【发布时间】:2017-10-2613:29:04【问题描述】:当我收到扩展错误时,我无法知道错误发生的原因。【问题讨论】:【参考方案1】:您可能正在寻找:c... 查看详情

vscode文件写入中文乱码

C语言在vscode中写入中文时出现乱码:  网上有些方法,但是试过没有用,还是显示乱码    以下方法亲测有效:  扩展中搜索"gbk",安装该扩展,中文就可以正常显示了   查看详情

可以从命令行调用 VSCode 扩展命令吗?

】可以从命令行调用VSCode扩展命令吗?【英文标题】:PossibletoinvokeaVSCodeextensioncommandfromcommandline?【发布时间】:2019-06-2121:23:10【问题描述】:是否可以从终端调用VSCode扩展命令?我知道code命令和ExtensionsManagement类别下的所有开... 查看详情

如何将日志写入 Visual Studio 输出窗口?

】如何将日志写入VisualStudio输出窗口?【英文标题】:HowtowriteloggingstotheVisualStudiooutputwindow?【发布时间】:2018-01-3007:48:11【问题描述】:我想用一种日志记录来扩展我的应用程序,可以选择记录到文件和/或记录到“VisualStudio”... 查看详情

水平扩展写入时如何避免并发问题?

】水平扩展写入时如何避免并发问题?【英文标题】:Howtoavoidconcurrencyissueswhenscalingwriteshorizontally?【发布时间】:2015-05-0922:37:09【问题描述】:假设有一个工作服务从队列接收消息,从文档数据库中读取具有指定Id的产品,根据... 查看详情

从 chrome 扩展写入数据库

...问题描述】:这可能是一个广泛的问题,但我找不到关于如何做到这一点的明确解释(也许我只是搜索得不够好)。我正在编写一个chrome扩展程序,我需要将我从站点收集的数据写入数据库。问题是我真的不知道该怎么做或从哪... 查看详情

AWS CloudWatch Logs Stream - 如何配置 awslogs 以将每天新的日志流从同一实例写入同一日志组?

】AWSCloudWatchLogsStream-如何配置awslogs以将每天新的日志流从同一实例写入同一日志组?【英文标题】:AWSCloudWatchLogsStream-howconfigureawslogstowriteeverydaynewlogstreamtothesameloggroupfromthesameinstance?【发布时间】:2021-04-0221:26:29【问题描述】:... 查看详情

从源代码构建 VSCode 后安装扩展

】从源代码构建VSCode后安装扩展【英文标题】:InstallextensionsafterbuildingVSCodefromsource【发布时间】:2016-06-1602:13:59【问题描述】:我从源代码构建了vscode,因为我想为它添加一个新功能。不幸的是,我似乎无法安装扩展。我使用gu... 查看详情

如何将流利的位输入日志写入本地主机系统日志服务器

】如何将流利的位输入日志写入本地主机系统日志服务器【英文标题】:Howtowritefluentbitinputlogstolocalhostsyslogserver【发布时间】:2021-09-2015:56:17【问题描述】:我正在从docker容器化应用程序收集日志。我能够将日志带到stdout输出插... 查看详情

VSCode 扩展 - 如何更改文件的文本

】VSCode扩展-如何更改文件的文本【英文标题】:VSCodeextension-howtoalterfile\'stext【发布时间】:2019-05-0406:34:27【问题描述】:我有一个扩展程序可以抓取打开文件的文本并对其进行更改。文本更改后,如何将其放回VSCode中显示的文... 查看详情

如何在 vscode 上安装扩展

】如何在vscode上安装扩展【英文标题】:Howtoinstallextensionsonvscode【发布时间】:2016-06-0712:25:27【问题描述】:我最初在raspberryPi3上启动了vscode(linux),并想安装cpptool。所以我按了:Ctrl+Shift+p和命令extinstallcpptool但后来显示没有Commn... 查看详情

具有特定配置设置的单元测试 vscode 扩展

】具有特定配置设置的单元测试vscode扩展【英文标题】:Unittestvscodeextensionwithspecificconfigurationsettings【发布时间】:2018-08-1317:31:17【问题描述】:我有一个使用配置设置的vscode扩展(Typescript)。我想根据特定的配置设置对我的扩... 查看详情

如何创建一个简单的vscode扩展

注:本文提到的代码示例下载地址>HowtocreateasimpleextensionforVSCodeVSCode是微软推出的一款轻量级的代码编辑器,免费,开源,支持多种语言,还能安装各种扩展。没有用过的同学可以下载下来感受一下,具体参见官方文档。假设VS... 查看详情

如何在 Docker 容器中运行 VS Code 的扩展开发主机来测试我的 vscode 扩展?

】如何在Docker容器中运行VSCode的扩展开发主机来测试我的vscode扩展?【英文标题】:HowcanIrunVSCode\'sExtensionDevelopmentHostinaDockercontainertotestmyvscodeextension?【发布时间】:2019-06-1200:17:59【问题描述】:我正在尝试使用GitHubActions测试我... 查看详情

如何使用 VSCode 扩展添加上下文菜单?

】如何使用VSCode扩展添加上下文菜单?【英文标题】:HowtoaddcontextmenuwithVSCodeextension?【发布时间】:2017-05-1423:50:36【问题描述】:如何添加上下文菜单?(在资源管理器和/或编辑器中)我尝试了以下不起作用:"command":"extension.sa... 查看详情