logback日志文件

Logback是由log4j创始人Ceki Gülcü设计的又一个开源日志组件。

 

logback.xml

 

<?xml version="1.0" encoding="UTF-8"?> <!-- Reference Manual http://logback.qos.ch/manual/index.html --> 
	<configuration> 
		<!-- LEVEL:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF -->
		<!-- 控制台输出 -->
		<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">    
			<!-- encoder 可以指定字符集,对于中文输出有意义 -->     
			<encoder charset="UTF-8">            
				<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>        
			</encoder>    
		</appender>
		
		<!-- 每日最多生成10个文件,可以通过这些文件查看系统工作状态 -->
		<!--
		<appender name="RollingFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
			<filter class="ch.qos.logback.classic.filter.ThresholdFilter">            
				<level>TRACE</level>        
			</filter>     
			<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
				<fileNamePattern>${log.root}/WEB-INF/logs/trace-%d{yyyy-MM-dd}.log</fileNamePattern>  

          
				<maxHistory>10</maxHistory>        
			</rollingPolicy>
			<encoder>            
				<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>        
			</encoder>    
		</appender> 
		-->
		
		<!-- 下面这段注释的代码可以在日志文件超过 5MB 时进行归档,并且归档文件后缀只要是 .zip 或 .gz 就会自动

压缩日志归档 -->
		<appender name="InfoFileZip" class="ch.qos.logback.core.rolling.RollingFileAppender">
			<file>${log.root}/WEB-INF/logs/info.log</file>  
			<filter class="ch.qos.logback.classic.filter.ThresholdFilter">            
				<level>INFO</level>        
			</filter>
			<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
				<fileNamePattern>${log.root}/WEB-INF/logs/bak/info.%i.log.zip</fileNamePattern>       

   
				<minIndex>1</minIndex>
				<maxIndex>10</maxIndex>
			</rollingPolicy>  
			
			<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">          
				<maxFileSize>10MB</maxFileSize>
			</triggeringPolicy>   

			<encoder>       
				<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>        
			</encoder>    
		</appender>
 		
		<!-- 时间滚动输出 level为 ERROR 日志 -->
		<appender name="ErrorFile" class="ch.qos.logback.core.rolling.RollingFileAppender">         
			<filter class="ch.qos.logback.classic.filter.LevelFilter">           
				<level>ERROR</level>           
				<OnMismatch>DENY</OnMismatch>           
				<OnMatch>ACCEPT</OnMatch>       
			</filter>
			<File>${log.root}/WEB-INF/logs/error.log</File>
			<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">            
				<FileNamePattern>${log.root}/WEB-INF/logs/error.log.%i.bak</FileNamePattern>          

  
				<MinIndex>1</MinIndex> 
				<MaxIndex>3</MaxIndex>
			</rollingPolicy>       
			<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">            
				<MaxFileSize>100MB</MaxFileSize>        
			</triggeringPolicy>        
			<encoder>
				<Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg

%n</Pattern>        
			</encoder>
		</appender>


	<!-- 输出到控制台和文件,可定义更多的 Appender,默认配置 -->     
	<root level="DEBUG">
		<appender-ref ref="stdout" /> 
	</root>  
	
	<!-- com.sysmaster包配置日志规则 -->
	<logger name="com.sysmaster" level="INFO" additivity="false">
		<appender-ref ref="stdout"/>
		<appender-ref ref="InfoFileZip"/>
		<appender-ref ref="ErrorFile"/>
	</logger>
	
	<!--为com.sysmaster.po.ResourcePO类配置日志规则 -->
	<!--
	<logger name="com.sysmaster.po.ResourcePO" level="INFO" additivity="false">
		<appender-ref ref="STDOUT"/>
	</logger>
	-->
	
	<!-- 下面配置一些第三方包的日志过滤级别,用于避免刷屏 -->  
	<!--
	<logger name="org.hibernate" level="WARN"/>    
	<logger name="org.springframework" level="WARN"/>    
	<logger name="com.opensymphony" level="WARN"/>    
	<logger name="org.apache" level="WARN"/> 
	-->
	
	<!-- 为 Hibernate 定制日志规则  --> 
	<logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="TRACE"/>    
	<logger name="org.hibernate.type.descriptor.sql.BasicExtractor" level="DEBUG"/>    
	<logger name="org.hibernate.SQL" level="DEBUG"/>
	<logger name="org.hibernate.engine.QueryParameters" level="DEBUG"/>    
	<logger name="org.hibernate.engine.query.HQLQueryPlan" level="DEBUG"/> 
