/
rc.console

rc.console

console

Dieses Objekt beinhaltet Methoden ähnlich wie das console Objekt in nodejs, allerdings in ganz einfacher Form (keine Formatierung etc.)

  • rc.console.error(text) – Ausgabe mit Level=0 und Serverity=error

  • rc.console.warn(text)– Ausgabe mit Level=3 und Serverity=warning

  • rc.console.info(text)– Ausgabe mit Level=3 und Serverity=informational

  • rc.console.log(text) – Ausgabe mit Level=4 und Serverity=success

  • rc.console.debug(text)– Ausgabe mit Level=5 und Serverity=success

Die obigen Methoden schreiben den Text ins serverseitige enaio® Protokoll (Log-Channel 15 für normale Flow-Protokollierung, bzw. Log-Channel 3 für spezielles v8-Protokoll), und leiten außerdem die Texte an C++ Code, der das Skript ausführt. Der enaio® server kann zusätzlich den Text an einen Http-Server senden. Dieser Http-Server kann per Registry konfiguriert werden (ScriptEngine/V8ConsoleURL), z. B. http://127.0.0.1:8038/v8/console. Das kann für den Skript-Entwickler beim Debuggen überaus hilfreich sein. An diese URL wird ein POST Request gesendet. Das dabei übertragene JSON entspricht der Form:

{"text":"Input parameter p1 = v1","level":4,"scriptId":4}

scriptId ist eine fortlaufende Nummer und hat keine besondere Bedeutung. Es ist damit möglich, Messages unterschiedlicher Skripte zu unterscheiden.

Ein Beispiel für so einen Http-Server findet man unter http://ossvn01.optimal-systems.de/svn/blue/as1010/appserver/axsvckrn/script/v8/dbgcon (Anmeldung erforderlich). Die zwei Dateien (index.js + package.json) können in ein beliebiges Verzeichnis kopiert werden, in diesem Verzeichnis npm install ausführen, die Config-Daten (bzw. auch das Ausgabeformat) in index.js anpassen und den Server per node index.js starten. Bei Bedarf kann die Ausgabe in eine Datei umgeleitet werden und per BareTail beobachtet werden. Der Http-Server kann z. B. in einem tomcat-Server laufen.

const bodyParser = require('body-parser'); const express = require('express'); function log(text) { console.log(new Date().toISOString().substr(11,12) + ' | ' + text); } const config = { address: "127.0.0.1", port: 8038 } log('config: ' + JSON.stringify(config)); const router = express.Router(); router.post('/*', function (req, res, next) { log(req.body.text); res.status(200).send(); }); const app = express(); app.use(bodyParser.json({ limit: '1000mb' })); app.use('/v8/console',router); const server = require('http').createServer(app); server.on('error',(error) => { if (error.syscall !== 'listen') { throw error; } switch (error.code) { case 'EACCES' : console.error('Port ' + config.port + ' requires elevated privileges'); process.exit(1); break; case 'EADDRINUSE': console.error('Port ' + config.port + ' is already in use'); process.exit(1); break; default: throw error; } }); server.on('listening',() => { log('listening on port ' + server.address().port); }); server.on('close',() => { log('no more listening on port ' + config.port); }); server.listen(config.port,config.address); process.on('uncaughtException', function(err) { console.error((new Date).toUTCString() + ' uncaughtException:', err.message); console.error(err.stack); process.exit(1); }); process.on('unhandledRejection', function(reason, promise) { console.error('unhandled rejection:', reason.message || reason); });
{ "name": "dbgcon", "version": "10.10.0", "main": "index.js", "scripts": { "start": "node ./index.js" }, "dependencies": { "body-parser": "~1.13.2", "express": "~4.17.1" } }

console Objekt in globalem Scope wird von v8 auch bereitgestellt, seine Methoden haben allerdings keine Auswirkung. Falls die Schreibweise conlose.log anstatt rc.console.log unbedingt notwendig ist, kann man am Anfang des Skripts das globale console Objekt umdefinieren: console = rc.console;

Related content