IDEA整合日志框架Log4j2+Slf4j详细配置过程
日志框架这么多,他们之间到底是什么关系呢?笼统的讲就是slf4j是一系列的日志接口,而log4j2、logback是具体实现了接口功能的日志框架。现在的主流日志接口都使用slf4j,而日志的实现就见仁见智了,至于他们的关系请自行百度,此处选择log4j2作为实现框架。网上看到的教程要么对代码没有解释,对新手不友好;要么时间比较久远,跟不上时代。这里使用新版本并结合大量注释,力求简洁明了,有什么问题欢迎留言交流。
运行环境:
- log4j2 2.8.2 + slf4j 1.7.25
- IntelliJ IDEA 2017.2.5
- maven 3.0.5
配置过程
Step 1:导入maven依赖
<properties> <slf4j.version>1.7.25</slf4j.version> <log4j.version>2.8.2</log4j.version> </properties> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>${slf4j.version}</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-slf4j-impl</artifactId> <version>${log4j.version}</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-web</artifactId> <version>${log4j.version}</version> <scope>runtime</scope> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>${log4j.version}</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>${log4j.version}</version> </dependency>
Step 2:添加配置文件
配置文件可以直接在resources文件夹下创建,文件名为log4j2.xml,log4j2的相关组件会自动扫描log4j2.xml或log4j2.properties(log4j2 同时支持多种属性配置方式,log4j2.xml或log4j2.properties为官方指定的配置文件名,具体信息参见官方文档)。该文件夹是IDEA专门用来存放各种配置文件的地方,如果使用前面所示的文件名就不需要指定配置文件的位置。如果想放在其他文件夹下,则需要在web.xml文件中添加如下配置:
<context-param> <param-name>log4jConfiguration</param-name> <!-- 日志配置文件路径,请根据具体项目自行调整 --> <param-value>classpath:conf/log4j2.xml</param-value> </context-param>
我的配置文件log4j2.xml内容如下(此处并没有将日志信息输出到外部文件):
<?xml version="1.0" encoding="utf-8"?> <!--日志级别:TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出--> <!-- status : 这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,会看到log4j2内部各种详细输出 monitorInterval : Log4j能够自动检测修改配置文件和重新配置本身, 设置间隔秒数。此处表示每隔300秒重读一次配置文件 --> <Configuration status="ERROR" monitorInterval="300"> <!--<properties>--> <!--<property name="LOG_HOME">F:\logs</property>--> <!--<property name="ERROR_LOG_FILE_NAME">error</property>--> <!--</properties>--> <Appenders> <Console name="Console" target="SYSTEM_OUT"> <!-- 定义类型为Console的Appender --> <PatternLayout pattern="%d{HH:mm:ss} [%level] %c{10} - %msg%n"/> <!-- 定义类型为Pattern的Layout --> </Console> </Appenders> <!--定义logger,只有定义了logger并引入上面的appender,appender才会生效--> <Loggers> <Root level="error"> <!-- 定义Root Logger --> <AppenderRef ref="Console"/> <!-- Root Logger的Appender引用上面定义的Console --> </Root> <!--定义名字为MainLogger的Logger,其日志级别为info,info以下级别的信息将不会输出 --> <Logger name="MainLogger" level="info" additivity="false"> <AppenderRef ref="Console"/> <!-- Root Logger的Appender引用上面定义的Console --> </Logger> </Loggers> </Configuration>
如果使用log4j2.properties的形式配置log4j2,则参见如下配置(两个配置文件不属于同一个项目,所以配置信息略有不同):
# 指定log4j2内部的日志输出级别,低于指定级别的日志将不会输出,ALL表示输出所有日志信息 # 日志级别:ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF status = warn # 配置日志信息输出到哪里:err表示作为标准错误输出,还可以是一个文件路径或者一个URL dest = err # 指定配置的名称 name = Log4jPropertiesConfig #使用“property.* ”来指定下方可能用到的属性值 property.RollingFileName = target/log/log4j2test.log property.ConsoleLogLevel = info filter.threshold.type = ThresholdFilter filter.threshold.level = debug # ConsoleAppender:定义输出到命令行的日志输出器 # ThresholdFilter:临界值过滤器,过滤掉低于指定临界值的日志。当日志级别低于临界值时,日志输出会被拒绝 appender.console.type = Console appender.console.name = Console_OUT appender.console.layout.type = PatternLayout appender.console.layout.pattern = %d{yyyy-MM-dd HH:mm:ss} [%p] %c: %msg%n appender.console.filter.threshold.type = ThresholdFilter appender.console.filter.threshold.level = ${ConsoleLogLevel} # RollingFileAppender:输出到滚动文件的日志输出,它会判断文件是否满足封存文件的要求,若满足,则将文件封存并把日志写入到下一个滚动文件。 # RollingFileAppender需要TriggeringPolicy来指定触发封存的条件,还需要RolloverStrategy来告诉输出器如何封存文件 # 此处使用复合型触发策略(时间和文件大小),具体配置参考:http://blog.csdn.net/henry115/article/details/78483457 appender.rolling.type = RollingFile appender.rolling.name = RollingFile appender.rolling.fileName = ${RollingFileName} appender.rolling.filePattern = target/log/log1-%d{yy-MM-dd-HH-mm-ss}-%i.log.gz appender.rolling.layout.type = PatternLayout appender.rolling.layout.pattern = %d{yyyy-MM-dd HH:mm:ss.SSS} [%p] %C{1.} [%t]: %msg%n appender.rolling.policies.type = Policies appender.rolling.policies.time.type = TimeBasedTriggeringPolicy appender.rolling.policies.time.interval = 12 appender.rolling.policies.time.modulate = true appender.rolling.policies.size.type = SizeBasedTriggeringPolicy appender.rolling.policies.size.size=100MB appender.rolling.strategy.type = DefaultRolloverStrategy appender.rolling.strategy.max = 10 # 定义名字为TestController的Logger,其日志级别为debug # Logger日志信息输出的目的地由“logger.rolling.appenderRef.rolling.ref”指定 # 当“logger.rolling.additivity”属性值为false时,则子Logger只会在自己的appender里输出 #logger.rolling.level = debug logger.rolling.name = MainController logger.rolling.additivity = false logger.rolling.appenderRef.rolling.ref = Console_OUT # 此处指定日志输出级别无效,输出级别由其引用的输出器指定 rootLogger.level = info rootLogger.appenderRef.stdout.ref = Console_OUT
Step 3: 在Java文件中使用slf4j打印日志信息:
此处注意Logger的名称必须与配置文件中对应
@Controller public class MainController { // 获取log4j2.xml文件中定义的名为“MainLogger”的Logger // 如果没有对应名称的Logger,则无法使用Logger记录和输出日志信息 private static final Logger log = LoggerFactory.getLogger("MainLogger"); @RequestMapping(value = "/test") public String test(){ log.info("info..."); log.debug("debug..."); log.warn("warn..."); log.error("error..."); return "test"; } }
IDEA整合日志框架Log4j2+Slf4j详细配置过程的更多相关文章
- springboot日志框架学习------slf4j和log4j2
springboot日志框架学习------slf4j和log4j2 日志框架的作用,日志框架就是用来记录系统的一些行为的,可以通过日志发现一些问题,在出现问题之后日志是好的一个帮手. 市面上的日志框 ...
- 【SpringBoot】整合日志框架
一.日志框架概述 1.1 日志框架的产生 1.2 市面上的日志框架 二.SLF4j 使用与整合 2.1 如何在系统中使用SLF4j 2.2 如何整合日志框架 2.3 SpringBoot中的日志关系 ...
- Tomcat7.0.22在Windows下详细配置过程
Tomcat7.0.22在Windows下详细配置过程 一.JDK1.7安装 1.下载jdk,下载地址:http://www.oracle.com/technetwork/java/javase/do ...
- 转载 - Struts2 拦截器详细配置过程
出处:http://www.blogjava.net/zzzlyr/archive/2009/10/12/297998.html Struts2 拦截器详细配置过程 1:所有拦截器的超级接口Inter ...
- 转载 - Vim 的 Python 编辑器详细配置过程 (Based on Ubuntu 12.04 LTS)
出处:http://www.cnblogs.com/ifantastic/p/3185665.html Vim 的 Python 编辑器详细配置过程 (Based on Ubuntu 12.04 LT ...
- Log4j2日志框架集成Slf4j日志门面
1.说明 本文介绍使用日志门面Slf4j打印日志, 底层日志实现使用Log4j2框架, 方便以后切换底层日志实现, Log4j2可以替换成Logback等. 2.依赖管理 在pom.xml依赖管理中导 ...
- SpringBoot整合日志框架LogBack
日志可以记录我们应用程序的运行情况,我们可以通过日志信息去获取应用程序更多的信息.常用处理java日志的组件有:slf4j.log4j.logback.common-logging等.其中log4j是 ...
- Java日志框架:SLF4J,Common-Logging,Log4J,Logback说明
Log4j Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台.文件.GUI组件.甚至是套接口服务 器.NT的事件记录器.UNIX Syslog守护进程等 ...
- 日志框架 log4j2 全解析
概述 logging翻译为日志记录 那问题是什么是日志? 日志实际上是日记的一种,用于记录某个时间点发生了什么事情,比如大学老师的教学日志,工作日志等 为什么要记录日志? 在实际生活中记录日志主要为了 ...
随机推荐
- ecshop报错”Deprecated: Assigning the return value of…”解决办法
ECSHOP生成站点地图提示”Deprecated: Assigning the return value of new by reference is deprecated in…”. 我的问题在批 ...
- Redis(十五):哨兵Sentinel
Redis哨兵 Redis 的 Sentinel 系统用于管理多个 Redis 服务器(instance), 该系统执行以下三个任务: 监控(Monitoring): Sentinel 会不断地检查你 ...
- 【死磕Java并发】-----J.U.C之AQS:CLH同步队列
此篇博客全部源代码均来自JDK 1.8 在上篇博客[死磕Java并发]-–J.U.C之AQS:AQS简单介绍中提到了AQS内部维护着一个FIFO队列,该队列就是CLH同步队列. CLH同步队列是一个F ...
- ubuntu下禁用和恢复触摸板
1.一般禁用选项在 settings > mouse and touchpad 中.(16.04通过实验)如果无法禁用或者希望恢复,向下看. 2.命令行键入: xinput ,插卡touchpa ...
- UIWindow的一点儿思考
转自:http://www.cnblogs.com/smileEvday/archive/2012/11/16/UIWindow.html 每一个IOS程序都有一个UIWindow,在我们通过模板简历 ...
- Java callback
Java中的回调(callback)是很重要的一个概念,spring整合hibernate大量使用了这种技术. 究竟怎样才是回调呢? 这是网上最多见到的说明: 1.class A,clas ...
- HDU 2110 Crisis of HDU
Crisis of HDU Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) To ...
- 转:Andriod studio技巧合集
1. 书签(Bookmarks) 描述:这是一个很有用的功能,让你可以在某处做个标记(书签),方便后面再跳转到此处. 调用:Menu → Navigate → Bookmarks 快捷键: 添加/移除 ...
- 应用DataAdapter对象更新数据库中的数据
using System.Data.SqlClient; namespace WindowsFormsApplication1 { public partial class Form1 : Form ...
- Spring Cloud是一系列框架的有序集合
Spring Cloud是一系列框架的有序集合.它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册.配置中心.消息总线.负载均衡.断路器.数据监控等,都可以用 ...