logback的使用笔记
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了logback的使用笔记相关的知识,希望对你有一定的参考价值。
关于日志存储数据库方面的没有整理,暂时用不到,异步看了英文文档,发现暂时用不到,以后再整理
2017-04-09 00:57:26
logback是一个开源的日志组件,是log4j的作者开发的用来替代log4j的。
logback由三个部分组成,logback-core, logback-classic, logback-access。其中logback-core是其他两个模块的基础。
logback中三个重要概念: Logger,Appender,Layout
Logger: 日志记录器,把它关联到应用对应的context上后,主要用于存放日志对象,定义日志类型,级别。
Appender: 指定日志输出的目的地,目的地可以是控制台,文件,或者数据库等
Layout: 负责把事件转换成字符串,格式化日志信息的输出
logback配置优先级顺序
- logback首先在classpath寻找logback.groovy文件,
- 如果没找到,继续寻找logback-test.xml文件
- 如果没找到,继续寻找logback.xml文件
- 如果仍然没找到,则使用默认配置(打印到控制台)
最佳实践
slf4j 定义日志接口及基本实现,而具体的实现由其他日志组件提供
- log4j
- commons-logging
- logback
因此,如果想替换成其他的日志组件,只需要替换jar包即可。
实际开发中推荐使用slf4j+logback。
logback.xml 配置:
配置 1 <configuration> 2 <!--定义一个参数,可以直接在此配置文件中引用${LOG_HOME} --> 3 <property name="LOG_HOME" value="logs" /> 4 <property name="LOG_FILE_NAME" value="crawler4j.log" /> 5 6 <!--appender是负责写日志的组件, --> 7 <!--consoleAppender是负责将日志输出到控制台 --> 8 <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> 9 <!--encoder 格式化日志格式 --> 10 <encoder> 11 <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--> 12 <pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level [%thread] -[%logger{0}]- %msg%n</pattern> 13 </encoder> 14 15 </appender> 16 17 <!--将日志输出到文件 --> 18 <appender name="FILE" class="ch.qos.logback.core.FileAppender"> 19 <!--输出文件的路径 --> 20 <file>${LOG_HOME}/${LOG_FILE_NAME}</file> 21 <!--格式化日志输出格式 --> 22 <encoder> 23 <pattern>%date %-5level [%thread] - [%logger] - %msg%n</pattern> 24 </encoder> 25 </appender> 26 27 <appender name="ROLl" 28 class="ch.qos.logback.core.rolling.RollingFileAppender"> 29 <!--滚动记录策略 这里是基于时间的策略(还有基于文件大小,文件大小和时间,。。具体可以查看ch.qos.logback.core.rolling里的policy) --> 30 <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 31 <!-- %d{}里面的是规则,当规则变化时,则根据规则重新命名新的文件夹,下面是每秒中创建一个日志文件 --> 32 <fileNamePattern>logFile.%d{yyyy-MM-dd HH-mm-ss}.log</fileNamePattern> 33 <!--能够保存最大日志文件数量,超过之后会覆盖掉之前的文件 ,下面是最多10个文件 --> 34 <maxHistory>10</maxHistory> 35 </rollingPolicy> 36 <encoder> 37 <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n 38 </pattern> 39 </encoder> 40 41 </appender> 42 <!--level: 用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL和OFF,还有一个特俗值INHERITED或者同义词NULL,代表强制执行上级的级别。 如果未设置此属性,那么当前loger将会继承上级的级别。 --> 43 44 <!-- <loger name="LogbackTest.java" level="INfo"> 45 <appender-ref ref="FILE" /> 46 </loger> --> 47 48 <root level="DEBUG"> 49 <appender-ref ref="STDOUT" /> 50 </root> 51 52 53 </configuration> 54 <!-- 上述配置表示每天生成一个日志文件,保存30天的日志文件。 --> 55 <!-- <configuration> 56 <appender name="FILE" 57 class="ch.qos.logback.core.rolling.RollingFileAppender"> 58 <file>test.log</file> 59 <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy"> 60 <fileNamePattern>tests.%i.log.zip</fileNamePattern> 61 <minIndex>1</minIndex> 62 <maxIndex>3</maxIndex> 63 </rollingPolicy> 64 <triggeringPolicy 65 class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> 66 <maxFileSize>5MB</maxFileSize> 67 </triggeringPolicy> 68 <encoder> 69 <pattern>%-4relative 70 [%thread] %-5level %logger{35} - %msg%n </pattern> 71 </encoder> 72 </appender> 73 <root level="DEBUG"> 74 <appender-ref ref="FILE" /> 75 </root> 76 <logger name="com.github.tomakehurst" level="ERROR" /> 77 <logger name="org.eclipse.jetty" level="ERROR" /> 78 <root level="DEBUG"> 79 <appender-ref ref="STDOUT" /> 80 <appender-ref ref="FILE" /> 81 </root> 82 </configuration> --> 83 84 <!-- 上述配置表示按照固定窗口模式生成日志文件,当文件大于20MB时,生成新的日志文件。窗口大小是1到3,当保存了3个归档文件后,将覆盖最早的日志。 -->
java代码:
package edu.uci.ics.crawler4j.tests; import org.junit.Before; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class LogbackTest { private LogbackTest log; private final Logger logger = LoggerFactory.getLogger(LogbackTest.class); @Before public void init() { log = new LogbackTest(); } @Test public void logTest() { for (int i = 0; i < 1000; i++) { this.logger.info("info--->" + i); this.logger.error("error----->" + i); this.logger.debug("debug----------->" + i); } } }
以上是关于logback的使用笔记的主要内容,如果未能解决你的问题,请参考以下文章
需要一种有效的方法来避免使用 Laravel 5 重复代码片段
如何使用 Java 代码配置 Logback 以设置日志级别?
[原创]java WEB学习笔记61:Struts2学习之路--通用标签 property,uri,param,set,push,if-else,itertor,sort,date,a标签等(代码片段