log4j和logback

一、log4j

1.在pom.xml添加:

<!-- https://mvnrepository.com/artifact/log4j/log4j -->
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency> 

<!-- https://mvnrepository.com/artifact/commons-logging/commons-logging -->
<dependency>
    <groupId>commons-logging</groupId>
    <artifactId>commons-logging</artifactId>
    <version>1.1.1</version>
</dependency>

2.在web.xml中添加:

<!-- 配置log4j start -->
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>classpath:config/log4j.properties</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
<!-- 配置log4j end-->

3.在src/main/resoureces/config添加log4j.properties

 ### \u8BBE\u7F6E###
log4j.rootLogger = debug,stdout,D,E


### \u8F93\u51FA\u4FE1\u606F\u5230\u63A7\u5236\u62AC ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
#log4j.appender.stdout.Target = System.out
#log4j.additivity.com.stdout.user=false
log4j.appender.stdout.Threshold = DEBUG 
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern =  %d{yyyy-MM-dd HH:mm:ss,SSS} %m%n


### \u8F93\u51FADEBUG \u7EA7\u522B\u4EE5\u4E0A\u7684\u65E5\u5FD7\u5230=E://logs/error.log ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = ${rootWeb.wlroot}/WEB-INF/logs/log.log
log4j.appender.D.Append = true
log4j.appender.D.MaxBackupIndex=10
log4j.appender.D.Threshold = DEBUG 
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n


### \u8F93\u51FAERROR \u7EA7\u522B\u4EE5\u4E0A\u7684\u65E5\u5FD7\u5230=E://logs/error.log ###
log4j.appender.E = org.apache.log4j.RollingFileAppender
log4j.appender.E.File =${rootWeb.wlroot}/WEB-INF/logs/error.log 
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR 
log4j.appender.E.MaxFileSize=10MB
log4j.appender.E.MaxBackupIndex=10
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n


#和mybatis相結合,輸出sql
#log4j.logger.com.springframework=DEBUG
#log4j.logger.com.ibatis=DEBUG
#log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG
#log4j.logger.com.ibatis.common.jdbc.ScriptRunner=DEBUG
#log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG

二、logback

1.在pom.xml添加

<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>


<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>${logback.version}</version>
<scope>runtime</scope>
</dependency>


<!-- 代碼直接調用log4j會被橋接到slf4j -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>log4j-over-slf4j</artifactId>
<version>${slf4j.version}</version>
<scope>runtime</scope>
</dependency>
<!-- 代碼直接調用common-logging會被橋接到slf4j -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>${slf4j.version}</version>
<scope>runtime</scope>
</dependency>
<!-- 代碼直接調用java.util.logging會被橋接到slf4j -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jul-to-slf4j</artifactId>
<version>${slf4j.version}</version>
<scope>runtime</scope>
</dependency>


<dependency>
<groupId>org.bgee.log4jdbc-log4j2</groupId>
<artifactId>log4jdbc-log4j2-jdbc4</artifactId>
<version>1.15</version>
<scope>runtime</scope>
</dependency>


2.在web.xml中添加:

<context-param>  
    <param-name>logbackConfigLocation</param-name>  
    <param-value>classpath:config/logback.xml</param-value>  
</context-param>  
<listener>  
    <listener-class>ch.qos.logback.ext.spring.web.LogbackConfigListener</listener-class>  
</listener>

