Log4j

     Log4j

1、Log4j简介(全称:Log for Java

01:是使用Java语言编写的一个日志框架
02:是Apache的一个开源项目
03:记录我们程序中的日志信息
04:可以将日志信息输出到指定的目的地

Log4j的作用:
   01:记录我们代码中变量的变化,用于程序的调试和后期的维护
   02:可以周期性的保存一些数据,用于后期对数据的分析
   03:通过设置日志信息的级别,来用于我们的管理

如果程序中出现了异常。该怎么解决?

01:使用异常处理机制==>异常
  02:通过debug调试(必须掌握)
  03:system.out.print()
     001:控制台的行数有限
     002:影响我们的系统性能
     003:如果我们需要对用户的行为和习惯进行分析
我们需要一个能把记录用户的行为和习惯的代码记录在一个文件中
  .log(日志文件: 大家平时上网或者安装软件的时候,经常会看到一些以.log结尾的文件。这就是我们的日志文件!

注意:并非所有的日志文件都是以.log结尾的,可以是其他的

把所有的信息打印在控制台上不行吗?
      01.控制台有行数限制;
      02.System.out.println()影响系统性能;
      03.如果我们需要对一些用户的行为习惯进行分析,我们找不到用户的数据!

2:Log4j的常用配置

    2-1: Log4j的日志组成部分:

01.日志记录器
02.日志的输出格式
03.日志的输出目的地
    2-2:Log4j的日志记录器(Logger)
org.apache.log4j.Level类中有7个级别:
OFF:    级别最高 ,用于关闭所有的日志输出
ALL: 级别最低,用于开始所有的日志输出

Fatal: 严重的错误事件,将导致我们的程序终止
Error: 错误事件,不会影响我们程序的继续执行
Warn: 存在潜在的度级别上的使用
Info: 指的是粗粒度级别上的使用
Debug: 指的是细粒错误场景
Trace: 比Debug还要细的
开发环境(开发阶段):使用的日志级别比较低 Debug
生产环境(项目上线):建立把Debug细粒度的设置成粗粒度Warn(生产环境时,建议把DEBUG日志级别换成WARN,避免产生大量文件!)
2-3:日志的输出格式(Layout)
%P:日志信息的优先级
%d:日志的输出的时间 %d{yyyy-MM-dd hh:mm:ss}
%C:日志信息的输出类
%l:日志信息的输出位置 类名+线程+行号
%M:日志信息的输出 所在方法
%m:日志信息的输出的内容
%n:输出日志信息之后 换行

%t:日志信息的输出 所在线程
%r:从程序启动到输出日志信息所经历的时间(毫秒)
2-4:日志的输出目的地(Appennder)
01:把我们的日志信息输出到某个地址
02:可以同时指定多个输出地
03:一个输出地就对应一个Appennder
将一个日志输出到Console控制台中===》ConsoleAppennder
将日志输出到文件中
====>01:RollingFileAppennder 根据文件的大小创建新的日志文件
====>02:DailyRollingFileAppennder 根据时间创建新的日志文件

3:Log4j的使用
DailyRollingFileAppender中的 DatePattern共分为6种方式
1.每月 yyyy-MM
2.每周 yyyy-ww
3.每天 yyyy-MM-dd
4.每半天 yyyy-MM-dd-a
5.每小时 yyyy-MM-dd-hh
6.每分钟 yyyy-MM-dd-hh-mm
框架:
在log4j.properties中写代码:
三种情况:
01:第一种显示在控制台上
02:第二种在文件中以文件的形式显示(根据时间)
03:第三种在文件夹中已存储的容量大小显示
共用的测试类:
package com.dzq;

import org.apache.log4j.Logger;

/**
 * Hello world!
 *
 */
public class App 
{
    public static void main( String[] args )
    {
       //创建日志记录器
        Logger logger = Logger.getLogger(App.class);
        logger.error("Error message");
        logger.warn("Warn message");
        logger.info("Info message");
        logger.debug("Debug message");
        logger.trace("Trace message");
    }
}
测试类
第一种情况:
第一个:显示在控制台上
#实例化对象
#ConsoleAppender console =new ConsoleAppender();
log4j.appender.console =org.apache.log4j.ConsoleAppender
#console.target=System.out/err 对象名.属性名
log4j.appender.console.Target=System.out
#console.Layout =new PatternLayout();//创建输出格式对象
log4j.appender.console.Layout=org.apache.log4j.PatternLayout
#console.layout.ConversionPattern=%d{yyyy-MM-dd hh:mm:ss} %l %m %n//指定输出格式
log4j.appender.console.Layout.ConversionPattern=%d{yyyy-MM-dd hh:mm:ss} %l %m %n

#指定日志的输出级别
#log4j.rootLogger=debug,console
log4j.logger.com.dzq=dubug,console
第一种情况

   第二种情况:

第二个:把日志输出到文件中(时间)
#把日志输出到文件中
log4j.appender.file =org.apache.log4j.DailyRollingFileAppender
#指定频率
log4j.appender.file.DataPattern='.'yyyy-MM-dd-HH-mm'.log
#指定输出文件的位置 第一次生成的文件名称
log4j.appender.file.File=e:/log/log4j.log
log4j.appender.file.Layout=org.apache.log4j.PatternLayout
log4j.appender.file.Layout.ConversionPattern=%d{yyyy-MM-dd hh:mm:ss} %l %m %n
#指定日志的输出级别
#log4j.rootLogger=debug,console
log4j.logger.com.dzq=dubug,console
第二种情况

   第三种情况:

第三个:存储大小
#把日志信息打印在文件中,根据文件的大小创建新的文件
log4j.appender.file1=org.apache.log4j.RollingFileAppender
#文件的存放位置
log4j.appender.file1.File=e:/log4j/log4j.log
#每个文件的最大容量
log4j.appender.file1.MaxFileSize=1kb
#如果超过了大小,默认产生的额度文件的数量
log4j.appender.file1.MaxBackupIndex=3
#设置内容满了之后覆盖的内容
log4j.appender.file1.Append=true
log4j.appender.file1.Layout=org.apache.log4j.PatternLayout
log4j.appender.file1.Layout.ConversionPattern=%d{yyyy-MM-dd hh:mm:ss} %l %m %n
#指定日志的输出级别
#log4j.rootLogger=debug,console
log4j.logger.com.dzq=dubug,console,file,file1
第三种情况

Logback:

<?xml version="1.0" encoding="UTF-8"?>
<!--
scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。
scanPeriod:设置监测配置文件是否有修改的时间间隔,(通俗讲:就是设置多长时间查看一下logback.xml文件有没有被修改)如果没有给出时间单位,
            默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。
debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。
-->
<configuration scan="true" scanPeriod="60 seconds" debug="false">

    <!-- 整个logback.xml文件中只有四个主要的标签:其一是根标签configuration,其余是三个子标签:appende,logger,root
      但是有人会疑问:那property和timestamp是做什么的?答案是:这两个标签是用来为以上提到的是三个子标签定义属性和赋值的。例如:
      第一个property标签中定义了一个USER_HOME属性,其值是/logs,scope是这个属性的作用范围,scope="context"是指该属性只能在本配置文件中使用。
      而timestamp定义了一个时间戳,也就是定义了一个时间格式,以供三个子标签使用。
    -->
    <property name="USER_HOME" value="e:/logs" />
    <property scope="context" name="FILE_NAME" value="mylog-logback" />
    <timestamp key="byDay" datePattern="yyyy-MM-dd" />

    <!-- 第一个子标签appender:
  name:标签名,为了让其他标签调用的唯一标示,相当于html标签中的id
  class:引用的类,从此类中可以看出该appender标签定义的是日志输出的位置,也就是往哪里输出
  ch.qos.logback.core.ConsoleAppender可以看出是往控制台上输出。
  encoder:该标签中定义了日志的输出格式
-->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度   %msg:日志消息,%n是换行符
                  级别分别是:TRACE < DEBUG < INFO <WARN < ERROR
            -->
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n </pattern>
        </encoder>
    </appender>
    <!--
  class:从此类中可以看出该appender标签定义的日志输出位置是回滚文件,也就是说:把日志输出到一个文件中,并且该文件可以回滚,至于怎么回滚请看下面的注释
    -->
    <appender name="log_file"  class="ch.qos.logback.core.rolling.RollingFileAppender">

        <!--   定义了日志文件的目录结构和文件名:磁盘根目录:/logs/mylog-logback.log
          注意了:该文件名是在日志文件没有触发回滚要求时的文件名,也就是说现在的日志文件还没有满足xxMB,
        一旦满足了就会按照rollingPolicy里设置的属性进行重新命名
        -->
        <file>${USER_HOME}/${FILE_NAME}.log</file>
        <!--  rollingPolicy:回滚策略
          fileNamePattern:标签中定义的是日志文件一旦满足5MB就重新命名成新文件的命名格式,
        其中minIndex和maxIndex分别对应的是满足5MB的日志文件的命名序号(1~10)对应%i.log中的i值。
        如:mylog-logback-2016-07-12-1.log,mylog-logback-2016-07-12-2.log,mylog-logback-2016-07-12-3.log
        -->
        <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
            <fileNamePattern>${USER_HOME}/${byDay}/${FILE_NAME}-${byDay}-%i.log</fileNamePattern>
            <minIndex>1</minIndex>
            <maxIndex>10</maxIndex>
        </rollingPolicy>
        <!-- 触发策略:当日志文件满足5MB就会出发回滚策略-->
        <triggeringPolicy   class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <maxFileSize>5MB</maxFileSize>
        </triggeringPolicy>
        <!--%-4relative 表示,将输出从程序启动到创建日志记录的时间 进行左对齐 且最小宽度为4。-->
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} %-4relative [%thread] %-5level %logger{35} - %msg%n
            </pattern>
        </encoder>

    </appender>

    <!-- 设置哪个目录或者包,类使用哪个日志
    将com.xdf包下的所有类的日志的打印,level是打印级别:debug,如果不设置level,它将继承它的上级<root>的日志级别“DEBUG”
    如果没有设置addtivity,默认为true,将此loger的打印信息向上级传递;
    如果没有设置appender-ref,此loger本身不打印任何信息。
    -->
     <logger name="com.dzq" level="debug" additivity="true">
            <appender-ref ref="console" />
        </logger>

    <root level="debug">
        <appender-ref ref="console" />
    </root>
</configuration>
logback.xml
package com.dzq;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class logback {
    public static void main( String[] args )
    {
        //创建日志记录器
        Logger logger= LoggerFactory.getLogger(logback.class);
        logger.error("Error message");
        logger.warn("Warn message");
        logger.info("Info message");
        logger.debug("Debug message");
        logger.trace("Trace message");

    }
}
测试类

需要导入的四个架包





 
 
 
 
 
原文地址:https://www.cnblogs.com/3020815dzq/p/9253770.html