logback + slf4j 学习

1:在web.xml文件配置Listener

<context-param>

<param-name>logbackConfigLocation</param-name>
<param-value>classpath:logback.xml</param-value> <!-- classpath是指 WEB-INF文件夹下的classes目录 -->
</context-param>
<listener>
<listener-class>ch.qos.logback.ext.spring.web.LogbackConfigListener</listener-class>
</listener>

2:logback.xml文件内容

<configuration>
    <property name="LoggingDir" value="logs/" />
    <property name="ROOT_LEVEL" value="TRACE" />
    <timestamp key="byDate" datePattern="yyyyMMdd"/>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>TRACE</level>
        </filter>
        <layout class="ch.qos.logback.classic.PatternLayout">
            <Pattern>%d{ HH:mm:ss.SSS} %-5level %marker %logger - %msg%n</Pattern>
        </layout>
    </appender>
    <appender name="DEBUG" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <append>true</append>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>DEBUG</level>
        </filter>
        <file>${LoggingDir}debug.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LoggingDir}history/debug.%d{yyyy-MM-dd}.zip</fileNamePattern>
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} level:%level %marker thread:%thread logger:%logger message:%msg%n
            </pattern>
        </encoder>
    </appender>
 
	 <appender name="USER" class="ch.qos.logback.core.rolling.RollingFileAppender">
	        <append>true</append>
	        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
	            <level>INFO</level>
	        </filter>
	        <file>${LoggingDir}user.log</file>
	        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
	            <fileNamePattern>${LoggingDir}history/user.%d{yyyy-MM-dd}.zip</fileNamePattern>
	            <maxHistory>30</maxHistory>
	        </rollingPolicy>
	        <encoder>
	            <pattern>%d{HH:mm:ss.SSS} %level %marker thread:%thread logger:%logger message:%msg%n
	            </pattern>
	        </encoder>
	 </appender>
 
 	<appender name="OPEARTION" class="ch.qos.logback.core.rolling.RollingFileAppender">
	        <append>true</append>
	        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
	            <level>INFO</level>
	        </filter>
	        <file>${LoggingDir}opeartion.log</file>
	        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
	            <fileNamePattern>${LoggingDir}history/opeartion.%d{yyyy-MM-dd}.zip</fileNamePattern>
	            <maxHistory>30</maxHistory>
	        </rollingPolicy>
	        <encoder>
	            <pattern>%d{HH:mm:ss.SSS} %level %marker thread:%thread logger:%logger message:%msg%n
	            </pattern>
	        </encoder>
	 </appender>
	 
	<appender name="WECHAT" class="ch.qos.logback.core.rolling.RollingFileAppender">
	        <append>true</append>
	        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
	            <level>INFO</level>
	        </filter>
	        <file>${LoggingDir}wechat.log</file>
	        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
	            <fileNamePattern>${LoggingDir}history/wechat.%d{yyyy-MM-dd}.zip</fileNamePattern>
	            <maxHistory>30</maxHistory>
	        </rollingPolicy>
	        <encoder>
	            <pattern>%d{HH:mm:ss.SSS} %level %marker thread:%thread logger:%logger message:%msg%n
	            </pattern>
	        </encoder>
	 </appender>
 
 	<appender name="INTERFACE" class="ch.qos.logback.core.rolling.RollingFileAppender">
	        <append>true</append>
	        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
	            <level>INFO</level>
	        </filter>
	        <file>${LoggingDir}interface.log</file>
	        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
	            <fileNamePattern>${LoggingDir}history/interface.%d{yyyy-MM-dd}.zip</fileNamePattern>
	            <maxHistory>30</maxHistory>
	        </rollingPolicy>
	        <encoder>
	            <pattern>%d{HH:mm:ss.SSS} %level %marker thread:%thread logger:%logger message:%msg%n
	            </pattern>
	        </encoder>
	 </appender>
	 
	 <appender name="BUSINESS" class="ch.qos.logback.core.rolling.RollingFileAppender">
	        <append>true</append>
	        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
	            <level>INFO</level>
	        </filter>
	        <file>${LoggingDir}business.log</file>
	        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
	            <fileNamePattern>${LoggingDir}history/business.%d{yyyy-MM-dd}.zip</fileNamePattern>
	            <maxHistory>30</maxHistory>
	        </rollingPolicy>
	        <encoder>
	            <pattern>%d{HH:mm:ss.SSS} %level %marker thread:%thread logger:%logger message:%msg%n
	            </pattern>
	        </encoder>
	 </appender>
 
 	<appender name="ASYNC_STDOUT" class="ch.qos.logback.classic.AsyncAppender">
        <appender-ref ref="STDOUT"/>
    </appender>
    
    <appender name="ASYNC_DEBUG" class="ch.qos.logback.classic.AsyncAppender">
        <appender-ref ref="DEBUG"/>
    </appender>
 
 	<appender name="ASYNC_USER" class="ch.qos.logback.classic.AsyncAppender">
        <appender-ref ref="USER"/>
    </appender>
 
 	<appender name="ASYNC_OPEARTION" class="ch.qos.logback.classic.AsyncAppender">
        <appender-ref ref="OPEARTION"/>
    </appender>
    
    <appender name="ASYNC_WECHAT" class="ch.qos.logback.classic.AsyncAppender">
        <appender-ref ref="WECHAT"/>
    </appender>
    
    <appender name="ASYNC_INTERFACE" class="ch.qos.logback.classic.AsyncAppender">
        <appender-ref ref="INTERFACE"/>
    </appender>
 
    <turboFilter class="ch.qos.logback.classic.turbo.MarkerFilter">
        <Marker>org.domain.library</Marker>
        <OnMatch>ACCEPT</OnMatch>
    </turboFilter>
    <turboFilter class="ch.qos.logback.classic.turbo.MarkerFilter">
        <Marker>org.apache.http</Marker>
        <OnMatch>DENY</OnMatch>
    </turboFilter>
    <turboFilter class="ch.qos.logback.classic.turbo.MDCFilter">
        <MDCKey>username</MDCKey>
        <Value>sebastien</Value>
        <OnMatch>ACCEPT</OnMatch>
    </turboFilter>
 
 
    <!-- This file appender is used to output aggregated performance statistics -->
    <appender name="perf4jFileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <File>${LoggingDir}perf4j.log</File>
        <encoder>
            <Pattern>%date %-5level [%thread] %logger{36} [%file:%line] %msg%n</Pattern>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <FileNamePattern>${LoggingDir}perf4j.%d{yyyy-MM-dd}.log</FileNamePattern>
        </rollingPolicy>
    </appender>
 
    <logger name="org.perf4j.TimingLogger" additivity="false">
        <level value="INFO"/>
        <appender-ref ref="perf4jFileAppender"/>
    </logger>
 
    <logger name="org.springframework" level="INFO">
        <appender-ref ref="ASYNC_STDOUT"/>
        <appender-ref ref="ASYNC_DEBUG"/>
    </logger>
 
    <logger name="com.amazonaws" level="INFO">
        <appender-ref ref="ASYNC_STDOUT"/>
        <appender-ref ref="ASYNC_DEBUG"/>
    </logger>
 
    <logger name="org.apache.http" level="INFO">
        <appender-ref ref="ASYNC_STDOUT"/>
        <appender-ref ref="ASYNC_DEBUG"/>
    </logger>
 
    <logger name="org.apache.commons.configuration" level="INFO">
        <appender-ref ref="ASYNC_STDOUT"/>
        <appender-ref ref="ASYNC_DEBUG"/>
    </logger>

    <logger name="freemarker" level="INFO">
        <appender-ref ref="ASYNC_STDOUT"/>
        <appender-ref ref="ASYNC_DEBUG"/>
    </logger>
 
 	<logger name="debugLogger" level="INFO">
 		<appender-ref ref="ASYNC_DEBUG"/>
 	</logger>
 
 	<logger name="userLogger" level="INFO">
 		<appender-ref ref="ASYNC_USER"/>
 	</logger>
 	
 	<logger name="opeartionLogger" level="INFO">
 		<appender-ref ref="ASYNC_OPEARTION"/>
 	</logger>
 	
 	<logger name="wechatLogger" level="INFO">
 		<appender-ref ref="ASYNC_WECHAT"/>
 	</logger>
 
 	<logger name="interfaceLogger" level="INFO">
 		<appender-ref ref="ASYNC_INTERFACE"/>
 	</logger>
 	
 	<logger name="businessLogger" level="INFO">
 		<appender-ref ref="BUSINESS"/>
 	</logger>
 	
    <root level="${ROOT_LEVEL}">
        <appender-ref ref="STDOUT"/>
        <appender-ref ref="ASYNC_DEBUG"/>
    </root>
    
