log4js日志
安装log4js:npm install log4js
express中配置log4js中间件:
var log = require("./modules/utils/logUtil.js");
log.use(app);
logUtil工具类:
/**
* Created by Administrator on 2015/9/8.
*/
"use strict"; var helper = {};
var log4js = require('log4js');
var fs = require("fs");
var path = require("path");
var dbOperate = require("./dbUtil.js");
helper.levels = {
FATAL: log4js.levels.FATAL,
ERROR: log4js.levels.ERROR,
WARN: log4js.levels.WARN,
DEBUG: log4js.levels.DEBUG,
INFO: log4js.levels.INFO
};
helper.config =
{
"appenders": [
{
"type": "console",
"category": "console"
},
{
"filename": "logs/",
"pattern": "yyyyMMdd.log",
"category": "logInfo",
"type": "dateFile",
"alwaysIncludePattern": true,
"level":"INFO"
}
],
"replaceConsole": true
}; // 加载配置文件
//var objConfig = JSON.parse(fs.readFileSync(path.join(__dirname + "/config"), "utf8"));
log4js.configure(helper.config);
var logInfo = log4js.getLogger('logInfo');
var name = null; /**
* 日志保存
* @param req request请求,用于获取ip、url等信息
* @param operateType 操作类型,例如:0000-登录,1111-退出
* @param operateData 被操作的数据
* @param category 日志类别(日志模块类别)
* @param results 操作结果
* @param msg log信息
* @param logLevel 日志level:详见helper.levels
*/
helper.saveLogFile = function (req, operateType,operateData, category, results, msg, logLevel) {
var logLevel = logLevel.toString();
var conf =
{
"appenders": [
{
"type": "console",
"category": "console"
},
{
"filename": "logs/",
"pattern": "yyyyMMdd.log",
"category": category,
"type": "dateFile",
"alwaysIncludePattern": true,
"level":logLevel
}
],
"replaceConsole": true
};
log4js.configure(conf);
name = log4js.getLogger(category);
if (msg == null)
msg = "";
var username;
if(typeof req.session.user != "undefined"){
username = req.session.user.username;
}else{
username = req.body.username;
}
switch (logLevel) {
case 'ERROR':
name.error("msg:" + msg + "user:" + username + "ip:" + req.ip + " url:" + req.originalUrl + " operateType:" + operateType + " operateData:"
+ operateData + " results:" + results + " User-Agent:" + req.get("User-Agent"));
break;
case 'WARN':
name.warn("msg:" + msg + " user:" + username + " ip:" + req.ip + " url:" + req.originalUrl + " operateType:" + operateType + " operateData:"
+ operateData + " results:" + results + " User-Agent:" + req.get("User-Agent"));
break;
case 'DEBUG':
name.debug("msg:" + msg + " user:" + username + " ip:" + req.ip + " url:" + req.originalUrl + " operateType:" + operateType + " operateData:"
+ operateData + " results:" + results + " User-Agent:" + req.get("User-Agent"));
break;
case 'FATAL':
name.fatal("msg:" + msg + " user:" + username + " ip:" + req.ip + " url:" + req.originalUrl + " operateType:" + operateType + " operateData:"
+ operateData + " results:" + results + " User-Agent:" + req.get("User-Agent"));
break;
default:
name.info("msg:" + msg + " user:" + username + " ip:" + req.ip + " url:" + req.originalUrl + " operateType:" + operateType + " operateData:"
+ operateData + " results:" + results + " User-Agent:" + req.get("User-Agent"));
break;
}
}; /**
* 日志保存
* @param req request请求,用于获取ip等信息
* @param operateType 操作类型,例如:0000-登录,1111-退出
* @param operateData 被操作的数据
* @param category 日志类别(日志模块类别)
* @param results 操作结果
* @param msg log信息
* @param logLevel 日志level:info、debug、warn、error、fatal 0-5
*/
helper.saveLog = function (req, operateType, operateData, category, results, msg, logLevel) {
var username;
if(typeof req.session.user != "undefined"){
username = req.session.user.username;
}else{
username = req.body.username;
}
var logData = {
'category': category,
'username': username,
'agent': req.get("User-Agent"),
'operateType': operateType,
'ip': req.ip,
'operateData': operateData,
'url': req.originalUrl,
'results': results,
'msg': msg,
'logLevel': logLevel
};
dbOperate.insert(logData, "dbo.sysLog", function (results) {
console.log(results);
}, "");
}; // 配合express用的方法
exports.use = function (app) {
//页面请求日志, level用auto时,默认级别是WARN
app.use(log4js.connectLogger(logInfo, {level: 'INFO'})); //, format:':method :url'
}; exports.helper = helper;
其中helper.config里面配置log4js:
appenders:数组对象,表示log输出的路径,每一个元素都是一个appender,主要包括:console-控制台输出、dateFile-根据日期配置自动生成当前日期下的日志、file-纯粹在一个文件中输出
type:日志输出类型 pattern:日志输出格式 category:日志类别 alwaysIncludePattern:是否始终以pattern指定格式输出日志 level:日志输出级别 replaceConsole:是否以log4js格式在控制台输出控制台自身log
输出log目录(log目录必须手动先行创建):

