日志:是Java中程序处理运行时产生的日志数据信息

作用:①  记录运行信息,方便调试;②  记录错误信息,方便排查错误;③  存储运行记录,方便后期的数据分析;

 log4j的特性:

        1 . 线程安全 ;

       2 . log4j是经过优化速度的 ;

       3 . log4j是基于一个名为记录器的层次结构 ;

       4 . log4j的支持每个记录器多输出追加器(appender) ;

       5 . log4j支持国际化 ;

       6 . log4j并不限于一组预定义的设备 ;

       7 . 日志行为可以使用配置文件在运行时设置 ;

       8 . log4j设计从一开始就是处理java异常 ;

       9 . log4j有多个级别 , 通过控制这些级别可以实现将某些不想输出的信息过滤掉 ;

       10 . 日志输出的格式可以通过拓展Layout类容易的改变 ;

       11 . 日志输出的目标 , 以及在写入策略可通过实现Appender程序接口改变 ;

       12 . log4j会故障停止 , 然而 , 尽管它肯定努力确保传递 , log4j不保证每个日志语句将被传递到目的地 ;

log4j常用级别( ):

log4j规定了默认的几个级别:trace<debug<info<warn<error<fatal等。这里要说明一下:

    1)级别之间是包含的关系,意思是如果你设置日志级别是trace,则大于等于这个级别的日志都会输出。

    2)基本上默认的级别没多大区别,就是一个默认的设定。你可以通过它的API自己定义级别。你也可以随意调用这些方法,不过你要在配置文件里面好好处理了,否则就起不到日志的作用了,而且也不易读,相当于一个规范,你要完全定义一套也可以,不用没多大必要。

    3)这不同的级别的含义大家都很容易理解,这里就简单介绍一下:

    trace: 是追踪,就是程序推进以下,你就可以写个trace输出,所以trace应该会特别多,不过没关系,我们可以设置最低日志级别不让他输出。

    debug: 调试么,我一般就只用这个作为最低级别,trace压根不用。是在没办法就用eclipse或者idea的debug功能就好了么。

    info: 输出一下你感兴趣的或者重要的信息,这个用的最多了。

    warn: 有些信息不是错误信息,但是也要给程序员的一些提示,类似于eclipse中代码的验证不是有error 和warn(不算错误但是也请注意,比如以下depressed的方法)。

    error: 错误信息。用的也比较多。

    fatal: 级别比较高了。重大错误,这种级别你可以直接停止程序了,是不应该出现的错误么!不用那么紧张,其实就是一个程度的问题。

 

log4j.xml内容:

<?xml version="1.0" encoding="UTF-8"?>  
<configuration status="OFF">  
  <appenders>  
    <Console name="Console" target="SYSTEM_OUT">  
      <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>  
    </Console>  
  </appenders>  
  <loggers>  
    <root level="error">  
      <appender-ref ref="Console"/>  
    </root>  
  </loggers>  
</configuration>

XML文件中的配置元素接受几个属性:

属性名称

描述

advertiser    

(可选)广告者插件名,用于将单个FileAppender或SocketAppender配置公布出去。现在只支持“multicastdns”。

shutdownTimeout

 指定在JVM关闭时,appender和后台任务在多少毫秒后关闭。默认值为零,这意味着每个appender使用其默认超时,并且不需等待后台任务。然而并非所有的appender都会尊重这一点,这只是示意JVM关闭,并不是绝对保证关机程序不会花费更长的时间。将其设置得太低会增加丢失尚未写入最终目的地的未完成日志事件的风险。详情请参阅LoggerContext.stop(long,java.util.concurrent.TimeUnit)。(如果shutdownHook设置为“disable”,则不起作用。)

shutdownHook

 指定在JVM关闭时是否自动关闭Log4j。此属性默认为“enable”,但可以通过将此属性设置为“disable”来禁用。

schema

标识类加载器的位置,以定位用于验证配置的XML模式。只有严格设置为true时才有效。如果没有设置,将不会发生模式验证。

packages

 以逗号分隔的包名列表,搜索插件时需要用到。每个类加载器只会加载一次插件,所以更改此值可能对重新配置没有任何影响。

name

配置的名称。

dest

 值为“err”、文件路径或URL。当值为“err”时会将输出发送到stderr
monitorInterval    在检查文件配置更改之前必须经过的最小时间量(以秒为单位)。

 

 

status

 应该记录到控制台的内部Log4j事件的级别。这个属性的有效值是“trace”,“debug”,“info”,“warn”,“error”和“fatal”。Log4j会记录有关初始化,翻转和其他内部操作的细节到状态记录器。如果您需要对log4j进行故障排除,设置status="trace"是您可以使用的工具之一。(或者,设置系统属性log4j2.debug也会打印内部Log4j2日志记录到控制台,包括发现配置文件之前发生的内部日志记录。)

strict 

允许使用严格的XML格式。在JSON配置中不受支持。

verbose

加载插件时启用诊断信息。

log4j.properties内容:

### 设置     =号后面相当于java变量 下边调用###
log4j.rootLogger = debug,conlose,B

### main设置日志发送到控制抬
log4j.appender.conlose= org.apache.log4j.ConsoleAppender
log4j.appender.conlose.Target = System.out
log4j.appender.conlose.layout = org.apache.log4j.PatternLayout
log4j.appender.conlose.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n