</configuration>

  3:java代码

package com.guoxinet.o2o.core.log;

/**
 * @ClassName: LogFactory
 * @Description: 定义日志类型
 * @date 2015-6-20 下午2:23:34
 *
 */
public interface LogType {
	final String DEBUG ="debugLogger.";
	final String USER ="userLogger.";
	final String OPEARTION ="opeartionLogger.";
	final String WECHAT ="wechatLogger.";
	final String INTERFACE ="interfaceLogger.";
	final String BUSINESS ="businessLogger.";
}

  

package com.guoxinet.o2o.core.log;

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

/**
 * @ClassName: LogFactory
 * @Description: 对日志进行业务划分
 * @date 2015-6-20 下午2:23:34
 *
 */
public class LogFactory implements LogType{
	
	/**
	 * 获取调试日志输出
	 * @param clz
	 * @return
	 */
	@SuppressWarnings("rawtypes")
	public static final Logger getDebugLogger(Class clz){
		return LoggerFactory.getLogger(new StringBuffer(DEBUG).append(clz.getName()).toString());
	}
	
	/**
	 * 获取用户日志输出
	 * @param clz
	 * @return
	 */
	@SuppressWarnings("rawtypes")
	public static final Logger getUserLogger(Class clz){
		return LoggerFactory.getLogger(new StringBuffer(USER).append(clz.getName()).toString());
	}
	
