zoukankan      html  css  js  c++  java
  • logback使用详解

    log4j替换成logback

    移除相关依赖

    <dependency>
     <groupId>log4j</groupId>
     <artifactId>log4j</artifactId>
    </dependency>
    <dependency>
     <groupId>org.slf4j</groupId>
     <artifactId>slf4j-log4j12</artifactId>
    </dependency>
    

    添加logback依赖

    <!-- logback日志配置开始 -->
    <dependency>
     <groupId>ch.qos.logback</groupId>
     <artifactId>logback-core</artifactId>
    </dependency>
    <dependency>
     <groupId>ch.qos.logback</groupId>
     <artifactId>logback-access</artifactId>
    </dependency>
    <dependency>
     <groupId>ch.qos.logback</groupId>
     <artifactId>logback-classic</artifactId>
    </dependency>
    <dependency>
     <groupId>org.slf4j</groupId>
     <artifactId>log4j-over-slf4j</artifactId>
    </dependency>
    <!-- logback日志配置结束 -->
    

    spring中使用logback日志组件替换log4j

    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 Kiven Lee 
     * @version 1.0 
     */  
    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中加入

    <!--初始化日志配置文件 -->  
     <listener>  
         <listener-class>  
             com.boaotech.util.LogbackConfigListener  
         </listener-class>  
     </listener>  
     <context-param>  
         <param-name>logbackConfigLocation</param-name>  
         <param-value>WEB-INF/logback.xml</param-value>  
     </context-param>  
    

    logback配置文件两份

    logback配置一

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration debug="false">
        <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
        <!-- 控制台输出 -->
        <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
            <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
                <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg  %n</pattern>
            </encoder>
        </appender>
        <!-- 按照每天生成日志文件 -->
        <appender name="logFile"  class="ch.qos.logback.core.rolling.RollingFileAppender">
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <!--日志文件输出的文件名-->
                <FileNamePattern>log/runtime.log.%d{yyyy-MM-dd}.log</FileNamePattern>
                <!--日志文件保留天数-->
                <MaxHistory>30</MaxHistory>
            </rollingPolicy>
            <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
                <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            </encoder>
            <!--日志文件最大的大小-->
            <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
                <MaxFileSize>10MB</MaxFileSize>
            </triggeringPolicy>
        </appender>
    
        <!-- 日志输出级别 -->
        <root level="INFO">
            <appender-ref ref="console" />
            <appender-ref ref="logFile" />
        </root>
    
        <logger name="com.crecgec" level="DEBUG" additivity="false">
            <appender-ref ref="console"/>
            <appender-ref ref="logFile" />
        </logger>
    
        <root level="error">
            <appender-ref ref="console"/>
            <appender-ref ref="logFile" />
        </root>
    
    </configuration>
    

    logback配置二

    <?xml version="1.0" encoding="UTF-8" ?>
    
    <configuration>
    
        <appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender">
            <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="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <level>ERROR</level>
                <onMatch>DENY</onMatch>
                <onMismatch>ACCEPT</onMismatch>
            </filter>
            <encoder>
                <pattern>
                    %date{yyyy-MM-dd HH:mm:ss.SSS} %-5level[%thread]%logger{56}.%method:%L -%msg%n
                </pattern>
            </encoder>
            <!--滚动策略-->
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <!--路径-->
                <fileNamePattern>D:/log/logbackInfo.%d.log</fileNamePattern>
            </rollingPolicy>
        </appender>
    
        <appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
                <level>ERROR</level>
            </filter>
            <encoder>
                <pattern>
                    %date{yyyy-MM-dd HH:mm:ss.SSS} %-5level[%thread]%logger{56}.%method:%L -%msg%n
                </pattern>
            </encoder>
            <!--滚动策略-->
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <!--路径-->
                <fileNamePattern>D:/log/logbackError.%d.log</fileNamePattern>
            </rollingPolicy>
        </appender>
    
        <root level="INFO">
            <appender-ref ref="consoleLog"/>
            <appender-ref ref="fileInfoLog"/>
            <appender-ref ref="fileErrorLog"/>
        </root>
    </configuration>
    
  • 相关阅读:
    《Flask Web开发——基于Python的Web应用开发实践》一字一句上机实践(下)
    《Flask Web开发——基于Python的Web应用开发实践》一字一句上机实践(上)
    Django之REST framework源码分析
    PythonWEB框架之Tornado
    PythonWEB框架之Flask
    Android 外部存储权限分析
    Javaproject集成log4J 1.x
    [Python]通过websocket与jsclient通信
    基于am3358的lcd输出
    SAP 金税接口增强 BADI
  • 原文地址:https://www.cnblogs.com/zhaokejin/p/12325355.html
Copyright © 2011-2022 走看看