文档章节

日志LogBack

longload
 longload
发布于 2016/07/12 17:49
字数 397
阅读 4
收藏 0

需要自定义一个Listener 来加载配置文件

package com.sj.common.listener;
import javax.servlet.ServletContextEvent;  
import javax.servlet.ServletContextListener;  
import org.slf4j.Logger;  
import org.slf4j.LoggerFactory;  
import ch.qos.logback.classic.LoggerContext;  
import ch.qos.logback.classic.joran.JoranConfigurator;  
import ch.qos.logback.core.joran.spi.JoranException;  
/** 
 * 
 * @author longload
 *
 */
public class LogbackConfigListener implements ServletContextListener {  
    private static final Logger logger = LoggerFactory.getLogger(LogbackConfigListener.class);  
     
    private static final String CONFIG_LOCATION = "logbackConfigLocation";  
    @Override  
    public void contextInitialized(ServletContextEvent event) {  
        //从web.xml中加载指定文件名的日志配置文件  
        String logbackConfigLocation = event.getServletContext().getInitParameter(CONFIG_LOCATION);  
        String fn = event.getServletContext().getRealPath(logbackConfigLocation);  
        try {  
            LoggerContext loggerContext = (LoggerContext)LoggerFactory.getILoggerFactory();  
            loggerContext.reset();  
            JoranConfigurator joranConfigurator = new JoranConfigurator();  
            joranConfigurator.setContext(loggerContext);  
            joranConfigurator.doConfigure(fn);  
            logger.debug("loaded slf4j configure file from {}", fn);  
        }  
        catch (JoranException e) {  
            logger.error("can loading slf4j configure file from " + fn, e);  
        }  
    }  
    @Override  
    public void contextDestroyed(ServletContextEvent event) {  
    }  
}

 

 

 

在web.xml中加入

 

[xhtml]  view plain copy
 
  1. <!--初始化日志配置文件 -->  
  2.  <listener>  
  3.      <listener-class>  
  4.          com.sj.common.listener.LogbackConfigListener  
  5.      </listener-class>  
  6.  </listener>  
  7.  <context-param>  
  8.      <param-name>logbackConfigLocation</param-name>  
  9.      <param-value>WEB-INF/logback.xml</param-value>  
  10.  </context-param>  

 

 

 配置文件

 

<?xml version="1.0" encoding="UTF-8"?>  
<configuration>  
   <jmxConfigurator />  
     
   <!-- 控制台输出日志 -->  
   <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">  
   	<Encoding>UTF-8</Encoding>  
       <layout class="ch.qos.logback.classic.PatternLayout">  
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS}  %logger{36} -line: %L - %msg%n</pattern>  
        </layout>  
    </appender>  
      
    <!-- 文件输出日志 (文件大小策略进行文件输出,超过指定大小对文件备份)-->  
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> 
    	<Encoding>UTF-8</Encoding>   
        <File>service_debug.log</File>  
        <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">  
            <FileNamePattern>service.log.%i.bak</FileNamePattern>  
            <MinIndex>1</MinIndex>  
            <MaxIndex>12</MaxIndex>  
        </rollingPolicy>  
  
        <triggeringPolicy  
            class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">  
            <MaxFileSize>10MB</MaxFileSize>  
        </triggeringPolicy>  
        <layout class="ch.qos.logback.classic.PatternLayout">  
            <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} -line: %L - %msg%n</Pattern>  
        </layout>  
    </appender>  
    
    <appender name="FILE-ERROR" 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>service-err.log</File>  
        <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">  
            <FileNamePattern>service-err.log.%i.bak</FileNamePattern>  
            <MinIndex>1</MinIndex>  
            <MaxIndex>3</MaxIndex>  
        </rollingPolicy>  
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">  
            <MaxFileSize>10MB</MaxFileSize>  
        </triggeringPolicy>  
        <layout class="ch.qos.logback.classic.PatternLayout">  
            <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} -line: %L - %msg%n</Pattern>  
        </layout>  
    </appender>  
  
  <!--这里指定logger name 是为jmx设置日志级别做铺垫 -->         
    <logger name="com.sj">  
        <level value="DEBUG" />  
        <appender-ref ref="STDOUT" />  
        <appender-ref ref="FILE" />  
        <appender-ref ref="FILE-ERROR" />  
    </logger> 
    <root>
     <level value="DEBUG" />  
        <appender-ref ref="STDOUT" />  
        <appender-ref ref="FILE" />  
        <appender-ref ref="FILE-ERROR" />  
    </root>
    
