gelf-pro
– Graylog2-Client-Bibliothek für Node.js.
Sendet Protokolle im GELF-Format (Graylog Extended Log Format) an den Graylog2-Server.
Merkmale:
"dependencies": {
"gelf-pro": "~1.3" // see the "releases" section
}
npm install gelf-pro
( ALLE node.js-Versionen werden unterstützt [0.x bis 2x.x] :)
Die Bibliothek hängt ab von: lodash#~4.17
var log = require ( 'gelf-pro' ) ;
Warnung
Um ein konsistentes Verhalten sicherzustellen, verwendet keiner der vorhandenen Adapter die Socket-Verbindung erneut . Die Wiederverwendung von Socket-Verbindungen kann zu Ressourcenverlust, Komplexität bei der Statusverwaltung, Parallelitätsproblemen und Sicherheitsrisiken führen und bietet möglicherweise nicht immer erhebliche Leistungsvorteile. Oftmals ist es einfacher und sicherer, bei Bedarf neue Verbindungen einzurichten, als bestehende wiederzuverwenden. Dies sorgt für eine bessere Ressourcennutzung und reduziert potenzielle Komplikationen bei der Netzwerkkommunikation.
Es stehen mehrere (1, 2) Varianten zur Verfügung, die Sie ausleihen und einen neuen Adapter erstellen können. Siehe entsprechenden Abschnitt.
GELF UDP
GELF TCP
(mit Null frame delimiter
)GELF TCP
(mit Null frame delimiter
und Enable TLS
) Notiz
Innerhalb eines mehr oder weniger stabilen Netzwerks (was am wahrscheinlichsten ist) würde ich die Verwendung des udp
Adapters empfehlen. Ich würde es auch für ein durchschnittliches bis hochbelastetes Projekt empfehlen. Für vertrauliche Informationen wird der tcp-tls
Adapter empfohlen.
// simple
log . setConfig ( { adapterOptions : { host : 'my.glog-server.net' } } ) ;
// advanced
log . setConfig ( {
fields : { facility : "example" , owner : "Tom (a cat)" } , // optional; default fields for all messages
filter : [ ] , // optional; filters to discard a message
transform : [ ] , // optional; transformers for a message
broadcast : [ ] , // optional; listeners of a message
levels : { } , // optional; default: see the levels section below
aliases : { } , // optional; default: see the aliases section below
adapterName : 'udp' , // optional; currently supported "udp", "tcp" and "tcp-tls"; default: udp
adapterOptions : { // this object is passed to the adapter.connect() method
// common
host : '127.0.0.1' , // optional; default: 127.0.0.1
port : 12201 , // optional; default: 12201
// ... and so on
// tcp adapter example
family : 4 , // tcp only; optional; version of IP stack; default: 4
timeout : 1000 , // tcp only; optional; default: 10000 (10 sec)
// udp adapter example
protocol : 'udp4' , // udp only; optional; udp adapter: udp4, udp6; default: udp4
// tcp-tls adapter example
key : fs . readFileSync ( 'client-key.pem' ) , // tcp-tls only; optional; only if using the client certificate authentication
cert : fs . readFileSync ( 'client-cert.pem' ) , // tcp-tls only; optional; only if using the client certificate authentication
ca : [ fs . readFileSync ( 'server-cert.pem' ) ] // tcp-tls only; optional; only for the self-signed certificate
}
} ) ;
log.setConfig
führt die Daten zusammen. Daher können Sie es mehrmals aufrufen.
var extra = { tom : 'cat' , jerry : 'mouse' , others : { spike : 1 , tyke : 1 } } ;
log . info ( "Hello world" , extra , function ( err , bytesSent ) { } ) ;
log . info ( "Hello world" , function ( err , bytesSent ) { } ) ;
log . info ( "Hello world" , extra ) ;
log . info ( "Hello world" ) ;
log . error ( 'Oooops.' , new Error ( 'An error message' ) ) ;
// ^-- extra becomes: {short_message: 'Oooops.', _error_message: 'An error message', _error_stack: Error's stack}
log . error ( new Error ( 'An error message' ) ) ;
// ^-- extra becomes: {short_message: 'An error message', full_message: Error's stack}
log . message ( new Error ( 'An error message' ) , 3 ) ; // same as previous
Falls es sich bei extra
um ein einfaches Objekt handelt, konvertiert die Bibliothek es in ein lesbares Format. Andere Werte werden in einen String umgewandelt. Das akzeptable Format eines Schlüssels ist: ^[w-]$
log . info (
'a new msg goes here' ,
{ me : { fname : 'k' , lname : 'k' , bdate : new Date ( 2000 , 01 , 01 ) } }
) ;
// ^-- extra becomes: {_me_fname: 'k', _me_lname: 'k', _me_bdate: 'Tue Feb 01 2000 00:00:00 GMT+0100 (CET)'}
Manchmal müssen wir eine Nachricht verwerfen, die für die aktuelle Umgebung nicht geeignet ist. Es ist NOT
möglich, die Daten zu ändern.
log . setConfig ( {
filter : [
function ( message ) { // rejects a "debug" message
return ( message . level < 7 ) ;
}
]
} ) ;
transforming
erfolgt nach filtering
. Es ist möglich, die Daten zu ändern.
log . setConfig ( {
transform : [
function ( message ) { // unwind an error
if ( _ . isError ( message . error ) ) {
message . error = { message : message . error . message , stack : message . error . stack } ;
}
return message ;
}
]
} ) ;
broadcasting
erfolgt nach transforming
. Es ist NOT
möglich, die Daten zu ändern.
log . setConfig ( {
broadcast : [
function ( message ) { // broadcasting to console
console [ message . level > 3 ? 'log' : 'error' ] ( message . short_message , message ) ;
}
]
} ) ;
Standard:
{emergency: 0, alert: 1, critical: 2, error: 3, warning: 4, notice: 5, info: 6, debug: 7}
Beispiel: log.emergency(...)
, log.critical(...)
usw.
Benutzerdefiniertes Beispiel: {alert: 0, notice: 1, ...}
Sie können die Verwendung eines benutzerdefinierten Adapters erzwingen, indem Sie den adapter
direkt nach der Initialisierung festlegen. Die Signatur finden Sie hier.
var log = require ( 'gelf-pro' ) ;
var myFancyAdapter = require ( '...' ) ;
log . adapter = myFancyAdapter ;
// (!) adapterName and adapterOptions will be ignored
Standard: {log: 'debug', warn: 'warning'}
Beispiel: log.log(...) -> log.debug(...)
, log.warn(...) -> log.warning(...)
usw.
Benutzerdefiniertes Beispiel: {red: 'alert', yellow: 'notice', ...}
npm install
npm test
[sudo] docker build --no-cache -t node-gelf-pro .
[sudo] docker run -ti --rm -v " ${PWD} :/opt/app " -w " /opt/app " node-gelf-pro
MIT