3.在src/main/resoureces/config添加logback.xml
<?xml version="1.0" encoding="UTF-8"?>  
<configuration>  
    <!-- 儘量別用絕對路徑,如果帶參數不同容器路徑解釋可能不同,以下配置參數在pom.xml裏 -->  
    <property name="log.root.level" value="DEBUG" /> <!-- 日誌級別 -->  
    <property name="log.other.level" value="DEBUG" /> <!-- 其他日誌級別 -->  
    <property name="log.base" value="logs" /> <!-- 日誌路徑,這裏是相對路徑,web項目eclipse下會輸出到eclipse的安裝目錄下,如果部署到linux上的tomcat下,會輸出到tomcat/bin目錄 下 -->  
    <property name="log.moduleName" value="SSM" />  <!-- 模塊名稱, 影響日誌配置名,日誌文件名 -->  
    <property name="log.max.size" value="100MB" /> <!-- 日誌文件大小 -->  
  
    <!--控制檯輸出 -->  
    <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">  
    
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">  
            <Pattern>%date{yyyy-MM-dd HH:mm:ss.SSS} %-5level[%thread]%logger{56}.%method:%L -%msg%n</Pattern>  
        </encoder>  
    </appender>  
  
    <!-- 用來保存輸出所有級別的日誌 -->  
    <appender name="file.all" class="ch.qos.logback.core.rolling.RollingFileAppender">  
        <File>${log.base}/${log.moduleName}.log</File><!-- 設置日誌不超過${log.max.size}時的保存路徑,注意如果   
            是web項目會保存到Tomcat的bin目錄 下 -->  
        <!-- 滾動記錄文件,先將日誌記錄到指定文件,當符合某個條件時,將日誌記錄到其他文件。 -->  
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">  
            <FileNamePattern>${log.base}/archive/${log.moduleName}_all_%d{yyyy-MM-dd}.%i.log.zip  
            </FileNamePattern>  
            <!-- 文件輸出日誌 (文件大小策略進行文件輸出,超過指定大小對文件備份) -->  
            <timeBasedFileNamingAndTriggeringPolicy  
                class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">  
                <maxFileSize>${log.max.size}</maxFileSize>  
            </timeBasedFileNamingAndTriggeringPolicy>  
        </rollingPolicy>  
        <!-- 日誌輸出的文件的格式 -->  
        <layout class="ch.qos.logback.classic.PatternLayout">  
            <pattern>%date{yyyy-MM-dd HH:mm:ss.SSS} %-5level[%thread]%logger{56}.%method:%L -%msg%n</pattern>  
        </layout>  
    </appender>  
      
    <!-- 這也是用來保存輸出所有級別的日誌 -->  
    <appender name="file.all.other" class="ch.qos.logback.core.rolling.RollingFileAppender">  
        <File>${log.base}/${log.moduleName}_other.log</File>  
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">  
            <FileNamePattern>${log.base}/archive/${log.moduleName}_other_%d{yyyy-MM-dd}.%i.log.zip  
            </FileNamePattern>  
            <timeBasedFileNamingAndTriggeringPolicy  
                class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">  
                <maxFileSize>${log.max.size}</maxFileSize>  
            </timeBasedFileNamingAndTriggeringPolicy>  
        </rollingPolicy>  
        <layout class="ch.qos.logback.classic.PatternLayout">  
            <pattern>%date{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{56}.%method:%L -%msg%n</pattern>  
        </layout>  
    </appender>  
  
    <!-- 只用保存輸出error級別的日誌 -->  
    <appender name="file.error"  
        class="ch.qos.logback.core.rolling.RollingFileAppender">  
        <File>${log.base}/${log.moduleName}_err.log</File>  
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">  
            <FileNamePattern>${log.base}/archive/${log.moduleName}_err_%d{yyyy-MM-dd}.%i.log.zip  
            </FileNamePattern>  
            <timeBasedFileNamingAndTriggeringPolicy  
                class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">  
                <maxFileSize>${log.max.size}</maxFileSize>  
            </timeBasedFileNamingAndTriggeringPolicy>  
        </rollingPolicy>  
        <layout class="ch.qos.logback.classic.PatternLayout">  
            <pattern>%date{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{56}.%method:%L - %msg%n</pattern>  
        </layout>  
        <!-- 下面爲配置只輸出error級別的日誌 -->  
        <filter class="ch.qos.logback.classic.filter.LevelFilter">  
            <level>ERROR</level>  
            <onMatch>ACCEPT</onMatch>  
            <onMismatch>DENY</onMismatch>  
        </filter>  
    </appender>  
  
   <!-- 不丟失日誌.默認的,如果隊列的80%已滿,則會丟棄TRACT、DEBUG、INFO級別的日誌 -->  
    <!-- 更改默認的隊列的深度,該值會影響性能.默認值爲256 -->  
    <!-- 添加附加的appender,最多隻能添加一個 -->  
    <appender name="file.async" class="ch.qos.logback.classic.AsyncAppender">  
        <discardingThreshold>0</discardingThreshold>  
        <queueSize>256</queueSize>  
        <includeCallerData>true</includeCallerData>  
        <appender-ref ref="file.all" />  
    </appender>  
  
    <appender name="file.async.other" class="ch.qos.logback.classic.AsyncAppender">  
        <discardingThreshold>0</discardingThreshold>  
        <queueSize>256</queueSize>  
        <includeCallerData>true</includeCallerData>  
        <appender-ref ref="file.all.other" />  
    </appender>  
    
  <!-- 配置myibatis展示sql -->
    <logger name="java.sql.Connection" level="debug" />
    <logger name="java.sql.Statement" level="debug" />
    <logger name="java.sql.PreparedStatement" level="debug" />
    <logger name="java.sql.ResultSet" level="debug" />
  
    <!-- 爲某個包下的所有類的指定Appender 這裏也可以指定類名稱例如:com.aa.bb.ClassName -->  
    <logger name="com.wl" additivity="false">  
        <level value="${log.root.level}" />  
        <appender-ref ref="stdout" />   
        <appender-ref ref="file.async" />  <!-- 即com.wl包下級別爲 ${log.root.level}的纔會使用file.async來打印 -->  
        <appender-ref ref="file.error" />  
    </logger>  
     <logger name="dao" level="DEBUG">  
   <!--  daoFILE爲實際定義的appender   -->
        
</logger> 


      
    <!-- root將級別爲${log.root.level}及大於${log.root.level}的日誌信息交給已經配置好的名爲“Console”的appender處理,“Console”appender將信息打印到Console,其它同理 -->  
    <root level="${log.root.level}">  
        <appender-ref ref="stdout" /> <!--  標識這個appender將會添加到這個logger -->  
        <appender-ref ref="file.async.other" />  
        <appender-ref ref="file.error" />  
    </root>  
</configuration>  

4.如果項目配置了mybatis,在mybatis-config.xml中添加 <setting name="logPrefix" value="dao."/> ,如果配置文件中有<setting name="logImpl" value="STDOUT_LOGGING"/>,請註釋掉,不然sql只會在控制檯輸出。

發佈了33 篇原創文章 · 獲贊 14 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章