java log日志

1. log4j

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <exclusion>
                    <artifactId>spring-boot-starter-logging</artifactId>
                    <groupId>org.springframework.boot</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j</artifactId>
            <version>1.3.8.RELEASE</version>
        </dependency>
  1. application.propertie配置文件中添加如下配置 logging.config=classpath:log4j.properties

  2. 添加log4j 配置文件 lo4j.properties

log4j.rootLogger=INFO,Console,File

log4j.logger.com.xx.xx=DEBUG,stdout

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} %5p %c{1}:%L - %m%n

log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.Target=System.out
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=[%p] [%d{yyyy-MM-dd HH\:mm\:ss}][%c - %L]%m%n

2. log4j2

特点:
  1. 插件式结构。Log4j 2支持插件式结构。我们可以根据自己的需要自行扩展Log4j 2. 我们可以实现自己的appender、logger、filter。
  2. 配置文件优化。在配置文件中可以引用属性,还可以直接替代或传递到组件。而且支持json格式的配置文件。不像其他的日志框架,它在重新配置的时候不会丢失之前的日志文件。
  3. Java 5的并发性。Log4j 2利用Java 5中的并发特性支持,尽可能地执行最低层次的加锁。解决了在log4j 1.x中存留的死锁的问题。
  4. 异步logger。Log4j 2是基于LMAX Disruptor库的。在多线程的场景下,和已有的日志框架相比,异步的logger拥有10倍左右的效率提升。

官方推荐使用异步方式, log4j2异步日志需要加载disruptor-3.0.0.jar或者更高的版本

        <dependency>
            <groupId>com.lmax</groupId>
            <artifactId>disruptor</artifactId>
            <version>3.3.6</version>
        </dependency>

使用方式

  1. 引入依赖包
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <exclusion>
                    <artifactId>spring-boot-starter-logging</artifactId>
                    <groupId>org.springframework.boot</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j2</artifactId>
        </dependency>
        <!-- log4j2异步日志需要加载disruptor-3.0.0.jar或者更高的版本 -->
        <dependency>
            <groupId>com.lmax</groupId>
            <artifactId>disruptor</artifactId>
            <version>3.3.6</version>
        </dependency>

添加日志配置

<Configuration status="WARN">
    <Properties>
        <property name="LOG_PATH">../logs/</property>
        <property name="LOG_FILE">testlog4j2</property>
    </Properties>
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout>
                <pattern>%-d{yyyy-MM-dd HH:mm:ss} [%t] [%tn] [%tp] [%c]-[%p] - %m%n</pattern>
            </PatternLayout>
        </Console>

        <RollingFile name="errorlogfile" fileName="${LOG_PATH}/${LOG_FILE}.log"
                     filePattern="${LOG_PATH}/$${date:yyyy-MM}/${LOG_FILE}-%d{yyyy-MM-dd HH-mm}-%i.log">
            <PatternLayout>
                <pattern>%-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] - %m%n</pattern>
            </PatternLayout>
            <Policies>
                <TimeBasedTriggeringPolicy/>
                <SizeBasedTriggeringPolicy size="50 MB"/>
            </Policies>
            <DefaultRolloverStrategy max="20"/>
        </RollingFile>
    </Appenders>

    <loggers>
        <AsyncLogger name="AsyncLogger" level="trace" includeLocation="true">
            <appender-ref ref="Console"/>
        </AsyncLogger>

        <asyncRoot level="trace" includeLocation="true">
            <appender-ref ref="Console"/>
        </asyncRoot>
    </loggers>

</Configuration>

使用

	public static org.apache.logging.log4j.Logger logger2 = LogManager.getLogger(TestController.class);
	logger2.debug(" ========>  debug 111111");
	logger2.info(" ========>  info 333");
	logger2.error(" ========>  erro 333");

3. SLFJ

  1. SLF4J,即简单日志门面(Simple Logging Facade for Java),不是具体的日志解决方案,而是通过Facade Pattern提供一些Java logging slf4j跟commons-logging类似,是各种日志实现的通用入口。
  2. 作者创建SLF4J的目的是为了替代Jakarta Commons-Logging。common-logging通过动态查找的机制,在程序运行时自动找出真正使用的日志库;
  3. 实际上,SLF4J所提供的核心API是一些接口以及一个LoggerFactory的工厂类。在使用SLF4J的时候,不需要在代码中或配置文件中指定你打算使用那个具体的日志系统。
  4. 在部署的时候不修改任何配置即可接入一种日志实现方案。但是,他在编译时静态绑定真正的Log库。
  5. 使用SLF4J时,如果你需要使用某一种日志实现,那么你必须选择正确的SLF4J的jar包的集合(各种桥接包)。
  6. SLF4J提供了统一的记录日志的接口,只要按照其提供的方法记录即可,最终日志的格式、记录级别、输出方式等通过具体日志系统的配置来实现,因此可以在应用中灵活切换日志系统。

适合范围

  1. 如果你开发的是类库或者嵌入式组件,那么就应该考虑采用SLF4J,因为不可能影响最终用户选择哪种日志系统。
  2. 在另一方面,如果是一个简单或者独立的应用,确定只有一种日志系统,那么就没有使用SLF4J的必要。

使用方式:

//log4j
import org.apache.log4j.Logger;
private static Logger logger = Logger.getLogger(TestController.class);

//log4j2
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
private static Logger logger = LogManager.getLogger(TestController.class);

//SLF4J
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
private static Logger logger = LoggerFactory.getLogger(TestController.class);

4. logback

Logback,一个“可靠、通用、快速而又灵活的Java日志框架”。

logback当前分成三个模块:logback-core,logback- classic和logback-access。
logback-core是其它两个模块的基础模块。
logback-classic是log4j的一个改良版本。此外logback-classic完整实现SLF4J API使你可以很方便地更换成其它日志系统如log4j或JDK Logging。
logback-access访问模块与Servlet容器集成提供通过Http来访问日志的功能。

选择logback的理由:

  1. logback比log4j要快大约10倍,而且消耗更少的内存。
  2. logback-classic模块直接实现了SLF4J的接口,所以我们迁移到logback几乎是零开销的。
  3. logback不仅支持xml格式的配置文件,还支持groovy格式的配置文件。相比之下,Groovy风格的配置文件更加直观,简洁。
  4. logback-classic能够检测到配置文件的更新,并且自动重新加载配置文件。
  5. logback能够优雅的从I/O异常中恢复,从而我们不用重新启动应用程序来恢复logger。
  6. logback能够根据配置文件中设置的上限值,自动删除旧的日志文件。
  7. logback能够自动压缩日志文件。
  8. logback能够在配置文件中加入条件判断(if-then-else)。可以避免不同的开发环境(dev、test、uat…)的配置文件的重复。
  9. logback带来更多的filter。
  10. logback的stack trace中会包含详细的包信息。
  11. logback-access和Jetty、Tomcat集成提供了功能强大的HTTP-access日志。

配置文件:需要在项目的src目录下建立一个logback.xml。
(1)logback首先会试着查找logback.groovy文件;
(2)当没有找到时,继续试着查找logback-test.xml文件;
(3)当没有找到时,继续试着查找logback.xml文件;
(4)如果仍然没有找到,则使用默认配置(打印到控制台)。

使用:
spring boot 1.5以后默认已经使用logback作为日志,对应jar包为

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </dependency>

参考链接:https://blog.csdn.net/xudan1010/article/details/52890102

posted @ 2021-12-23 09:26  龘人上天  阅读(90)  评论(0编辑  收藏  举报