java 发表于 2018-1-25 11:01:48

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="&quot;"><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 11:13:14

本帖最后由 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>

java 发表于 2019-1-15 11:52:28

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



java 发表于 2019-2-20 16:24:35

Fluentd是一个用于统一日志层的开源数据收集器。
页: [1]
查看完整版本: java打印日志