gelf-pro
- مكتبة عملاء Graylog2 لـ Node.js.
يرسل السجلات إلى خادم Graylog2 بتنسيق GELF (تنسيق السجل الموسع Graylog).
سمات:
"dependencies": {
"gelf-pro": "~1.3" // see the "releases" section
}
npm install gelf-pro
( جميع إصدارات Node.js مدعومة [0.x إلى 2x.x] :)
تعتمد المكتبة على: lodash#~4.17
var log = require ( 'gelf-pro' ) ;
تحذير
لضمان السلوك المتسق، لا يقوم أي من المحولات الموجودة بإعادة استخدام اتصال مأخذ التوصيل . يمكن أن تؤدي إعادة استخدام اتصالات مأخذ التوصيل إلى تسرب الموارد، والتعقيد في إدارة الحالة، ومشكلات التزامن، والمخاطر الأمنية، وقد لا توفر دائمًا فوائد كبيرة في الأداء. غالبًا ما يكون إنشاء اتصالات جديدة حسب الحاجة أكثر بساطة وأمانًا بدلاً من إعادة استخدام الاتصالات الحالية، مما يضمن استخدامًا أفضل للموارد وتقليل التعقيدات المحتملة في اتصالات الشبكة.
هناك العديد من المتغيرات (1، 2) المتاحة لك للاقتراض منها وإنشاء محول جديد. انظر القسم ذو الصلة.
GELF UDP
GELF TCP
(مع Null frame delimiter
)GELF TCP
(مع Null frame delimiter
Enable TLS
) ملحوظة
ضمن شبكة أكثر أو أقل استقرارا (وهو على الأرجح)، أوصي باستخدام محول udp
. أود أيضًا أن أوصي به لمشروع متوسط إلى عالي التحميل. للحصول على معلومات حساسة، يوصى باستخدام محول tcp-tls
.
// 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
بدمج البيانات. لذلك، يمكنك الاتصال به عدة مرات.
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
في حالة كون extra
كائنًا عاديًا، تقوم المكتبة بتحويله إلى تنسيق قابل للقراءة. يتم تحويل القيم الأخرى إلى سلسلة. التنسيق المقبول للمفتاح هو: ^[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)'}
في بعض الأحيان يتعين علينا تجاهل رسالة غير مناسبة للبيئة الحالية. NOT
من الممكن تعديل البيانات.
log . setConfig ( {
filter : [
function ( message ) { // rejects a "debug" message
return ( message . level < 7 ) ;
}
]
} ) ;
يحدث transforming
بعد filtering
. من الممكن تعديل البيانات.
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
يحدث بعد transforming
. NOT
من الممكن تعديل البيانات.
log . setConfig ( {
broadcast : [
function ( message ) { // broadcasting to console
console [ message . level > 3 ? 'log' : 'error' ] ( message . short_message , message ) ;
}
]
} ) ;
تقصير:
{emergency: 0, alert: 1, critical: 2, error: 3, warning: 4, notice: 5, info: 6, debug: 7}
على سبيل المثال: log.emergency(...)
و log.critical(...)
وما إلى ذلك.
مثال مخصص: {alert: 0, notice: 1, ...}
يمكنك فرض استخدام محول مخصص عن طريق ضبط adapter
مباشرة بعد التهيئة. يمكن العثور على التوقيع هنا.
var log = require ( 'gelf-pro' ) ;
var myFancyAdapter = require ( '...' ) ;
log . adapter = myFancyAdapter ;
// (!) adapterName and adapterOptions will be ignored
الافتراضي: {log: 'debug', warn: 'warning'}
مثال: log.log(...) -> log.debug(...)
و log.warn(...) -> log.warning(...)
وما إلى ذلك.
مثال مخصص: {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
معهد ماساتشوستس للتكنولوجيا