Как написать в лог расширение от vscode?

Я пытаюсь разработать расширение с языковым сервером для VSCode. Я пытаюсь выяснить, как написать текст для входа из языковой серверной части расширения. console.log ничего не выдает

6 ответов

В качестве обновления вы можете использовать vscode.window.createOutputChannel чтобы создать выходной контейнер, а затем записать в него с appendLine метод.

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

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

https://i.stack.imgur.com/hWi2e.png

Просто откройте vscode и перейдите в меню «Справка» -> «Переключить инструменты разработчика», и консоль отобразится в правом окне.

На стороне сервера попробуйте использовать 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 хорошо работает для меня.

Вы должны установить outputChannelName Свойство для параметров клиента внутри кода расширения клиента:

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

Как только вы сделали это, вы можете использовать console.log() и это будет показано на панели вывода расширения VSCode.

Протокол Language Server Protocol поддерживает ведение журнала, используйте окно уведомлений /logMessage для отправки сообщений журнала с сервера, VS Code отобразит журнал сервера на панели вывода в канале, соответствующем языковому клиенту, запустившему сервер.

Спасибо ребята!

      

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);
Другие вопросы по тегам