	/**
	 * 获取操作日志输出
	 * @param clz
	 * @return
	 */
	@SuppressWarnings("rawtypes")
	public static final Logger getOpeartionLogger(Class clz){
		return LoggerFactory.getLogger(new StringBuffer(OPEARTION).append(clz.getName()).toString());
	}
	
	/**
	 * 获取微信日志输出
	 * @param clz
	 * @return
	 */
	@SuppressWarnings("rawtypes")
	public static final Logger getWechatLogger(Class clz){
		return LoggerFactory.getLogger(new StringBuffer(WECHAT).append(clz.getName()).toString());
	}
	
	/**
	 * 获取接口日志输出
	 * @param clz
	 * @return
	 */
	@SuppressWarnings("rawtypes")
	public static final Logger getInterfaceLogger(Class clz){
		return LoggerFactory.getLogger(new StringBuffer(INTERFACE).append(clz.getName()).toString());
	}
	
	/**
	 * 获取业务日志输出
	 * @param clz
	 * @return
	 */
	@SuppressWarnings("rawtypes")
	public static final Logger getBusinessLogger(Class clz){
		return LoggerFactory.getLogger(new StringBuffer(BUSINESS).append(clz.getName()).toString());
	}
}

  4:调用方式

  protected Logger debugLogger = LogFactory.getDebugLogger(getClass());

  debugLogger.info("Request ip info, hostIP===>" + this.hIp+ "   hostPort===>" + this.hPort);

原文地址:https://www.cnblogs.com/working/p/4724893.html