java打印日志
本帖最后由 java 于 2018-1-25 11:12 编辑Java中给项目程序添加log主要有三种方式,一使用JDK中的java.util.logging包,一种是log4j,一种是commons-logging。其中log4j和commons-logging都是apache软件基金会的开源项目。这三种方式的区别如下:Java.util.logging,JDK标准库中的类,是JDK 1.4 版本之后添加的日志记录的功能包。 log4j,最强大的记录日志的方式。可以通过配置 .properties 或是 .xml 的文件, 配置日志的目的地,格式等等。commons-logging,最综合和常见的日志记录方式,是Java中的一个日志接口,一般会与log4j一起使用。自带SimpleLog可用于日志记录。
1.slf4j-log4j12
<font color="rgb(85, 85, 85)"><font face="""><font style="font-size: 15px"> <dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.25</version>
</dependency>
</font></font></font>
其中api是接口,下面是实现
并把 log4j.properties 放到 resources 目录下log4j.rootLogger=CONSOLE,FILE
log4j.addivity.org.apache=true
# 应用于控制台
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Threshold=DEBUG
log4j.appender.CONSOLE.Target=System.out
log4j.appender.CONSOLE.Encoding=UTF-8
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern= %d - %c -%-4r [%t] %-5p %c %x - %m%n
# 每天新建日志
log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A1.File=../logs/testimaplog
log4j.appender.A1.Encoding=UTF-8
log4j.appender.A1.Threshold=DEBUG
log4j.appender.A1.DatePattern='.'yyyy-MM-dd
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L : %m%n
#应用于文件
log4j.appender.FILE=org.apache.log4j.FileAppender
log4j.appender.FILE.File=../logs/testimaplog/log
log4j.appender.FILE.Append=false
log4j.appender.FILE.Encoding=UTF-8
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.ConversionPattern= %d - %c -%-4r [%t] %-5p %c %x - %m%n 本帖最后由 java 于 2018-1-25 14:10 编辑
增加下面依赖后 <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
<version>1.5.3.RELEASE</version>
</dependency>报如下错误:
SLF4J: Class path contains multiple SLF4J bindings.
因为它里面使用的是logback,单独配置一下loback的相关配置文件
resources/config/logback.propertieslog.path=../logs/imap-api/logs
log.name=imap.log
log.name.error=imap-error.log
resources/logback.xml<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property resource="config/logback.properties" />
<appender name="Console" class="ch.qos.logback.core.ConsoleAppender">
<Target>System.out</Target>
<encoder>
<pattern>%d [%t] %p %logger - %m%n</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>DEBUG</level>
</filter>
</appender>
<appender name="LogFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>${log.path}/${log.name}</File>
<Append>true</Append>
<encoder>
<pattern>%d [%t] %p %logger{0} - %m%n</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log.path}/${log.name}.%d{yyyy-MM-dd}</fileNamePattern>
</rollingPolicy>
</appender>
<appender name="ErrorFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>${log.path}/${log.name.error}</File>
<encoder>
<pattern>%d [%t] %p %logger{0} - %m%n</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log.path}/${log.name.error}.%d{yyyy-MM-dd}</fileNamePattern>
</rollingPolicy>
<encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
<providers>
<mdc/>
<timestamp/>
<version/>
<pattern>
<pattern>
{"provider": "test"}
</pattern>
</pattern>
<message/>
<loggerName/>
<logLevel/>
<callerData/>
<context/>
<stackTrace/>
<arguments/>
<logstashMarkers/>
</providers>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="Console"/>
<appender-ref ref="LogFile"/>
<appender-ref ref="ErrorFile"/>
</root>
</configuration> Commons-logging:apache最早提供的日志的门面接口。避免和具体的日志方案直接耦合。类似于JDBC的api接口,具体的的JDBC driver实现由各数据库提供商实现。通过统一接口解耦,不过其内部也实现了一些简单日志方案。
Log4j:经典的一种日志解决方案。内部把日志系统抽象封装成Logger、appender、pattern等实现。我们可以通过配置文件轻松的实现日志系统的管理和多样化配置。
Slf4j: 全称为Simple Logging Facade for JAVA:java简单日志门面。是对不同日志框架提供的一个门面封装。可以在部署的时候不修改任何配置即可接入一种日志实现方案。和commons-loging应该有一样的初衷。
生成spring工程
https://start.spring.io/
新一代日志框架 logback
https://logback.qos.ch/
相关项目
http://commons.apache.org/
统一日志API
slf4j-api
log4j-over-slf4f
jcl-over-slf4j
jul-to-slf4j
都实现 slf4j的接口
Logger logger = LoggerFactory.getLogger(this.getClass());
logger.info("hello"); 接口会自动调用上面框架的日志实现
localhost:8080/loggers日志管理修改 application.properties文件中加入 management.security.enabled = false
Fluentd是一个用于统一日志层的开源数据收集器。
页:
[1]