Discuz! Board

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2165|回复: 3
打印 上一主题 下一主题

java打印日志

[复制链接]

697

主题

1142

帖子

4086

积分

认证用户组

Rank: 5Rank: 5

积分
4086
跳转到指定楼层
楼主
发表于 2018-1-25 11:01:48 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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


  1. <font color="rgb(85, 85, 85)"><font face="&quot;"><font style="font-size: 15px">        <dependency>
  2.             <groupId>org.slf4j</groupId>
  3.             <artifactId>slf4j-log4j12</artifactId>
  4.             <version>1.7.25</version>
  5.         </dependency>
  6. </font></font></font>
复制代码



其中api是接口,下面是实现

并把 log4j.properties 放到 resources 目录下
  1. log4j.rootLogger=CONSOLE,FILE
  2. log4j.addivity.org.apache=true

  3. # 应用于控制台
  4. log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
  5. log4j.appender.CONSOLE.Threshold=DEBUG
  6. log4j.appender.CONSOLE.Target=System.out
  7. log4j.appender.CONSOLE.Encoding=UTF-8
  8. log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
  9. log4j.appender.CONSOLE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n

  10. # 每天新建日志
  11. log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender
  12. log4j.appender.A1.File=../logs/testimaplog
  13. log4j.appender.A1.Encoding=UTF-8
  14. log4j.appender.A1.Threshold=DEBUG
  15. log4j.appender.A1.DatePattern='.'yyyy-MM-dd
  16. log4j.appender.A1.layout=org.apache.log4j.PatternLayout
  17. log4j.appender.A1.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L : %m%n

  18. #应用于文件
  19. log4j.appender.FILE=org.apache.log4j.FileAppender
  20. log4j.appender.FILE.File=../logs/testimaplog/log
  21. log4j.appender.FILE.Append=false
  22. log4j.appender.FILE.Encoding=UTF-8
  23. log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
  24. log4j.appender.FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
复制代码
回复

使用道具 举报

697

主题

1142

帖子

4086

积分

认证用户组

Rank: 5Rank: 5

积分
4086
沙发
 楼主| 发表于 2018-1-25 11:13:14 | 只看该作者
本帖最后由 java 于 2018-1-25 14:10 编辑

增加下面依赖后
  1.         <dependency>
  2.             <groupId>org.springframework.boot</groupId>
  3.             <artifactId>spring-boot-starter-data-mongodb</artifactId>
  4.             <version>1.5.3.RELEASE</version>
  5.         </dependency>
复制代码
报如下错误:
SLF4J: Class path contains multiple SLF4J bindings.



因为它里面使用的是logback,单独配置一下loback的相关配置文件
resources/config/logback.properties
  1. log.path=../logs/imap-api/logs
  2. log.name=imap.log
  3. log.name.error=imap-error.log
复制代码
resources/logback.xml
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <configuration>
  3.     <property resource="config/logback.properties" />
  4.     <appender name="Console" class="ch.qos.logback.core.ConsoleAppender">
  5.         <Target>System.out</Target>
  6.         <encoder>
  7.             <pattern>%d [%t] %p %logger - %m%n</pattern>
  8.         </encoder>
  9.         <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
  10.             <level>DEBUG</level>
  11.         </filter>
  12.     </appender>
  13.     <appender name="LogFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
  14.         <File>${log.path}/${log.name}</File>
  15.         <Append>true</Append>
  16.         <encoder>
  17.             <pattern>%d [%t] %p %logger{0} - %m%n</pattern>
  18.         </encoder>
  19.         <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
  20.             <level>INFO</level>
  21.         </filter>
  22.         <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  23.             <fileNamePattern>${log.path}/${log.name}.%d{yyyy-MM-dd}</fileNamePattern>
  24.         </rollingPolicy>
  25.     </appender>
  26.     <appender name="ErrorFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
  27.         <File>${log.path}/${log.name.error}</File>
  28.         <encoder>
  29.             <pattern>%d [%t] %p %logger{0} - %m%n</pattern>
  30.         </encoder>
  31.         <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
  32.             <level>ERROR</level>
  33.         </filter>
  34.         <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  35.             <fileNamePattern>${log.path}/${log.name.error}.%d{yyyy-MM-dd}</fileNamePattern>
  36.         </rollingPolicy>
  37.         <encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
  38.             <providers>
  39.                 <mdc/>
  40.                 <timestamp/>
  41.                 <version/>
  42.                 <pattern>
  43.                     <pattern>
  44.                         {"provider": "test"}
  45.                     </pattern>
  46.                 </pattern>
  47.                 <message/>
  48.                 <loggerName/>
  49.                 <logLevel/>
  50.                 <callerData/>
  51.                 <context/>
  52.                 <stackTrace/>
  53.                 <arguments/>
  54.                 <logstashMarkers/>
  55.             </providers>
  56.         </encoder>
  57.     </appender>

  58.     <root level="DEBUG">
  59.         <appender-ref ref="Console"/>
  60.         <appender-ref ref="LogFile"/>
  61.         <appender-ref ref="ErrorFile"/>
  62.     </root>

  63. </configuration>
复制代码
回复 支持 反对

使用道具 举报

697

主题

1142

帖子

4086

积分

认证用户组

Rank: 5Rank: 5

积分
4086
板凳
 楼主| 发表于 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



回复 支持 反对

使用道具 举报

697

主题

1142

帖子

4086

积分

认证用户组

Rank: 5Rank: 5

积分
4086
地板
 楼主| 发表于 2019-2-20 16:24:35 | 只看该作者
Fluentd是一个用于统一日志层的开源数据收集器。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|firemail ( 粤ICP备15085507号-1 )

GMT+8, 2024-11-25 23:15 , Processed in 0.065290 second(s), 21 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表