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: 定义日志类型
 * @author [email protected]
 * @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: 对日志进行业务划分
 * @author [email protected]
 * @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);

时间: 2024-08-01 21:15:05

logback + slf4j 学习的相关文章

log4j+logback+slf4j+commons-logging的关系与调试(转)

log4j+logback+slf4j+commons-logging的关系与调试 从Log4j迁移到LogBack的理由 http://www.tuicool.com/articles/beeeYvF 为什么要使用SLF4J而不是Log4J

备忘:hibernate, logback, slf4j实际应用一例

用hibernate写一些简单的数据库的Java应用.主要是温习一下.之前弄过的一些都忘了.发现还是得记下来,不然很快就忘. 1. Eclipse版本,用Juno, J2EE版本.最好下载zip版本的,直接解压就运行. 2. JDK安装,到Oracle上搜索jdk, 然后下载.安装JDK后,设置JAVA_HOME,指到JDK安装目录,将%JAVA_HOME%\bin放到PATH变量的最前面. 3. Maven.到Eclipse marketplace上搜索maven, 会有一个Maven Int

Log4j,Log4j2,logback,slf4j日志学习

日志学习笔记 Log4j Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台.文件.数据库等:我们也可以控制每一条日志的输出格式:通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程. Log4j有7种不同的log级别,按照等级从低到高依次为:TRACE.DEBUG.INFO.WARN.ERROR.FATAL.OFF.如果配置为OFF级别,表示关闭log. Log4j支持两种格式的配置文件:properties和xml.包含三

log4j+logback+slf4j+commons-logging的关系与调试(转)

背景     由于现在开源框架日益丰富,好多开源框架使用的日志组件不尽相同.存在着在一个项目中,不同的版本,不同的框架共存.导致日志输出异常混乱.虽然也不至于对系统造成致命伤害,但是明显可以看出,架构不够精良,追求极致略有不足.     其中有一些标准通用接口,标准实现,各种桥接器的存在,下面就让笔者树立一下这些框架之间的关系. 从上图中,我们可以看到4部分. 接口:将所有日志实现适配到了一起,用统一的接口调用. 实现:目前主流的日志实现 旧日志到slf4j的适配器:如果使用了slf4j,但是只

log4j+logback+slf4j+commons-logging的关系与调试

背景     由于现在开源框架日益丰富,好多开源框架使用的日志组件不尽相同.存在着在一个项目中,不同的版本,不同的框架共存.导致日志输出异常混乱.虽然也不至于对系统造成致命伤害,但是明显可以看出,架构不够精良,追求极致略有不足.     其中有一些标准通用接口,标准实现,各种桥接器的存在,下面就让笔者树立一下这些框架之间的关系.  从上图中,我们可以看到4部分. 接口:将所有日志实现适配到了一起,用统一的接口调用. 实现:目前主流的日志实现 旧日志到slf4j的适配器:如果使用了slf4j,但是

logback + slf4j + jboss + spring mvc

logback.log4j.log4j2 全是以同一个人为首的团伙搞出来的(日志专业户!),这几个各有所长,log4j性能相对最差,log4j2性能不错,但是目前跟mybatis有些犯冲(log4j2的当前版本,已经将AbstractLoggerWrapper更名成ExtendedLoggerWrapper,但是mybatis依赖的仍然是旧版本的log4j2,所以mybatis使用log4j2会报错),说到日志,还要注意另一外项目SLF4J( java的世界里,记日志的组件真是多!),SLF4J

log4j+slf4j管理日志项目迁移logback+slf4j

作为一个刚踏入java语言的小学生,最近被安排了一个任务,原有的项目中使用的是log4j日志管理 要转换成logbacak的日志管理.介于之前并未深究log4j和logback日志,所以做起来也很是头疼,不得不查询资料问别人,才勉强完成,所以记录一下从头的步骤,以供别人参考,有不对地方还请大神斧正. 首先提供一下log4j和slf4j以及logback的关系图 第一步:我们项目是log4j+转slf4j管理的,要替换成logback,所以需要删除掉log4j和slf4j-log4j12的所有ja

shop--13.日志 logback SLF4j

1.private final Logger logger = LoggerFactory.getLogger(当前类.class); logger.debug("debug"); logger.info("info"); logger.error("error"); 2.或者使用注解 @Slf4j 然后下面使用 log.debug("debug"); log.info("info"); log.error

Spring Boot中的logback + slf4j

1什么时slf4j slf4j是一个日志接口,自己没有具体实现日志系统,只提供了一组标准的调用api,这样将调用和具体的日志实现分离,使用slf4j后有利于根据自己实际的需求更换具体的日志系统,比如,之前使用的具体的日志系统为log4j,想更换为logback时,只需要删除log4j相关的jar,然后加入logback相关的jar和日志配置文件即可,而不需要改动具体的日志输出方法,试想如果没有采用这种方式,当你的系统中日志输出有成千上万条时,你要更换日志系统将是多么庞大的一项工程.如果你开发的是