### 输出DEBUG 级别以上的日志到=E://logs/error.log
log4j.appender.B = org.apache.log4j.DailyRollingFileAppender
log4j.appender.B.File = E://logs/log.log
###输出是否覆盖   ture 为不覆盖
log4j.appender.B.Append = true 
log4j.appender.B.Threshold = DEBUG 
log4j.appender.B.layout = org.apache.log4j.PatternLayout
log4j.appender.B.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

###  File 设置日志输出到指定大小的文件 
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.Threshold=DEBUG         
log4j.appender.file.File=E://logs/log.log     //路径
log4j.appender.file.MaxFileSize=5120KB     //大小
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

log4j.properties的配置:

1. 配置根Logger , 语法为 :

           log4j.rootLogger = [ level ] , appenderName , appenderName ……

       注意 : @1 . 第七条中虽然罗列了很多级别 , 但log4j推荐只使用四个级别 , 优先级从高到低分别是ERROR , WARN , INFO , DEBUG ; 

 注意:根logger 具有继承性,他下属的appednerName均继承自他,比如继承了日志拦截级别等,当然,下属也可覆盖掉来着父类的日志拦截级别(Threshold)。如果不想继承,那么设置如下:log4j.additivity.org.apache=false

                 @2. appenderName指的是日志输出的地址 , 可以同时指定n个 ;
     

2 . 配置日志输出的目的地Appender以及每个输出文件的各项属性 , 语法为 :

            log4j.appender.appenderName = fully.qualified.name.of.appender.class       /*类的路径*/

            log4j.appender.appenderName.option1 = value1                             /*某些具体的值*/

       注意 : log4j中提供的appender有以下几种 :

                1 )org.apache.log4j.ConsoleAppender(控制台) ;

                2 )org.apache.log4j.FileAppender(文件) ;

                3 )org.apache.log4j.DailyRollingFileAppender(按照一定的频度滚动产生日志记录文件 , 默认每天产生一个文件) ;

                4 )org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件) ;

                5 )org.apache.log4j.WriterAppender(将日志信息以流格式发送到指定的位置) ;

 3 . 配置日志信息的格式或者布局layout以及布局的各项属性 , 语法为 :

            log4j.appender.appenderName.layout = fully.qualified.name.of.appender.class

            log4j.appender.appenderName.layout.option1 = value

       注意 : log4j中提供的layout有以下几种 :

               1 )org.apache.log4j.HTMLLayout(以HTML表格形式布局) ; 

               2 )org.apache.log4j.PatternLayout(可以灵活的指定布局模式 , 需要配置layout.ConversionPattern属性) ;

               3 ) org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串) ; 

               4 )org.apache.log4j.TTCCLayout(包含日志产生的时间 , 线程 , 类别等等信息) ;

 

 

控制台操作:

1 . log4j.appender.appenderName.Threshold = error

用法 : rootLogger里配置debug , 然后某个文件专门存储error以及更高级别的错误信息 , 那么就在这个配置这个文件的时候指定Threshold属性为error ;

2 .log4j.appender.appenderName.ImmediateFlush=true

用法 : 默认值是true , 意味着所有的消息都会被立即输出 , false则是不输出 ;

3 . log4j.appender.appenderName.target=System.out

用法 : 默认值为System.out , 输出到控制台 , 还可以取值System.err , 当做错误信息输出 , 输出的信息全部为红色 ;

4 .log4j.appender.appenderName.File=../../../../logs/log.appenderName.txt

用法 : 指定日志输出到指定位置 , 用的是相对于配置文件根目录的相对路径 ;

5 .log4j.appender.appenderName.File.Append=true

用法 : 默认值是true , 即将消息追加到指定文件中 , 如果取值为false , 则会覆盖之前的日志内容 ;

6 .log4j.appender.appenderName.MaxFileSize=20MB

用法 : 后缀可以是KB?, MB?, GB , 当日志文件的大小到达指定大小后 , 将会自动滚动 , 即将原来的内容移到fileName.1文件中 , 用记事本打开该文件即可看到原来的内容 , 改属性只能在 appender=org.apache.log4j.RollingFileAppender 时使用 ;

7 .log4j.appender.appenderName.MaxBackupIndex=10

用法 : 指定可以产生滚动文件的最大数量 , 与RollingFileAppender和MaxFileSize属性一起使用 , 当MaxBackupIndex=n的时候 , 最大日志存在数量为n+1 , 即log.txt , log.txt.1 , ... , log.txt.n , 当在服务器上运行的时候 , 如果对日志数量没有限制 , 那么随之时间的推移 , 日志文件会越来越多 , 占用的内存也将越来越多 , 直到占满整个盘 ;

8 .log4j.appender.appenderName.DatePattern='.'yyyy-MM-dd

用法 : 该属性在 log4j.appender.appenderName=org.apache.log4j.DailyRollingFileAppender 时使用 , DailyRollingFileAppender默认的频度是每天产生一个日志记录文件 , 可以在DatePattern属性值中指定其他的频度 , 常用的几个频度如下 :

 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 : 每分钟产生一个日志记录文件 ;

注意 : 该属性指定值之后 , 将会按照指定的频度来生成日志记录文件 , 假设指定生成一个名为 log.txt 的文件 , 频度指定为每分钟产生一个日志记录文件 , 当达到指定频度后 , 会将log.txt文件中记录的之前的日志记录 , 重新写入一个名为 log.txt.yyyy-MM-dd-HH-mm的文件中 , 而此时 log.txt 文件中存放的是新生成的日志信息 , 该过程循环往复 ;

有需要补充的请在评论区留言  谢谢