1 . 概述

1.1  日志框架实现

  • log4j是apache实现的一个开源日志组件;
  • logback同样是由log4j的作者设计完成的,拥有更好的特性,用来取代log4j的一个日志框架,是slf4j的原生实现;
  • log4j2是log4j 1.x和logback的改进版,据说采用了一些新技术(无锁异步、等等),使得日志的吞吐量、性能比log4j 1.x提高10倍,并解决了一些死锁的bug,而且配置更加简单灵活,官网地址: http://logging.apache.org/log4j/2.x/manual/configuration.html

1.2  日志接口

  slf4j是对所有日志框架制定的一种规范、标准、接口,并不是一个框架的具体的实现,需要和具体的日志框架实现配合使用(如log4j、logback)。

  使用日志接口便于更换为其他日志框架。

  

2. 使用log4j2

使用maven配置log4j2,pom.xml中引入log4j-api 和 log4j-core即可。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>tdtech.practice</groupId>
<artifactId>achitechture</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<log4j.version>2.8.2</log4j.version>
</properties> <dependencies>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>${log4j.version}</version>
</dependency> </dependencies>
</project>

java代码示例:

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; public class LogUtil {
   //引入的是log4j自身的包
static Logger log = LogManager.getLogger(); public static void main(String[] args) {
String param1 = "string1";
String param2 = "string2"; log.error("--占位符的方式拼接效率更高-- {} -- {}", param1, param2);
}
} output:
00:10:12.063 [main] ERROR eagle.log.LogUtil - --占位符的方式拼接效率更高-- string1 -- string2

 3. 使用slf4j+log4j2接口

pom.xml中除了引入上述log4j2的包,还需引入slf4j的包:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>tdtech.practice</groupId>
<artifactId>achitechture</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<slf4j.version>1.7.25</slf4j.version>
<log4j.version>2.8.2</log4j.version>
</properties> <dependencies>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>${log4j.version}</version>
</dependency> <!-- slf4j核心包-->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency> <dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>${slf4j.version}</version>
<scope>runtime</scope>
</dependency> <!--slf4j绑定log4j实现-->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>${log4j.version}</version>
</dependency> </dependencies>
</project>

java代码示例:

package eagle.log;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory; public class LogUtil {
//引入的是slf4j接口的包
static Logger log = LoggerFactory.getLogger(LogUtil.class); public static void main(String[] args) {
String param1 = "string1";
String param2 = "string2"; log.error("--占位符的方式拼接效率更高-- {} -- {}", param1, param2);
}
}

4. log4j2的配置

classpath下添加log4j2.xml,示例:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO" monitorInterval="300">
<Appenders>
<Console name="console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%t] [%file:%line] - %msg%n"/>
</Console> <RollingRandomAccessFile name="gatekeeperFile"
fileName="${bundle:gatekeeper:LOG_HOME}/gatekeeper.log"
filePattern="${bundle:gatekeeper:LOG_HOME}/$${date:yyyy-MM-dd}/gatekeeper-%d{yyyy-MM-dd HH-mm}-%i.log.xz"
immediateFlush="false">
<PatternLayout
pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%t] [%file:%line] - %msg%n"/>
<Policies>
<TimeBasedTriggeringPolicy interval="60"/>
<SizeBasedTriggeringPolicy size="20 MB"/>
</Policies>
<DefaultRolloverStrategy max="10">
<!--
Nested conditions: the inner condition is only evaluated on files
for which the outer conditions are true.
-->
<Delete basePath="${bundle:gatekeeper:LOG_HOME}" maxDepth="2">
<IfFileName glob="*/gatekeeper-*.log.xz">
<IfLastModified age="30d">
</IfLastModified>
</IfFileName>
</Delete>
</DefaultRolloverStrategy>
</RollingRandomAccessFile>
</Appenders> <Loggers>
<AsyncLogger name="org.springframework" level="info" additivity="false" includeLocation="true">
<AppenderRef ref="springFile"/>
</AsyncLogger>
<AsyncLogger name="com.tdtech.eplatform.gatekeeper" level="info" additivity="false" includeLocation="true">
<AppenderRef ref="gatekeeperFile"/>
</AsyncLogger>
<AsyncRoot level="info" includeLocation="false">
<AppenderRef ref="console"/>
</AsyncRoot>
  </Loggers>
</Configuration>

https://blog.csdn.net/NEWCIH/article/details/76216606