log内容:
[2015-09-09 17:46:20.421] [INFO] logInfo - ::1 - - "GET /javascripts/jquery-easyui-1.4.3/themes/default/images/calendar_arrows.png HTTP/1.1" 304 - "http://localhost:3000/javascripts/jquery-easyui-1.4.3/themes/default/easyui.css" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.6 Safari/537.36"
[2015-09-09 17:46:26.350] [INFO] logInfo - ::1 - - "POST /user/add HTTP/1.1" 200 16 "http://localhost:3000/user/userManage.html" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.6 Safari/537.36"
[2015-09-09 17:46:26.452] [INFO] logInfo - ::1 - - "POST /user/list HTTP/1.1" 200 1966 "http://localhost:3000/user/userManage.html" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.6 Safari/537.36"
[2015-09-09 17:46:28.872] [INFO] logInfo - ::1 - - "POST /user/list HTTP/1.1" 200 606 "http://localhost:3000/user/userManage.html" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.6 Safari/537.36"
[2015-09-09 17:46:28.883] [INFO] logInfo - ::1 - - "GET /upload/0.3529507869388908.png HTTP/1.1" 304 - "http://localhost:3000/user/userManage.html" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.6 Safari/537.36"
[2015-09-09 17:46:28.884] [INFO] logInfo - ::1 - - "GET /upload/0.09649713477119803.png HTTP/1.1" 304 - "http://localhost:3000/user/userManage.html" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.6 Safari/537.36"
[2015-09-09 17:46:28.892] [INFO] logInfo - ::1 - - "GET /upload/0.4691608641296625.png HTTP/1.1" 200 27561 "http://localhost:3000/user/userManage.html" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.6 Safari/537.36"
数据库中log表内容:

log4js日志的更多相关文章
- Node.js log4js日志记录
这次需要给之前弄的文件服务器添加日志记录,一般每天产生的日志会特别多所以安装日期来划分是最好的,这里我用了express框架,为了适应express框架这里在log.js文件中写了use方法. //日 ...
- Nodejs 使用log4js日志
一.创建log4.js文件,保存日志到log文件,并在控制台输出,如果不控制台输出,把删除红色的代码 const log4js = require('log4js'), path = require( ...
- nodejs之log4js日志记录模块简单配置使用
在我的一个node express项目中,使用了log4js来生成日志并且保存到文件里,生成的文件如下: 文件名字叫:access.log 如果在配置log4js的时候允许了同时存在多个备份log文件 ...
- log4js日志配置问题
http://blog.csdn.net/cdnight/article/details/50857268 在做项目中,我们的node日志采用的是log4js框架,使用文件方式存储,但在后面的需求中增 ...
- nodejs之日志管理
开发一个项目时,可以通过控制台输出或者debug来获取到项目的运行信息.当项目上线时,我们就需要通过日志来分析.如同Java的log4j,nodejs中也有相关的log4js.使用过log4j的同学应 ...
- express+gulp构建项目(四)env环境变量
这里的文件的作用是负责设置env环境变量和日志. index.js try { require('dotenv').load({silent: true}); //dotenv从一个.env文件中读取 ...
- node.js 接口调用示例
测试用例git地址(node.js部分):https://github.com/wuyongxian20/node-api.git 项目架构如下: controllers: 文件夹下为接口文件 log ...
- node 日志管理log4js
node 日志管理log4js 一.默认的控制台输出 我们使用express框架时,开发模式用node或者supervisor启动nodejs应用时,控制台都是显示如下的日志. GET /css/bo ...
- 玩转Nodejs日志管理log4js(转)
转自:http://blog.fens.me/nodejs-log4js/ 前言 日志对任何的应用来说都是至关重要的.在Nodejs中使用express框架并没有自带的日志模块,我们可以选择log4j ...
随机推荐
- leetcode 39 组合总和 JAVA
题目: 给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合. candidates 中的数字可以无限制 ...
- 极大似然估计MLE 极大后验概率估计MAP
https://www.cnblogs.com/sylvanas2012/p/5058065.html 写的贼好 http://www.cnblogs.com/washa/p/3222109.html ...
- jquery源码解析:expando,holdReady,ready详解
jQuery的工具方法,其实就是静态方法,源码里面就是通过extend方法,把这些工具方法添加给jQuery构造函数的. jQuery.extend({ //当只有一个对象时,就把这个对象 ...
- 4 个快速的 Python 编译器 for 2018
简评:Python 和其他的解释型语言一样经常被吐槽性能不行,所以开发人员为了提升性能创建了不少编译器,本文则选取其中的四个做了基准测试. Python 其实是一种相当快的语言,但它并不像编译型语言那 ...
- 2016级算法第一次练习赛-F.AlvinZH的儿时梦想——机器人篇
864 AlvinZH的儿时梦想----机器人篇 题目链接:https://buaacoding.cn/problem/868/index 思路 中等题. 判断无限玩耍: \(p\) 的值能够承担的起 ...
- Boost内存池使用与测试
目录 Boost内存池使用与测试 什么是内存池 内存池的应用场景 安装 内存池的特征 无内存泄露 申请的内存数组没有被填充 任何数组内存块的位置都和使用operator new[]分配的内存块位置一致 ...
- Shiro源码解析-登录篇
本文以循序渐进的方式解析Shiro整个login过程的处理,读者可以边阅读本文边自己看代码来思考体会,如有问题,欢迎评论区探讨! 笔者shiro的demo源码路径:https://github.com ...
- SpringCloud与Docker微服务架构实战笔记
一 微服务架构概述 1. 单体应用架构存在的问题 结合:https://www.cnblogs.com/jialanshun/p/10637454.html一起看,在该篇博客中搜索“单块架构的优缺点 ...
- linux 安装python
wget https://www.python.org/ftp/python/3.6.0/Python-3.6.0.tgz #下载安装包 tar zxvf Python-3.6.0.tgz #解压 . ...
- vue 路由更新页面视图未更新问题
最近项目做面包屑的时候遇到一个问题就是路由变化的时候页面视图并没有发生变化,后来上网查,发现是vue-router的特性导致的. vue-router的切换不同于传统的页面的切换.路由之间的切换,其实 ...