</configuration>

 

LogbackConfigListener.java

package com.sysmaster.util.logback;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

/**
 * 用于启用logback日志 
 * 
 */
public class LogbackConfigListener implements ServletContextListener {

    public void contextInitialized(ServletContextEvent event) {
        LogbackWebConfigurer.initLogging(event.getServletContext());
    }

    public void contextDestroyed(ServletContextEvent event) {
        LogbackWebConfigurer.shutdownLogging(event.getServletContext());
    }
}

 

LogbackConfigurer.java

package com.sysmaster.util.logback;

import java.io.File;
import java.io.FileNotFoundException;
import java.net.URL;

import org.slf4j.LoggerFactory;
import org.springframework.util.ResourceUtils;
import org.springframework.util.SystemPropertyUtils;

import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.classic.joran.JoranConfigurator;
import ch.qos.logback.core.joran.spi.JoranException;

/**
 * 
 * 用于读取logback的配置文件,可以直接用spring->log4j的代码修改
 * 
 */
public abstract class LogbackConfigurer 
{
    public static final String CLASSPATH_URL_PREFIX = "classpath:";

    public static final String XML_FILE_EXTENSION   = ".xml";

    private static LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
    private static JoranConfigurator configurator = new JoranConfigurator();

    public static void initLogging(String location) throws FileNotFoundException {
        String resolvedLocation = SystemPropertyUtils.resolvePlaceholders(location);
        URL url = ResourceUtils.getURL(resolvedLocation);
        if (resolvedLocation.toLowerCase().endsWith(XML_FILE_EXTENSION)) {
            configurator.setContext(lc);
            lc.reset();
            try {
                configurator.doConfigure(url);
            } catch (JoranException ex) {
                throw new FileNotFoundException(url.getPath());
            }
            lc.start();
        }
    }

    public static void shutdownLogging() {
        lc.stop();
    }

    public static void setWorkingDirSystemProperty(String key) {
        System.setProperty(key, new File("").getAbsolutePath());
    }

}

 

LogbackWebConfigurer.java

package com.sysmaster.util.logback;

import java.io.FileNotFoundException;

import javax.servlet.ServletContext;

import org.springframework.util.ResourceUtils;
import org.springframework.util.SystemPropertyUtils;
import org.springframework.web.util.WebUtils;

/**
 * 
 * 用于读取logback的WEB配置文件,可以直接用spring->log4j的代码修改
 * 
 */
public abstract class LogbackWebConfigurer 
{
    public static final String CONFIG_LOCATION_PARAM  = "logbackConfigLocation";
    public static final String REFRESH_INTERVAL_PARAM  = "logbackRefreshInterval";
    public static final String EXPOSE_WEB_APP_ROOT_PARAM = "logbackExposeWebAppRoot";

    public static void initLogging(ServletContext servletContext) {
        if (exposeWebAppRoot(servletContext)) {
            WebUtils.setWebAppRootSystemProperty(servletContext);
        }

        String location = servletContext.getInitParameter(CONFIG_LOCATION_PARAM);
        if (location != null) {
            try {
                if (!ResourceUtils.isUrl(location)) {
                    location = SystemPropertyUtils.resolvePlaceholders(location);
                    location = WebUtils.getRealPath(servletContext, location);
                }
                servletContext.log("从 [" + location + "]初始化logback的配置");
                LogbackConfigurer.initLogging(location);

            } catch (FileNotFoundException ex) {
                throw new IllegalArgumentException("无效的 'logbackConfigLocation' 配置参数,请检查web.xml中的logbackConfigLocation参数值前是否有classpat字样: " + ex.getMessage());
            }
        }
    }

    public static void shutdownLogging(ServletContext servletContext) {
        servletContext.log("关闭logback");
        try {
            LogbackConfigurer.shutdownLogging();
        } finally {
            if (exposeWebAppRoot(servletContext)) {
                WebUtils.removeWebAppRootSystemProperty(servletContext);
            }
        }
    }

    private static boolean exposeWebAppRoot(ServletContext servletContext) {
        String exposeWebAppRootParam = servletContext.getInitParameter(EXPOSE_WEB_APP_ROOT_PARAM);
        return (exposeWebAppRootParam == null || Boolean.valueOf(exposeWebAppRootParam));
    }

}

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值