Java日志打印入门

         一个好的日志格式对问题定位很有帮助,学好日志管理是学Java 的必修课。

一、Java自带Logger类:java.util.logging

1.新建LogFormatter类,继承Formatter,设置日志格式

public class LogFormatter extends Formatter {  
    @Override  
    public String format(LogRecord record) {  
        Date date = new Date();  
        String sDate = date.toString();  
        return "[" + sDate + "]" + "[" + record.getLevel() + "]"  
                + record.getClass() + ": " +record.getMessage() + "\n";  
    }  
}  

 

2.Logger使用

Logger log = Logger.getLogger("testlog");  
log.setLevel(Level.ALL);  
FileHandler fileHandler = new FileHandler("testlog.log");  
fileHandler.setLevel(Level.ALL);  
fileHandler.setFormatter(new LogFormatter());  
log.addHandler(fileHandler);  
log.info("This is a test java util log");  

该代码实现往控制台和文件写日志。效果如下:

 

二、log4j

log4j是Apache的一个开源项目。可以从文件配置log,十分方便。

1.添加log4j的maven依赖

<dependency>  
    <groupId>log4j</groupId>  
    <artifactId>log4j</artifactId>  
    <version>1.2.17</version>  
</dependency> 

 

2.添加log4j.properties文件到resources文件夹

内容如下:​​​​​​

#设置日志级别  
log4j.rootLogger=info,stdout,logfile  
  
#输出到控制台  
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} [%p]%l: %m%n

注意rootLogger为根日志,后面的第一个参数为日志显示级别,后面的是appender名称,日志打印位置。后面均为日志相关配置。

3.使用log4j

注意选择包​​​​​​

import org.apache.log4j.Logger;  

使用如下:​​​​​​

Logger log = Logger.getLogger("rootLogger");  
log.debug("Here is some DEBUG");  
log.info("Here is some INFO");  
log.warn("Here is some WARN");  
log.error("Here is some ERROR");  
log.fatal("Here is some FATAL");  

log4j总共有5个级别,其级别是fatal > error > warn > info > debug。

4.输入如下:

注意其中没有显示debug级别的日志信息。

三、commons-logging

commons-logging是一个日志共用接口,需要和log4j配合使用。

1.添加commons-logging和log4j依赖​​​​​​

<dependency>  
    <groupId>log4j</groupId>  
    <artifactId>log4j</artifactId>  
    <version>1.2.17</version>  
</dependency>  
<dependency>  
    <groupId>commons-logging</groupId>  
    <artifactId>commons-logging</artifactId>  
    <version>1.2</version>  
</dependency>  

 

2.使用​​​​​

Log log = LogFactory.getLog(LogDemo.class);  

其效果和log4j一样,这里就不展示了。

 

四、slf4j

         slf4j是Simple Logging Facede for java(简单日志门面)的简称。其提供了统一记录日志的接口,对日志的实现进行抽象,无需关心日志是通过哪个日志系统,以什么风格输出的。

1.添加slf4j-api和slf4j-log4j12的依赖​​​​​​

<dependency>  
    <groupId>org.slf4j</groupId>  
    <artifactId>slf4j-api</artifactId>  
    <version>1.7.25</version>  
</dependency>  
<dependency>  
    <groupId>org.slf4j</groupId>  
    <artifactId>slf4j-log4j12</artifactId>  
    <version>1.7.25</version>  
</dependency>  

 

2.配置log4j.properties,设置输出流和输出格式,同上。

3.使用

Logger log = LoggerFactory.getLogger(LogDemo.class); 

注意使用的是下面的包​​​​​

import org.slf4j.Logger;  
import org.slf4j.LoggerFactory;  

效果同上。

五、log4j2

1. 依赖

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>2.5</version>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.5</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.dataformat</groupId>
    <artifactId>jackson-dataformat-yaml</artifactId>
    <version>2.10.3</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.11.2</version>
</dependency>

2. 配置

(1)log4j2.yaml

Configuration:
  status: warn
  appenders:
    Console:
      name: Console
      target: SYSTEM_OUT
      PatternLayout:
        Pattern: "%m%n"
  Loggers:
    Root:
      level: info
      AppenderRef:
        ref: Console

(2) log4j2.xml

<?xml version="1.0" encoding="UTF-8" ?>
<Configuration>
    <Properties>
        <property name="LOG_PATTERN">%date{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</property>
    </Properties>

    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="${LOG_PATTERN}"/>
        </Console>
    </Appenders>

    <Loggers>
        <Root level="info">
            <appender-ref ref="Console"/>
        </Root>
    </Loggers>
</Configuration>

3. 使用

Logger log = LogManager.getLogger(LogManager.ROOT_LOGGER_NAME);
log.trace("trace level");
log.info("info level");

六、多个log实现信息分流

配置log4j.properties文件,如下:

#设置日志级别  
log4j.rootLogger=info,console,logfile  
log4j.logger.Logger1 = debug,file1  
log4j.logger.Logger2 = debug,file2  


#日志1输出到日志文件  
log4j.appender.file1 = org.apache.log4j.DailyRollingFileAppender  
log4j.appender.file1.file = file1.log  
log4j.appender.file1.layout = org.apache.log4j.PatternLayout  
log4j.appender.file1.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss} [%5p]%l: %m%n

其中Logger1,和Logger2就是另外的日志配置,后面是选择输出到file1,当然也可以输出到控制台。

调用如下:

Logger log1 = Logger.getLogger("Logger1");  
Logger log2 = Logger.getLogger("Logger2");  
log1.debug("log1: Here is some DEBUG");  
log1.info("log1: Here is some INFO");  
log1.warn("log1: Here is some WARN");  
log1.error("log1: Here is some ERROR");  
  
log2.debug("log2: Here is some DEBUG");  
log2.info("log2: Here is some INFO");  
log2.warn("log2: Here is some WARN");  
log2.error("log2: Here is some ERROR");

然后消息就被输出到相应的文件里了。

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值