需求:将用户的一些操作日志记录到mysql数据库中,方便日后维护
log4j的写法
<span style="font-size:12px;">#定义LOG输出级别
log4j.rootLogger=DEBUG,Console,File
#定义日志输出目的地为控制台
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.Target=System.out
#可以灵活地指定日志输出格式,下面一行是指定具体的格式
log4j.appender.Console.layout = org.apache.log4j.PatternLayout
#log4j.appender.Console.layout.ConversionPattern=[%c] - %m%n
log4j.appender.Console.layout.ConversionPattern=%d %p [%c] - %m%n
#文件大小到达指定尺寸的时候产生一个新的文件
log4j.appender.File = org.apache.log4j.RollingFileAppender
#指定输出目录
log4j.appender.File.File = logs/ssm.log
#定义文件最大大小
log4j.appender.File.MaxFileSize = 10MB
# 输出所以日志,如果换成DEBUG表示输出DEBUG以上级别日志
log4j.appender.File.Threshold = ALL
log4j.appender.File.layout = org.apache.log4j.PatternLayout
log4j.appender.File.layout.ConversionPattern =[%p] [%d{yyyy-MM-dd HH\:mm\:ss}][%c]%m%n
###显示mybatis的SQL语句部分
log4j.logger.java.sql.ResultSet=INFO
log4j.logger.org.apache=INFO
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
<strong><span style="color:#ff0000;"># 将我们自定义的日志信息插入到数据库</span></strong>
log4j.logger.com.cn.hnust.util.MyLog4j=INFO, DATABASE
log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.DATABASE.URL=jdbc:mysql://localhost:3306/testu
log4j.appender.DATABASE.driver=com.mysql.jdbc.Driver
log4j.appender.DATABASE.user=root
log4j.appender.DATABASE.password=root
log4j.appender.DATABASE.Threshold=INFO
log4j.appender.DATABASE.sql=insert into t_log (class,method,createtime,loglevel,msg) values ('%X{clazz}','%X{method}','%d{yyyy-MM-dd HH:mm:ss}','%p','%X{msg}')
log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout
log4j.appender.DATABASE.layout.ConversionPattern=%d %p [%c] - %m%n</span>
com.cn.hnust.util.MyLog4j的写法
<span style="font-size:12px;">package com.cn.hnust.util;
import org.apache.log4j.Logger;
import org.apache.log4j.MDC;
public class MyLog4j {
public void debug(String clazz,String method,String msg) {
Logger logger= Logger.getLogger(MyLog4j.class);
MDC.put("clazz", clazz);
MDC.put("method", method);
MDC.put("msg", msg);
<span style="color:#ff0000;">logger.info(clazz+method+msg);</span>
}
}
</span>
应用MyLog4j的java代码
<span style="font-size:12px;">package com.cn.hnust.controller;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import com.cn.hnust.pojo.User;
import com.cn.hnust.service.UserService;
import com.cn.hnust.util.ClassInfo;
import com.cn.hnust.util.MyLog4j;
@Controller
@RequestMapping(value = "/user")
public class UserController {
@Resource
private UserService userService;
<span style="color:#ff0000;">MyLog4j mylog4j = new MyLog4j();</span>
@RequestMapping("/showUser")
public String toIndex(HttpServletRequest request, Model model) {
System.out.println("进入showUser");
int userId = Integer.parseInt(request.getParameter("id"));
User user = this.userService.getUserById(userId);
model.addAttribute("user", user);
<span style="color:#ff0000;">mylog4j.debug(ClassInfo.getFullClassName(new UserController()), ClassInfo.getMethodName(),"显示用户姓名");</span>
return "showUser";
}
}</span>
ClassInfo类
<span style="font-size:12px;">package com.cn.hnust.util;
/**
* 获得类的相关信息
*
* @author 张爽
*
*/
public class ClassInfo {
/**
* 获得类包括包名的全路径
* @param obj 类对象
* @return
*/
public static String getFullClassName(Object obj){
return obj.getClass().getName();
}
/**
* 获得当前运行的方法名
* @return
*/
public static String getMethodName(){
//getStackTrace()[]可以稍后自行查看
return new Throwable().getStackTrace()[1].getMethodName().toString();
}
}
</span>