log4j.properties 日志详解

1) 导入log4j依赖
这里是我导入的依赖:

<dependency>
          <groupId>log4j</groupId>
          <artifactId>log4j</artifactId>
          <version>1.2.12</version>
      </dependency>

2) 添加log4j.properties

# ROOTER
log4j.rootLogger=DEBUG,CONSOLE,FILE

# CONSOLE
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%-d{
    
    yyyy-MM-dd HH\:mm\:ss} %-5p %-20c %x %m%n

# FILE
log4j.appender.FILE=org.apache.log4j.RollingFileAppender
log4j.appender.FILE.File=logs.log
log4j.appender.FILE.MaxBackupIndex=20
log4j.appender.FILE.MaxFileSize=10MB
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.ConversionPattern=%-d{
    
    yyyy-MM-dd HH\:mm\:ss} %-5p %-20c %x %m%n

# ERROR
log4j.appender.ERR = org.apache.log4j.DailyRollingFileAppender
log4j.appender.ERR.File =error.log
log4j.appender.ERR.Append = true
log4j.appender.ERR.Threshold = ERROR
log4j.appender.file.DatePattern='.'yyyy-MM-dd'.log'
log4j.appender.ERR.layout = org.apache.log4j.PatternLayout
log4j.appender.ERR.layout.ConversionPattern = %-d{
    
    yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

Appender
日志输出器,配置日志的输出级别、输出位置等,包括以下几类:
ConsoleAppender: 		日志输出到控制台;
FileAppender:		输出到文件;
RollingFileAppender:	输出到文件,文件达到一定阈值时,自动备份日志文件;
DailyRollingFileAppender:可定期备份日志文件,默认一天一个文件,也可设置为每分钟一个、每小时一个;
WriterAppender:		可自定义日志输出位置。

日志级别
一般日志级别包括:ALL,DEBUG, INFO, WARN, ERROR,FATAL,OFF
Log4J推荐使用:DEBUG, INFO, WARN, ERROR



Layout:日志输出格式,Log4j提供的layout有以下几种:
org.apache.log4j.HTMLLayout(以HTML表格形式布局),
org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)

输出格式
Log4J最常用的日志输出格式为:org.apache.log4j.PatternLayOut,其主要参数为:
%n - 换行
%m - 日志内容
%p - 日志级别(FATAL, ERROR,WARN, INFO,DEBUG or custom)
%r - 程序启动到现在的毫秒数
%t - 当前线程名
%d - 日期和时间, 一般使用格式 %d{
    
    yyyy-MM-dd HH:mm:ss, SSS}
%l - 输出日志事件的发生位置, 同 %F%L%C%M
%F - java 源文件名
%L - java 源码行数
%C - java 类名,%C{
    
    1} 输出最后一个元素
%M - java 方法名

Logger log  = Logger.getLogger(当前类.class);
if(log.isDebugEnabled()){
    
    
log.debug("...");
}
if(log.isInfoEnabled()){
    
    
log.info("...");
}
...

3) 编写日志切面

/**
 * Log4j日志输出切面
 */
@Aspect
@Component
public class Log4jAspect {
    
    

    //创建日志对象
    private Logger logger = Logger.getLogger(Log4jAspect.class);

    //给所有的service类的所有方法加日志跟踪
    @Pointcut("execution(* com.blb.aop_demo.service.*Service.*(..))")
    public void logPointcut(){
    
    
    }

    //配置环绕通知
    @Around("logPointcut()")
    public Object aroundLog(ProceedingJoinPoint point) throws Throwable {
    
    
        //记录方法执行前时间
        long start = System.currentTimeMillis();
        //打印方法名称
        if(logger.isDebugEnabled()){
    
    
            logger.debug("当前执行方法:" + point.getSignature().getName());
        }
        //打印参数
        Object[] args = point.getArgs();
        for(Object arg : args){
    
    
            if(logger.isDebugEnabled()){
    
    
                logger.debug("参数:"+arg);
            }
        }
        //打印返回值
        Object result = point.proceed();
        if(logger.isDebugEnabled()){
    
    
            logger.debug("方法返回值:" +result);
        }
        //打印执行时间
        long end = System.currentTimeMillis();
        if(logger.isDebugEnabled()){
    
    
            logger.debug("方法执行时间:" +(end - start));
        }
        return result;
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_44889894/article/details/114984751