logback的日志控制输出

     在程序开发过程中日志是少不了的信息,它可以帮助我们排查问题,这是我们需要日志的最大好处,在不同阶段日志都有它自己的不同作用,在开发阶段可以帮助我们调试程序;在测试以及线上可以通过排查日志分析系统瓶颈、分析系统错误原因,甚至还可以用来分析用户的行为将日志用在大数据分析里面,它会有很高的价值,既然日志那么重要任何一个项目都会用到它,就需要我们为项目选择正确的日志输出工具库,日志框架,在java里面我们经常使用的框架有jdk logging、log4j、logback等,在我们项目中最终确定用logback来输出日志,它在前两者基础之上做了一些优化,感觉性能会高一些。

     定义:

     Logback是由log4j创始人设计的又一个开源日志组件。logback当前分成三个模块:logback-core,logback- classic和logback-access。logback-core是其它两个模块的基础模块。logback-classic是log4j的一个 改良版本。此外logback-classic完整实现SLF4J API使你可以很方便地更换成其它日志系统如log4j或JDK14 Logging。logback-access访问模块与Servlet容器集成提供通过Http来访问日志的功能。

     优点:

     1.切换容易

      Logback-classic实现了SLF4j。在使用SLF4j中,你都感觉不到logback-classic。而且因为logback-classic非常自然地实现了SLF4J,所以切换到log4j或者其他,非常容易,在使用过程中基本上看不出什么区别来,如果使用过log4j可以很容易切换到logback.

     2.自动压缩输出到日志文件

      RollingFileAppender在产生新文件的时候,会自动压缩已经打出来的日志文件。压缩是个异步过程,所以甚至对于大的日志文件,在压缩过程中应用不会受任何影响。 

     3.自动重新加载配置文件

     当配置文件修改了,Logback-classic能自动重新加载配置文件。扫描过程快且安全,它并不需要另外创建一个扫描线程。这个技术充分保证了应用程序能跑得很欢在JEE环境里面。

      5.性能提高

      基于我们先前在log4j上的工作,logback 重写了内部的实现,在某些特定的场景上面,甚至可以比之前的速度快上10倍。在保证logback的组件更加快速的同时,同时所需的内存更加少。


       了解了特点之后让我们来看看如何在项目中配置,配置分为好几种,可以根据别同级别输出到不同文件,也可以指定类输出到指定文件等等,最常用的一种是日志文件按日期来输出在达到一定大小后,按变量递增,要不线上日志太大会不好查看日志文件,另外日志太大每次打开关闭日志文件的速度也会变慢会拖累应用性能。

       主要在logback.xml里面配置,如

<?xml version="1.0" encoding="UTF-8" ?>
<configuration debug="true" scan="false">

	<!-- 1. Logback tries to find a file called logback.groovy in the classpath. 
		2. If no such file is found, logback tries to find a file called logback-test.xml 
		in the classpath. 3. If no such file is found, it checks for the file logback.xml 
		in the classpath. 4. In case neither file is found, logback configures itself 
		automatically using the BasicConfigurator which will cause logging output 
		to be directed on the console. See http://logback.qos.ch/manual/configuration.html -->
		
	<contextName>agent</contextName>
	<property name="logback.logs.path" value="${catalina.base}/logs/" />
	<property name="logback.project.name" value="test" />
	<property name="project.name" value="test" />
	<!--  设置日志输出到文件	 -->
	<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<file>${logback.logs.path}/${logback.project.name}.log</file>
	 	<!--  设置日志输出分组策略,这里先按日期分割,再按大小分割日志	 -->
	 	<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<FileNamePattern>${logback.logs.path}/${logback.project.name}-%d{yyyy-MM-dd}-%i.log</FileNamePattern>
			<!--  设置日志有效期,默认设置为一年,超过一年自动删除过期日志	 -->
			<MaxHistory>360</MaxHistory>
			<!--  设置日志文件最大限制,设置为100M	 -->
		    <TimeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
		    	<MaxFileSize>100MB</MaxFileSize>
		    </TimeBasedFileNamingAndTriggeringPolicy>    
		</rollingPolicy>

		<!--  设置日志输出格式 级别、日期、项目名、类名.方法名、方法执行结果、方法结果代码、方法执行时间、其它信息	 -->
  		<encoder>
			<pattern>%-5level^|%d{yyyy-MM-dd HH:mm:ss.SSS}^|${project.name}^|%class.%method^| %msg%n</pattern>
		</encoder>
	</appender>

	<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
		<!-- encoders are assigned the type ch.qos.logback.classic.encoder.PatternLayoutEncoder 
			by default -->
		<encoder>
			<pattern>%-5level^|%d{yyyy-MM-dd HH:mm:ss.SSS}^|${project.name}^|%class.%method^|%msg%n</pattern>
		</encoder>
	</appender>

	<!-- For root loggers, log to FILE appender -->
	<root level="INFO">
		 <!-- <appender-ref ref="STDOUT" /> -->
		<appender-ref ref="FILE" /> 

	</root>


<!-- 

	<logger name="com.ibatis" level="DEBUG" />
	<logger name="com.ibatis.common.jdbc.SimpleDataSource" level="DEBUG" />
	<logger name="com.ibatis.common.jdbc.ScriptRunner" level="DEBUG" />
	<logger name="com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate"
		level="DEBUG" />
	<logger name="java.sql.Connection" level="DEBUG" />
	<logger name="java.sql.Statement" level="DEBUG" />
	<logger name="java.sql.PreparedStatement" level="DEBUG" /> 
	
  -->
  
</configuration>

     日志输出时建议用特殊字符分割,也可以是空格,这样在利用awk 、grep等命名分析日志的时候会方便很多,awk是一个不错的文本分析命令,它可以将一行分割成多个字段输出,也可以计算分割后的某一列或者对某一列排序。


你可能感兴趣的:(logback的日志控制输出)