logBack用法,记录

1. Logback使用手册
 系统中的日志采用 slf4j+logback实现
 引入记录日志模块
 Pom.xml文件中配置
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version> 1.0.13 </version>
</dependency>
    代码:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

Logger log = LoggerFactory.getLogger(Clazz.class);
 logback.xml配置文件中
<root level=”INFO”>
<appender-ref=”STDOUT” />   在上生产系统时去掉。
<appender-ref=”allRolling” />
<appender-ref=”errorRolling” />
</root>
2. 程序中记录日志常用方法
 Logger.error(“the error code is {}”,”1111”);
其中{}是要替换的参数,在评估是否作记录后,仅当需要作记录时,logger 才会格式化消息,
值替换"{}"。换句话说,当记录语句被禁用时,这种方法不会产生参数构造所带来的性能消耗。
 Logger.error(“the error code is {}, the reason is{} the money is {}”,“1111”,”reason”,99.9);
此方法适合多个参数
 如需打印出异常堆栈信息
Logger.error(“the error code is {}, the reason is{} the money is {}”,“1111”,”reason”,99.9,e);
此方法适合多个参数并打印出异常信息
3. 日志输出效果

4. 日志的自定义扩展
如需定义act.biz业务日志类型
配置如下:
 Logger log = LoggerFactory.getLogger(“act.biz”);
 配置文件追加
<logger name=" act.biz " level="INFO" >
  <appender-ref ref="actbizRolling"/>
  </logger>

<appender name=" actbizRolling"  class="ch.qos.logback.core.rolling.RollingFileAppender">
   <file>${LOG_HOME_SERVICE}/paff-${bySecond}.txt</file>
   <rollingPolicy  class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  <fileNamePattern>${LOG_HOME_SERVICE}/paff-%d{yyyy-MM-dd_HH-mm}.%i.zip</fileNamePattern>
    <maxHistory>30</maxHistory>
     <TimeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
    <MaxFileSize>10MB</MaxFileSize>
</TimeBasedFileNamingAndTriggeringPolicy>   
</rollingPolicy>
   <encoder>
      <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
      <immediateFlush>false</immediateFlush>
   </encoder>
</appender>
5. FAQ
 日志不输出的一个原因
<immediateFlush>false</immediateFlush> ,logback会buffer,然后输入.所有时看到文件为空



<?xml version="1.0" encoding="UTF-8" ?>
<configuration>

	<property file="/proj/envconfig/projectName/env.properties" />

	<substitutionProperty name="LOG_HOME_ALL"
		value="${LOG_HOME}/${PROJECT_NAME}/all" />
	<substitutionProperty name="LOG_HOME_ERROR"
		value="${LOG_HOME}/${PROJECT_NAME}/error" />
		
	<timestamp key="bySecond" datePattern="yyyyMMdd'T'HHmmss" />

	<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
		<encoder>
			<pattern>
				%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
			</pattern>
			<immediateFlush>false</immediateFlush>
		</encoder>
	</appender>

	<appender name="allRolling"
		class="ch.qos.logback.core.rolling.RollingFileAppender">
		<file>${LOG_HOME_ALL}/${PROJECT_NAME}-all.log</file>
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<fileNamePattern>${LOG_HOME_ALL}/${PROJECT_NAME}-all-%d{yyyyMMdd}.%i.zip
			</fileNamePattern>
			<maxHistory>30</maxHistory>
			<TimeBasedFileNamingAndTriggeringPolicy
				class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
				<MaxFileSize>100MB</MaxFileSize>
			</TimeBasedFileNamingAndTriggeringPolicy>
		</rollingPolicy>
		<encoder>
			<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
			</pattern>
			<charset>UTF-8</charset>
			<immediateFlush>false</immediateFlush>
		</encoder>
	</appender>

	<!-- error appender -->
	<appender name="errorRolling"
		class="ch.qos.logback.core.rolling.RollingFileAppender">
		<filter class="ch.qos.logback.classic.filter.LevelFilter">
			<level>ERROR</level>
			<onMatch>ACCEPT</onMatch>
			<onMismatch>DENY</onMismatch>
		</filter>

		<file>${LOG_HOME_ERROR}/${PROJECT_NAME}-error.log</file>

		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<fileNamePattern>${LOG_HOME_ERROR}/${PROJECT_NAME}-error-%d{yyyyMMdd}.%i.zip
			</fileNamePattern>
			<maxHistory>30</maxHistory>
			<TimeBasedFileNamingAndTriggeringPolicy
				class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
				<MaxFileSize>100MB</MaxFileSize>
			</TimeBasedFileNamingAndTriggeringPolicy>
		</rollingPolicy>

		<encoder>
			<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
			</pattern>
			<charset>UTF-8</charset>
			<immediateFlush>false</immediateFlush>
		</encoder>
	</appender>
		
	<logger name="proj.all" level="INFO">
		<appender-ref ref="allRolling" />
	</logger>
	
	<!-- root logger -->
	<root level="INFO">
		<!-- only for local test -->
		<!-- <appender-ref ref="STDOUT" /> -->
		<appender-ref ref="allRolling" />
		<appender-ref ref="errorRolling" />
	</root>

</configuration>

猜你喜欢

转载自xly1981.iteye.com/blog/2258848
今日推荐