Node.js的日志默认打印到控制台,为数据收集和问题调查带来不便。通过log4js可以实现把日志打印到文件、自定义日志格式等功能,便于数据收集和整理。
- [backcolor=transparent]var[backcolor=transparent] log4js [backcolor=transparent]=[backcolor=transparent] [backcolor=transparent]require[backcolor=transparent]([backcolor=transparent]'log4js'[backcolor=transparent]);
- [backcolor=transparent]log4js[backcolor=transparent].[backcolor=transparent]configure[backcolor=transparent]({
- [backcolor=transparent] appenders[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent][
- [backcolor=transparent] [backcolor=transparent]{[backcolor=transparent]
- [backcolor=transparent] type[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]'file'[backcolor=transparent],[backcolor=transparent] [backcolor=transparent]//文件输出
- [backcolor=transparent] filename[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]'logs/access.log'[backcolor=transparent],[backcolor=transparent]
- [backcolor=transparent] maxLogSize[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]1024[backcolor=transparent],
- [backcolor=transparent] backups[backcolor=transparent]:[backcolor=transparent]3[backcolor=transparent],
- [backcolor=transparent] category[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]'normal'[backcolor=transparent]
- [backcolor=transparent] [backcolor=transparent]}[backcolor=transparent]
- [backcolor=transparent] [backcolor=transparent]]
- [backcolor=transparent]});
- [backcolor=transparent]var[backcolor=transparent] logger [backcolor=transparent]=[backcolor=transparent] log4js[backcolor=transparent].[backcolor=transparent]getLogger[backcolor=transparent]([backcolor=transparent]'normal'[backcolor=transparent]);
- [backcolor=transparent]logger[backcolor=transparent].[backcolor=transparent]setLevel[backcolor=transparent]([backcolor=transparent]'INFO'[backcolor=transparent]);
- [backcolor=transparent]logger[backcolor=transparent].[backcolor=transparent]info[backcolor=transparent]([backcolor=transparent]"this is a info msg"[backcolor=transparent]);
- [backcolor=transparent]logger[backcolor=transparent].[backcolor=transparent]error[backcolor=transparent]([backcolor=transparent]"this is a err msg"[backcolor=transparent]);
日志格式
通过log4js实现日志数据存储为文本文件格式后,日志在文件中显示为以下格式:
- [backcolor=transparent][[backcolor=transparent]2016[backcolor=transparent]-[backcolor=transparent]02[backcolor=transparent]-[backcolor=transparent]24[backcolor=transparent] [backcolor=transparent]17[backcolor=transparent]:[backcolor=transparent]42[backcolor=transparent]:[backcolor=transparent]38.946[backcolor=transparent]][backcolor=transparent] [backcolor=transparent][[backcolor=transparent]INFO[backcolor=transparent]][backcolor=transparent] normal [backcolor=transparent]-[backcolor=transparent] [backcolor=transparent]this[backcolor=transparent] [backcolor=transparent]is[backcolor=transparent] a info msg
- [backcolor=transparent][[backcolor=transparent]2016[backcolor=transparent]-[backcolor=transparent]02[backcolor=transparent]-[backcolor=transparent]24[backcolor=transparent] [backcolor=transparent]17[backcolor=transparent]:[backcolor=transparent]42[backcolor=transparent]:[backcolor=transparent]38.951[backcolor=transparent]][backcolor=transparent] [backcolor=transparent][[backcolor=transparent]ERROR[backcolor=transparent]][backcolor=transparent] normal [backcolor=transparent]-[backcolor=transparent] [backcolor=transparent]this[backcolor=transparent] [backcolor=transparent]is[backcolor=transparent] a err msg
log4js分为6个输出级别,从低到高分别为trace、debug、info、warn、error、fatal。
通过Logtail收集Node.js日志
配置Logtail收集Python日志的详细操作步骤请参考
快速入门和
apache日志,根据您的网络部署和实际情况选择对应配置。
在生成正则式的部分,由于自动生成的正则式只参考了日志样例,无法覆盖所有的日志情况,所以需要用户在自动生成之后做一些微调。您可以参考以下Node.js日志示例,为您的日志撰写正确、全面的正则表达式。
[backcolor=transparent]常见的Node.js日志及其正则表达式:
Node.js日志示例1
日志示例:
-
[backcolor=transparent]
[[backcolor=transparent]
2016[backcolor=transparent]
-[backcolor=transparent]
02[backcolor=transparent]
-[backcolor=transparent]
24[backcolor=transparent]
[backcolor=transparent]
17[backcolor=transparent]
:[backcolor=transparent]
42[backcolor=transparent]
:[backcolor=transparent]
38.946[backcolor=transparent]
][backcolor=transparent]
[backcolor=transparent]
[[backcolor=transparent]
INFO[backcolor=transparent]
][backcolor=transparent]
normal [backcolor=transparent]
-[backcolor=transparent]
[backcolor=transparent]
this[backcolor=transparent]
[backcolor=transparent]
is[backcolor=transparent]
a info msg
正则表达式:
-
[backcolor=transparent]
\[[backcolor=transparent]
([^]]+)][backcolor=transparent]
\s\[[backcolor=transparent]
([^[backcolor=transparent]
\][backcolor=transparent]
]+)][backcolor=transparent]
\s[backcolor=transparent]
([backcolor=transparent]
\w[backcolor=transparent]
+)[backcolor=transparent]
\s[backcolor=transparent]
-(.*)
提取字段:
time、level、loggerName和message。
Node.js日志示例2:
日志示例:
-
[backcolor=transparent]
[[backcolor=transparent]
2016[backcolor=transparent]
-[backcolor=transparent]
01[backcolor=transparent]
-[backcolor=transparent]
31[backcolor=transparent]
[backcolor=transparent]
12[backcolor=transparent]
:[backcolor=transparent]
02[backcolor=transparent]
:[backcolor=transparent]
25.844[backcolor=transparent]
][backcolor=transparent]
[backcolor=transparent]
[[backcolor=transparent]
INFO[backcolor=transparent]
][backcolor=transparent]
access [backcolor=transparent]
-[backcolor=transparent]
[backcolor=transparent]
42.120[backcolor=transparent]
.[backcolor=transparent]
73.203[backcolor=transparent]
[backcolor=transparent]
-[backcolor=transparent]
[backcolor=transparent]
-[backcolor=transparent]
[backcolor=transparent]
"GET /user/projects/ali_sls_log?ignoreError=true HTTP/1.1"[backcolor=transparent]
[backcolor=transparent]
304[backcolor=transparent]
[backcolor=transparent]
-[backcolor=transparent]
[backcolor=transparent]
"http://
- [backcolor=transparent]aliyun.com/"[backcolor=transparent] [backcolor=transparent]"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.97 Safari/537.36"
正则表达式:
-
[backcolor=transparent]
\[[backcolor=transparent]
([^]]+)][backcolor=transparent]
\s\[[backcolor=transparent]
([backcolor=transparent]
\w[backcolor=transparent]
+)][backcolor=transparent]
\s[backcolor=transparent]
([backcolor=transparent]
\w[backcolor=transparent]
+)[backcolor=transparent]
\s[backcolor=transparent]
-[backcolor=transparent]
\s[backcolor=transparent]
([backcolor=transparent]
\S[backcolor=transparent]
+)[backcolor=transparent]
\s[backcolor=transparent]
-[backcolor=transparent]
\s[backcolor=transparent]
-[backcolor=transparent]
\s[backcolor=transparent]
"([^"[backcolor=transparent]
]+)[backcolor=transparent]
"\s(\d+)[^"[backcolor=transparent]
]+([backcolor=transparent]
"[^"[backcolor=transparent]
]+)[backcolor=transparent]
"\s"[backcolor=transparent]
([^[backcolor=transparent]
"]+).*
提取字段:
time、level、loggerName、ip、 request、status、referer和user_agent。