gelf-pro
- Bibliothèque client Graylog2 pour Node.js.
Envoie les journaux au serveur Graylog2 au format GELF (Graylog Extended Log Format).
Caractéristiques:
"dependencies": {
"gelf-pro": "~1.3" // see the "releases" section
}
npm install gelf-pro
( TOUTES les versions de node.js sont prises en charge [0.x à 2x.x] :)
La bibliothèque dépend de : lodash#~4.17
var log = require ( 'gelf-pro' ) ;
Avertissement
Pour garantir un comportement cohérent, aucun des adaptateurs existants ne réutilise la connexion socket . La réutilisation des connexions socket peut entraîner une fuite de ressources, une complexité dans la gestion des états, des problèmes de concurrence, des risques de sécurité et peut ne pas toujours apporter des avantages significatifs en termes de performances. Il est souvent plus simple et plus sûr d'établir de nouvelles connexions selon les besoins plutôt que de réutiliser celles existantes, garantissant ainsi une meilleure utilisation des ressources et réduisant les complications potentielles dans la communication réseau.
Il existe plusieurs (1, 2) variantes que vous pouvez emprunter et créer un nouvel adaptateur. Voir la section connexe.
GELF UDP
GELF TCP
(avec Null frame delimiter
)GELF TCP
(avec Null frame delimiter
et Enable TLS
) Note
Au sein d'un réseau plus ou moins stable (ce qui est le plus probable), je recommanderais d'utiliser l'adaptateur udp
. Je le recommanderais également pour un projet de charge moyenne à élevée. Pour les informations sensibles, l'adaptateur tcp-tls
est recommandé.
// 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
fusionne les données. Vous pouvez donc l’appeler plusieurs fois.
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
Dans le cas où extra
est un objet simple, la bibliothèque le convertit dans un format lisible. Les autres valeurs sont converties en chaîne. Le format acceptable d'une clé est : ^[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)'}
Parfois, nous devons rejeter un message qui n'est pas adapté à l'environnement actuel. Il NOT
possible de modifier les données.
log . setConfig ( {
filter : [
function ( message ) { // rejects a "debug" message
return ( message . level < 7 ) ;
}
]
} ) ;
transforming
se produit après filtering
. Il est possible de modifier les données.
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
a lieu après transforming
. Il NOT
possible de modifier les données.
log . setConfig ( {
broadcast : [
function ( message ) { // broadcasting to console
console [ message . level > 3 ? 'log' : 'error' ] ( message . short_message , message ) ;
}
]
} ) ;
Défaut:
{emergency: 0, alert: 1, critical: 2, error: 3, warning: 4, notice: 5, info: 6, debug: 7}
Exemple : log.emergency(...)
, log.critical(...)
, etc.
Exemple personnalisé : {alert: 0, notice: 1, ...}
Vous pouvez forcer l'utilisation d'un adaptateur personnalisé en définissant l' adapter
juste après l'initialisation. La signature peut être trouvée ici.
var log = require ( 'gelf-pro' ) ;
var myFancyAdapter = require ( '...' ) ;
log . adapter = myFancyAdapter ;
// (!) adapterName and adapterOptions will be ignored
Par défaut : {log: 'debug', warn: 'warning'}
Exemple : log.log(...) -> log.debug(...)
, log.warn(...) -> log.warning(...)
, etc.
Exemple personnalisé : {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