日志log
2018-06-09 本文已影响0人
wanggs
日志用来记录用户操作、系统运行状态等,是一个系统的重要组成部分
Java中常用的日志组件
Log4j (http://logging.apache.org/)
Logback(http://logback.qos.ch/)
log4j.properties
# 输出到控制台
log4j.appender.A1=org.apache.log4j.ConsoleAppender
# 格式
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=[%p](%d)---%l--%m\r\n
# 从这个级别开始输出
log4j.rootLogger=DEBUG, A1
测试
public class Log4jTestCase {
@Test
public void testLog() {
Logger logger = LoggerFactory.getLogger(Log4jTestCase.class);
logger.trace("{}-{} trace message","tom","hello");
logger.debug("debug message");
logger.info("info message");
logger.warn("warn message");
logger.error("error message");
}
}
-
%m 输出代码中指定的消息
-
%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
-
%r 输出自应用启动到输出该log信息耗费的毫秒数
-
%c 输出所属的类目,通常就是所在类的全名
-
%t 输出产生该日志事件的线程名
-
%n 输出一个回车换行符,Windows平台为“/r/n”,Unix平台为“/n”
-
%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd
HH:mm:ss , SSS} -
%l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。
log4j.properties 写入文件中
# 文件接口完全限定名
log4j.appender.fout=org.apache.log4j.FileAppender
# 输出格式
log4j.appender.fout.layout=org.apache.log4j.PatternLayout
log4j.appender.fout.layout.ConversionPattern=[%p](%d)---%l--%m\r\n
# 文件地址
log4j.appender.fout.file=C:/logs/system.log
# 输出到控制台
log4j.appender.A1=org.apache.log4j.ConsoleAppender
# 日志格式
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=[%p](%d)---%l--%m\r\n
# 输出级别
log4j.rootLogger=DEBUG, A1,fou
以天为单位生成日志文件
# 按天输出
log4j.appender.fout=org.apache.log4j.DailyRollingFileAppender
# 格式
log4j.appender.fout.layout=org.apache.log4j.PatternLayout
log4j.appender.fout.layout.ConversionPattern=[%p](%d)---%l--%m\r\n
log4j.appender.fout.DatePattern='.'yyyy-MM-dd
# 输入文件地址
log4j.appender.fout.file=C:/logs/x.log
根据日志级别存放的不同的位置
log4j.appender.fout=org.apache.log4j.DailyRollingFileAppender
log4j.appender.fout.layout=org.apache.log4j.PatternLayout
log4j.appender.fout.layout.ConversionPattern=[%p](%d)---%l--%m\r\n
log4j.appender.fout.DatePattern='.'yyyy-MM-dd
# 级别 控制台和文件输出的日志级别不同
log4j.appender.fout.Threshold=INFO
log4j.appender.fout.file=C:/logs/x.log
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=[%p](%d)---%l--%m\r\n
log4j.rootLogger=DEBUG, A1,fout
线上使用
# dev model
log4j.rootLogger=DEBUG,stdout
# online model
#log4j.rootLogger=INFO,INFO_LOG,ERROR_LOG
log4j.appender.ERROR_LOG=org.apache.log4j.DailyRollingFileAppender
#! change with Linux dir
log4j.appender.ERROR_LOG.File=c\:/jcweb/error/error.log
log4j.appender.ERROR_LOG.DatePattern='.'yyyy-MM-dd'.log'
log4j.appender.ERROR_LOG.Threshold = ERROR
log4j.appender.ERROR_LOG.layout=org.apache.log4j.PatternLayout
log4j.appender.ERROR_LOG.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss.SSS} %p [%t] %l - %m%n
log4j.appender.INFO_LOG=org.apache.log4j.DailyRollingFileAppender
#! change with Linux dir
log4j.appender.INFO_LOG.File=c\:/jcweb/info/info.log
log4j.appender.INFO_LOG.DatePattern='.'yyyy-MM-dd'.log'
log4j.appender.INFO_LOG.Threshold = INFO
log4j.appender.INFO_LOG.layout=org.apache.log4j.PatternLayout
log4j.appender.INFO_LOG.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss.SSS} %p [%t] %l - %m%n
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss.SSS} %p [%t] %l - %m%n
logback
slf4j
image.png输出日志到控制台
logback.xml
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="debug">
<appender-ref ref="STDOUT" />
</root>
</configuration>
测试
image.png输出日志到文件中
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<appender name="file" class="ch.qos.logback.core.FileAppender">
<!--日志文件地址-->
<file>D:/logback.log</file>
<!--追加模式-->
<append>true</append>
<encoder>
<pattern>%d{MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="debug">
<appender-ref ref="file" />
</root>
</configuration>
按天输出日志到文件
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<property name="LOG_HOME" value="D:/logs"/>
<appender name="rolling" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--日志文件输出的文件名-->
<FileNamePattern>${LOG_HOME}/%d{yyyy-MM-dd}.log</FileNamePattern>
<!--日志文件保留天数-->
<MaxHistory>30</MaxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="debug">
<appender-ref ref="rolling" />
</root>
</configuration>
日志过滤器
<appender name="file" class="ch.qos.logback.core.FileAppender">
<!--日志文件地址-->
<file>${LOG_HOME}/logback.log</file>
<!--追加模式-->
<append>true</append>
<!--日志级别过滤-->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
<encoder>
<pattern>%d{MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
同时将日志输出到多个Appender
<root level="debug">
<appender-ref ref="STDOUT" />
<appender-ref ref="file" />
</root>
更改不同package的日志显示级别
<logger name="org.hibernate.SQL" level="DEBUG" />