Log4j

     Log4j

一、Log4j簡介(全稱:Log for Java

01:是使用Java語言編寫的一個日誌框架
02:是Apache的一個開源項目
03:記錄咱們程序中的日誌信息
04:能夠將日誌信息輸出到指定的目的地html

Log4j的做用:
   01:記錄咱們代碼中變量的變化,用於程序的調試和後期的維護
   02:能夠週期性的保存一些數據,用於後期對數據的分析
   03:經過設置日誌信息的級別,來用於咱們的管理apache

若是程序中出現了異常。該怎麼解決?

01:使用異常處理機制==>異常
  02:經過debug調試(必須掌握)
  03:system.out.print()
     001:控制檯的行數有限
     002:影響咱們的系統性能
     003:若是咱們須要對用戶的行爲和習慣進行分析
咱們須要一個能把記錄用戶的行爲和習慣的代碼記錄在一個文件中
  .log(日誌文件: 你們平時上網或者安裝軟件的時候,常常會看到一些以.log結尾的文件。這就是咱們的日誌文件!app

注意:並不是全部的日誌文件都是以.log結尾的,能夠是其餘的框架

把全部的信息打印在控制檯上不行嗎?
      01.控制檯有行數限制;
      02.System.out.println()影響系統性能;
      03.若是咱們須要對一些用戶的行爲習慣進行分析,咱們找不到用戶的數據!ide

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
第一種狀況
 
  

   第二種狀況:spa

第二個:把日誌輸出到文件中(時間)
#把日誌輸出到文件中
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:debug

 

<?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");

    }
}
測試類

須要導入的四個架包

相關文章
相關標籤/搜索