SSM项目Log4j和MongoDB整合进行日志管理

来源:互联网 发布:碧然德 知乎 编辑:程序博客网 时间:2024/06/05 02:40

1.添加依赖

<!--MongoDB--><dependency>    <groupId>org.mongodb</groupId>    <artifactId>mongo-java-driver</artifactId>    <version>3.4.2</version></dependency><dependency>    <groupId>org.log4mongo</groupId>    <artifactId>log4mongo-java</artifactId>    <version>0.7.4</version></dependency>

2.修改log4j.properties

log4j.logger.mongoDB=INFO,mongoDBlog4j.appender.mongoDB=org.log4mongo.MongoDbAppenderlog4j.appender.mongoDB.hostname=localhostlog4j.appender.mongoDB.port=27017log4j.appender.mongoDB.databaseName=sysLoglog4j.appender.mongoDB.collectionName=operationLoglog4j.appender.mongoDB.layout=org.apache.log4j.PatternLayoutlog4j.appender.mongoDB.layout.ConversionPattern=%d %-5p [%t] (%13F:%L) %3x - %m%n
3.开发工具类

工具类一:

package com.iborch.health.common;import com.iborch.health.util.ConfigureFileHelper;import com.mongodb.MongoClient;import com.mongodb.client.MongoCollection;import com.mongodb.client.MongoDatabase;import org.bson.Document;/** * Created by lhp on 2017/9/29. */public class MongoDBUtil {    private static MongoClient mongoClient= null;    static {        String hostName = ConfigureFileHelper.getProperty("hostName");        int port = Integer.parseInt(ConfigureFileHelper.getProperty("port"));        mongoClient = new MongoClient(hostName,port);    }    /**     *获取指定Collection     * @param dataBaseName     * @param collectionName     * @return     */    public static MongoCollection<Document> getMongoCollectionLists(String dataBaseName,String collectionName){        MongoDatabase mongoDatabase =mongoClient.getDatabase(dataBaseName);        return mongoDatabase.getCollection(collectionName);    }    /**     * 关闭Mongodb     */    public static void close() {        if (mongoClient != null) {            mongoClient.close();            mongoClient = null;        }    }}

工具类二:

package com.iborch.health.common;import org.springframework.web.context.request.RequestContextHolder;import org.springframework.web.context.request.ServletRequestAttributes;import javax.servlet.http.HttpServletRequest;import java.text.SimpleDateFormat;import java.util.Date;/** * Created by lhp on 2017/9/27. */public class SystemLogUtil {    //保存日志    public static void saveSystemLog(String moduleName,String type,String description){        org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger("mongoDB");        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();        String userId = "";        //IP地址        String ip = ClientIpAddress.getIpAddr(request);        String date = simpleDateFormat.format(new Date());        StackTraceElement stack[] = Thread.currentThread().getStackTrace();        String className = stack[2].getClassName();        String methodName = stack[2].getMethodName();        int lineNumber = stack[2].getLineNumber();        StringBuilder builder = new StringBuilder().append("{\"userId\":\""+userId+"\"").append(",\"date\":\""+date+"\"").append(",\"className\":\""+className+"\"")                .append(",\"methodName\":\""+methodName+"\"").append(",\"lineNumber\":\""+lineNumber+"\"").append(",\"ip\":\""+ip+"\"")                .append(",\"moduleName\":\""+moduleName+"\"").append(",\"type\":\""+type+"\"").append(",\"description\":\""+description+"\""+"}");        log.info(builder.toString());    }}

4.获取列表方法

public List<SystemLog> getSystemLogLists( int currentPage,int pageSize,String moduleName,String userName,String startDate,String endDate) {    List<SystemLog> systemLogList = new ArrayList<SystemLog>();    MongoCollection<Document> collection = MongoDBUtil.getMongoCollectionLists("sysLog", "operationLog");    BasicDBObject query = new BasicDBObject();    Pattern patternUserName = Pattern.compile("^.*" + userName + ".*$", Pattern.CASE_INSENSITIVE);    query.put("message", patternUserName);    if (null != startDate && !"".equals(startDate)){        String startDt = StringUtil.urlDecode(startDate);        String endDt = StringUtil.urlDecode(endDate);        int startYear = Integer.parseInt(startDt.split("/")[0]);        int startMonth = Integer.parseInt(startDt.split("/")[1]);        int startDay = Integer.parseInt(startDt.split("/")[2]);        System.out.println("startYear...:" + startYear + "startMonth...:" + startMonth+ "startDay...:" + startDay);        int endYear =0;        int endMonth =0;        int endDay =0;        if (null == endDt || "".equals(endDt)){            endYear = Integer.parseInt(endDt.split("/")[0]);            endMonth = Integer.parseInt(endDt.split("/")[1])+1;            endDay = 1;        } else {            endYear = Integer.parseInt(endDt.split("/")[0]);            endMonth = Integer.parseInt(endDt.split("/")[1]);            endDay = Integer.parseInt(endDt.split("/")[2])+2;            System.out.println("endYear...:" + endYear + "endMonth...:" + endMonth+ "endDay...:" + endDay);        }        query.put("timestamp", BasicDBObjectBuilder.start("$gte", new Date(startYear - 1900, startMonth - 1, startDay)).add("$lt", new Date(endYear - 1900, endMonth - 1, endDay)).get());    }else {        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");        String patternDate = simpleDateFormat.format(new Date());        String patternMonth = patternDate.substring(0, patternDate.lastIndexOf("-"));        Pattern pattern = Pattern.compile("^.*" + patternMonth + ".*$", Pattern.CASE_INSENSITIVE);        query.put("message", pattern);    }    Pattern patternModule = Pattern.compile("^.*" + moduleName + ".*$", Pattern.CASE_INSENSITIVE);    query.put("message", patternModule);    FindIterable<Document> findIterable = collection.find(query).skip(currentPage).limit(pageSize);    MongoCursor<Document> mongoCursor = findIterable.iterator();    while(mongoCursor.hasNext()) {        Document document = mongoCursor.next();        JSONObject jsonObject = JSONObject.fromObject(document.get("message"));        SystemLog systemLog=(SystemLog)JSONObject.toBean(jsonObject, SystemLog.class);        systemLog.setId(UUID.randomUUID().toString());        systemLogList.add(systemLog);    }    return systemLogList;}

5.使用方法

在需要添加日志的地方,添加如下:

SystemLogUtil.saveSystemLog("logout","logout","用户注销系统");