java日志管理 - slf4j+log4j2的更多相关文章

  1. Java日志管理

    首页 资讯 精华 论坛 问答 博客 专栏 群组 更多 ▼ 您还未登录 ! 登录 注册 JavaCrazyer的ItEye(codewu.com)技术博客   博客 微博 相册 收藏 留言 关于我   ...

  2. Java日志管理:Logger.getLogger()和LogFactory.getLog()的区别(详解Log4j)

    Java日志管理:Logger.getLogger()和LogFactory.getLog()的区别(详解Log4j) 博客分类: Java综合   第一.Logger.getLogger()和Log ...

  3. Java 日志管理最佳实践

    转:http://blog.jobbole.com/51155/ 日志记录是应用程序运行中必不可少的一部分.具有良好格式和完备信息的日志记录可以在程序出现问题时帮助开发人员迅速地定位错误的根源.对于开 ...

  4. Java日志管理方法(转载)

    原文地址:http://www.cnblogs.com/leocook/p/log_java.html java开发中常见的几种日志管理方案有以下4种: 1. Commons-logging + lo ...

  5. 4种Java日志管理方法

    java开发中常见的几种日志管理方案有以下4种: 1. Commons-logging + log4j 2. log4j 3. slf4j + log4j + commmons-logging 4. ...

  6. Java日志介绍(4)-Log4j2

    Log4j2是Log4j的升级版,相比其前身Log4j 1.x提供了显著的改进,并提供了在Logback中提供的许多改进,同时修复了Logback体系结构中的一些固有问题. Log4j2的内容很多,本 ...

  7. Java日志框架Slf4j+Log4j入门

    一.日志系统介绍 slf4j,即简单日志门面(Simple Logging Facade for Java),不是具体的日志解决方案,它只服务于各种各样的日志系统.简答的讲就是slf4j是一系列的日志 ...

  8. Java日志:集成slf4j和logback

    Java日志方案有很多,包括:java.util.logging.Apache的commons-logging和log4j.slf4j以及logback. 一个大型项目会用到众多第三方jar包,这些j ...

  9. 3.Java日志框架slf4j、jcl、jul、log4j1、log4j2、logback大总结

    一.slf4j.jcl.jul.log4j1.log4j2.logback JUL:JDK中的日志记录工具,也常称为JDKLog.jdk-logging. LOG4J1:一个具体的日志实现框架. LO ...

随机推荐

  1. 不同JDK版本之间的intern()方法的区别-JDK6 VS JDK6+

    String s = new Stirng(“a”); s.intern(); JDK6:当调用intern()方法时,如果字符串常量池先前已创建出该字符串对象,则返回池中的该字符串的引用.否则,将此 ...

  2. 各版本IE兼容问题,IE6,IE7,IE8,IE9,IE10,IE11

    在网站开发和学习中,由于各种兼容性问题,让开发者挺烦恼的,我的学员也经常因为兼容问题来找我取经. 事实上,IE给出了解决方案,谷歌给出了解决方案,国内著名网站百度也将这个解决方案应用于IE的兼容性问题 ...

  3. 在普通类中获取Spring管理的bean

    1.在项目中添加下面的类: import org.springframework.context.ApplicationContext; import org.springframework.cont ...

  4. 【学术篇】luogu1351 [NOIP2014提高组] 联合权值

    一道提高组的题..... 传送门:题目在这里.... 现在都懒得更自己的blog了,怕是太颓废了_ (:з」∠) _ 好久没做题了,手都生了.(好吧其实是做题方面手太生了) 这题我都不想讲了,把代码一 ...

  5. C++ 系列:随机数

    C++中没有自带的random函数,要实现随机数的生成就需要使用rand()和srand().不过,由于rand()的内部实现是用线性同余法做的,所以生成的并不是真正的随机数,而是在一定范围内可看为随 ...

  6. vue better-scroll 下拉上拉,加载刷新

    _initScroll(){             this.$nextTick(() => {                 if (!this.scroll) {             ...

  7. ipsec原理(转载)

    IPSec VPN是目前VPN技术中点击率非常高的一种技术,同时提供VPN和信息加密两项技术,这一期专栏就来介绍一下IPSec VPN的原理.IPSec VPN应用场景 IPSec VPN的应用场景分 ...

  8. 【JZOJ4811】排队

    description analysis 堆\(+\)树上倍增 考虑后序遍历搞出\(dfs\)序,那么要填肯定是从\(dfs\)序开始填 把每个点是序里第几位看成优先级,用小根堆来维护当前空着的优先级 ...

  9. 如何检测 Web 服务请求丢失问题

    导读 『StabilityGuide』是阿里多位阿里技术工程师共同发起的稳定性领域的知识库开源项目,涵盖性能压测.故障演练.JVM.应用容器.服务框架.流量调度.监控.诊断等多个技术领域,以更结构化的 ...

  10. bzoj 1196: [HNOI2006]公路修建问题(二分+贪心)

    传送门 解题思路 看到最大,肯定要先想二分答案.二分之后首先从小到大枚举\(k\)个小于\(lim\)的所有一级公路,然后用并查集连到一起,然后就在剩下的里面从小到大找n-1-k个二级公路,模仿最小生 ...