</configuration>
 

 

 

 

© 著作权归作者所有

共有 人打赏支持
longload
粉丝 3
博文 66
码字总数 104702
作品 0
成都
程序员
私信 提问
Java深入 - logback的配置和使用

1. logback介绍 Logback是由log4j创始人设计的又一个开源日志组件。logback当前分成三个模块:logback-core,logback- classic和logback-access。logback-core是其它两个模块的基础模块。log...

initphp
2014/11/07
0
0
spring boot(8)默认日志logback配置

1 日志简介 Spring Boot使用Commons Logging记录所有内部日志,但是它将底层日志实现打开,为Java.Util.Logging,Log4J2和Logback提供默认配置。 在每个案例中,loggers都预先配置,以使用控...

刘胜球
2017/10/31
0
0
LogBack简易教程

1.简介   LogBack是一个日志框架,它与Log4j可以说是同出一源,都出自Ceki Gülcü之手。(log4j的原型是早前由Ceki Gülcü贡献给Apache基金会的) 1.1 LogBack,Slf4j,Log4j之间的关系  ...

0了凡0
2016/07/25
97
0
spring boot保存|打印日志-logback的配置和使用

【转载】(https://www.cnblogs.com/winner-0715/p/6105519.html) 1.logback介绍 logback是由log4j创始人设计的又一个开源日志组件。logback当前分成三个模块:logback-core,logback-classic和...

qq_25652949
2018/04/24
0
0
LogBack入门实践

一、简介 LogBack是一个日志框架,它是Log4j作者Ceki的又一个日志组件。 LogBack,Slf4j,Log4j之间的关系 slf4j是The Simple Logging Facade for Java的简称,是一个简单日志门面抽象框架,它...

jiangmitiao
2016/03/26
1K
2

没有更多内容

加载失败,请刷新页面

加载更多

Confluence 6 升级中的一些常见问题

升级的时候遇到了问题了吗? 如果你想尝试重新进行升级的话,你需要首先重新恢复老的备份。不要尝试再次对 Confluence 进行升级或者在升级失败后重新启动老的 Confluence。 在升级过程中的一...

honeymoose
今天
2
0
C++随笔(四)Nuget打包

首先把自己编译好的包全部准备到一个文件夹 像这样 接下来新建一个文本文档,后缀名叫.nuspec 填写内容 <?xml version="1.0"?><package xmlns="http://schemas.microsoft.com/packaging/201......

Pulsar-V
今天
2
0
再谈使用开源软件搭建数据分析平台

三年前,我写了这篇博客使用开源软件快速搭建数据分析平台, 当时收到了许多的反馈,有50个点赞和300+的收藏。到现在我还能收到一些关于dataplay2的问题。在过去的三年,开源社区和新技术的发...

naughty
今天
5
0
Python3的日期和时间

python 中处理日期时间数据通常使用datetime和time库 因为这两个库中的一些功能有些重复,所以,首先我们来比较一下这两个库的区别,这可以帮助我们在适当的情况下时候合适的库。 在Python文...

编程老陆
今天
2
0
分布式面试整理

并发和并行 并行是两个任务同时进行,而并发呢,则是一会做一个任务一会又切换做另一个任务。 临界区 临界区用来表示一种公共资源或者说是共享数据,可以被多个线程使用,但是每一次,只能有...

群星纪元
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部