2023年7月7日发(作者:)
node⽇志log4js错误⽇志记录SET DEBUG=mylog:* & npm start原⽂出处:1. 默认的控制台输出我们使⽤express框架时,开发模式⽤node或者supervisor启动nodejs应⽤时,控制台都是显⽰如下的⽇志。GET /css/ 304 1msGET /css/ 304 0msGET /js/ 304 4msGET /js/ 304 6msGET /js/ 304 3msGET /cat/json/latest 200 6msGET /cat/json/master 200 4msGET /cat/json/classic 200 2msGET /about 200 6msGET /css/ 304 2msGET /css/ 304 2msGET /js/ 304 2msGET /js/ 304 1msGET /js/ 304 1msGET /js/ 304 1msGET / 304 6msGET /js/ 304 2msGET /css/ 304 1msGET /css/ 304 1msGET /js/ 304 2msGET /js/ 304 2msGET /cat/json/latest 200 3msGET /cat/json/master 200 2msGET /cat/json/classic 200 2msGET /admin/ 304 13msGET /css/ 304 3msGET /js/ 304 2msGET /css/ 304 2msGET /js/ 304 1msGET /js/ 304 2ms我们也可以在代码中,⽤()打印⼀些控制台⽇志。修改routes/ = function(req, res){ ("This is an index page!"); ('index', { title:'⾸页|', page:'index' });};访问页⾯,结果如下。This is an index page!GET / 304 19msGET /css/ 304 4msGET /css/ 304 2msGET /js/ 304 38msGET /js/ 304 29msGET /js/ 304 28ms这样的输出的结果,都是在控制台显⽰,⼀旦server重启⽇志就丢失了。对于程序开发来说,这样的输出已经够⽤了。但是在⽣产环境上,我们希望能把控制台的输出,保存到⽂件中,⽽且需要更多的信息,不仅仅是默认的简化的⽇志信息。由于express框架没有⽇志功能,我们需要引⼊log4js包来完成这个功能。2. 通过log4js输出⽇志我们先可看⼀下,通过log4js输出的⽇志是什么样⼦的,下⼀节再介绍具体的配置。This is an index page!GET / 304 17ms[2013-06-19 17:45:55.981] [INFO] normal - 127.0.0.1 - - "GET / HTTP/1.1" 304 - "localhost:3000/admin/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36"GET /css/ 304 10ms[2013-06-19 17:45:56.015] [INFO] normal - 127.0.0.1 - - "GET /css/ HTTP/1.1" 304 - "localhost:3000/admin/crawler/youku" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36"GET /css/ 304 8ms[2013-06-19 17:45:56.017] [INFO] normal - 127.0.0.1 - - "GET /css/ HTTP/1.1" 304 - "localhost:3000/admin/crawler/youku" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36"GET /js/ 304 19ms[2013-06-19 17:45:56.031] [INFO] normal - 127.0.0.1 - - "GET /js/ HTTP/1.1" 304 - "localhost:3000/admin/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36"GET /js/ 304 13ms[2013-06-19 17:45:56.037] [INFO] normal - 127.0.0.1 - - "GET /js/ HTTP/1.1" 304 - "localhost:3000/admin/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36"GET /js/ 304 20ms[2013-06-19 17:45:56.040] [INFO] normal - 127.0.0.1 - - "GET /js/ HTTP/1.1" 304 - "localhost:3000/admin/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36"相同的请求,控制台输出的结果多了很多,完整的web服务器的⽇志格式。这才是⽣产环境需要的!信息更丰富,并且与nginx和apache是⼀样的格式。3. 配置log4js与express框架集成下载log4js包~ npm install log4jslog4js@0.6.6 node_moduleslog4js├── dequeue@1.0.3├── semver@1.1.4├── async@0.1.15└── readable-stream@1.0.2修改~ vi log4js = require('log4js');ure({ appenders: [ { type: 'console' }, //控制台输出 { type: 'file', //⽂件输出 filename: 'logs/',
maxLogSize: 1024, backups:3, category: 'normal'
} ]});var logger = ger('normal');el('INFO');...//(...)//(...)(tLogger(logger, {level:}));();我需要在中进⾏log4js的配置。appenders中配置了两个输出,⼀个是控制台输出,⼀个是⽂件输出。=file的对象,指定⽂件输出位置及⽂件⼤⼩,当超过maxLogSize⼤⼩时,会⾃动⽣成⼀个新⽂件。logs的⽂件⽬录要动⼿创建。level:, 设置默认⽇志输出级别是INFO。log4js的输出级别6个: trace, debug, info, warn, error, (‘Entering cheese testing’);(‘Got cheese.’);(‘Cheese is Gouda.’);(‘Cheese is quite smelly.’);(‘Cheese is too ripe!’);(‘Cheese was breeding ground for listeria.’);如果输出级别是INFO,则不会打印出低于info级别的⽇志trace,debug,只打印info,warn,error,fatal。这样做 的好处在于,在⽣产环境中我们可能只关⼼异常和错误,并不关⼼调试信息。从⽽⼤⼤减少⽇志的输出,能减少磁盘写⼊。⽽在开发环境中,我们可以需要打印⾮常 多的信息,帮助开发⼈员定位错误,调试代码。还有⼀个好处就是,代码中可以混有各种的⽇志打印代码。我们只要在⼀个配置⽂件中,修改输出级别,⽇志输出就会发⽣变化,不⽤修改所有的代码。如果所有地⽅都是(),那么上线的时候,改动这个东西就要花很多时间。
4. 根据项⽬配置log4js上⼀节中,介绍了log4js和express集成。但默认的配置可能并不合适我们的项⽬,还需要对log4js的参数进⾏⼀些调整。1. 代替()增加replaceConsole配置,让所有console输出到⽇志中,以[INFO] console代替console默认样式。~ vi log4js = require('log4js');ure({ appenders: [ { type: 'console' },{ type: 'file',
filename: 'logs/',
maxLogSize: 1024, backups:4, category: 'normal'
} ], replaceConsole: true});查看输出结果:[2013-06-19 18:18:41.997] [INFO] console - This is an index page!GET / 304 15ms[2013-06-19 18:18:42.010] [INFO] normal - 127.0.0.1 - - "GET / HTTP/1.1" 304 - "localhost:3000/admin/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36"GET /css/ 304 5ms[2013-06-19 18:18:42.042] [INFO] normal - 127.0.0.1 - - "GET /css/ HTTP/1.1" 304 - "localhost:3000/admin/crawler/youku" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36"GET /css/ 304 11ms[2013-06-19 18:18:42.051] [INFO] normal - 127.0.0.1 - - "GET /css/ HTTP/1.1" 304 - "localhost:3000/admin/crawler/youku" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36"GET /js/ 304 35ms[2013-06-19 18:18:42.089] [INFO] normal - 127.0.0.1 - - "GET /js/ HTTP/1.1" 304 - "localhost:3000/admin/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36"GET /js/ 304 42ms[2013-06-19 18:18:42.098] [INFO] normal - 127.0.0.1 - - "GET /js/ HTTP/1.1" 304 - "localhost:3000/admin/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36"GET /js/ 304 11ms[2013-06-19 18:18:42.101] [INFO] normal - 127.0.0.1 - - "GET /js/ HTTP/1.1" 304 - "localhost:3000/admin/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36"2. 调整⽇志输出的格式 (tLogger(logger, {level: level:, format:':method :url'}));输出结果:[2013-06-19 18:23:25.230] [INFO] console - This is an index page!GET / 304 28ms[2013-06-19 18:23:25.251] [INFO] normal - GET /GET /css/ 304 5ms[2013-06-19 18:23:25.287] [INFO] normal - GET /css/ /css/ 304 3ms[2013-06-19 18:23:25.292] [INFO] normal - GET /css/ /js/ 304 15ms[2013-06-19 18:23:25.310] [INFO] normal - GET /js/ /js/ 304 9ms[2013-06-19 18:23:25.321] [INFO] normal - GET /js/ /js/ 304 17ms[2013-06-19 18:23:25.338] [INFO] normal - GET /js/3. ⾃动调整⽇志输出级别⽇志级别对应规则:http responses 3xx, level = WARNhttp responses 4xx & 5xx, level = ERRORelse, level = INFO设置level为auto (tLogger(logger, {level: 'auto', format:':method :url'}));下⾯⽇志为了对⽐⽅便我多打出了⼏⾏。[2013-06-19 18:24:56.040] [INFO] console - This is an index page!GET / 304 16ms[2013-06-19 18:24:56.053] [WARN] normal - GET /GET /css/ 304 9ms[2013-06-19 18:24:56.086] [WARN] normal - GET /css/ /css/ 304 9ms[2013-06-19 18:24:56.097] [WARN] normal - GET /css/ /js/ 304 26ms[2013-06-19 18:24:56.128] [WARN] normal - GET /js/ /js/ 304 32ms[2013-06-19 18:24:56.164] [WARN] normal - GET /js/ /js/ 304 1ms[2013-06-19 18:24:56.166] [WARN] normal - GET /js/[2013-06-19 18:24:56.204] [INFO] normal - GET /cat/json/latestGET /cat/json/latest 200 10ms[2013-06-19 18:24:56.211] [INFO] normal - GET /cat/json/masterGET /cat/json/master 200 4ms[2013-06-19 18:24:56.219] [INFO] normal - GET /cat/json/classicGET /cat/json/classic 200 9msGET /img/movie/ 304 1ms[2013-06-19 18:24:56.263] [WARN] normal - GET /img/movie/5. 优化log4js结构应该有同学发现了,我们在配置log4js时会有⼀个问题。就是所有配置信息都是在中做的,logger也是在这⾥直接定义的。如果在控制器(routes)想⽤log4js进⾏输出,我们现在拿不到logger的句柄。修改,~ vi log4js = require('log4js');ure({ appenders: [ { type: 'console' },{ type: 'file',
filename: 'logs/',
maxLogSize: 1024, backups:4, category: 'normal'
} ], replaceConsole: true});//var logger = ger(name);//el('INFO');....(tLogger(('normal'), {level:'auto', format:':method :url'}));....=function(name){ var logger = ger(name); el('INFO'); return logger;}我们把logger单独定义出来,并且做为API暴露出来。在中使⽤logger输出~ vi routes/ logger = require('../app').logger('index'); = function(req, res){ ("This is an index page!"); ("This is an index page! -- log4js"); ('index', { title:'⾸页|', page:'index' });};打印出来结果[2013-06-19 18:56:51.924] [INFO] console - This is an index page![2013-06-19 18:56:51.925] [INFO] index - This is an index page! -- log4jsGET / 304 17ms[2013-06-19 18:56:51.938] [WARN] [default] - GET /GET /css/ 304 5ms[2013-06-19 18:56:51.978] [WARN] [default] - GET /css/ /css/ 304 2ms[2013-06-19 18:56:51.981] [WARN] [default] - GET /css/ /js/ 304 2ms[2013-06-19 18:56:51.984] [WARN] [default] - GET /js/ /js/ 304 3ms[2013-06-19 18:56:51.989] [WARN] [default] - GET /js/ /js/ 304 9ms[2013-06-19 18:56:52.002] [WARN] [default] - GET /js/这样我们就已经玩转log4js了,为部署到⽣产环境,做好了⽇志的准备⼯作。
发布者:admin,转转请注明出处:http://www.yc00.com/news/1688683629a162218.html
评论列表(0条)