近日自己在写springboot项目时,发现使用log4j作为日志输入工具时,没有正常生成日志文件,有点莫名其妙。上某度查了下,发现各种版本解决方案。现在记录下自己的问题以及解决方案,以供日后参考。
## 问题版本
### pom文件
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.5.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.test</groupId>
<artifactId>epark</artifactId>
<version>0.0.1</version>
<name>epark</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.6</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
### log4j日志文件
### 设置###
log4j.rootLogger = INFO,stdout,D,E
### 输出信息到控制抬 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
### 输出DEBUG 级别以上的日志到=E://logs/error.log ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = D:/logs/log.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = INFO
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
log4j.appender.D.DatePattern='_'yyyy-MM-dd'.log'
log4j.appender.D.encoding=UTF-8
### 输出ERROR 级别以上的日志到=E://logs/error.log ###
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File = D:/logs/error.log
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
log4j.appender.E.DatePattern='_'yyyy-MM-dd'.log'
log4j.appender.E.encoding=UTF-8
以上配置好后就是正常的springboot启动,但是请求地址发现,控制台有打印日志,日志文件就是没生成出来。
## 解决方案
### 修改pom配置文件
网上解释:因为SpringBoot自带了一个spring-boot-starter-logging,默认是用他来打印日志信息的,所以就算依赖里添加了log4j,而且也将配置文件放在对应位置也不会生效!所以要将spring的这个依赖排除。
修改代码如下
<!-- 排除内部的日志部分 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- 日志文件 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j</artifactId>
<version>1.3.8.RELEASE</version>
</dependency>
近日自己在写springboot项目时,发现使用log4j作为日志输入工具时,没有正常生成日志文件,有点莫名其妙。上某度查了下,发现各种版本解决方案。现在记录下自己的问题以及解决方案,以供日后参考。## 问题版本### pom文件<modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId&g...
Plumelog一个简单易用的java分布式
日志
组件。支持百亿级别,
日志
从搜集到查询,不用去
文件
中
翻阅
日志
方便快捷,支持查询一个调用链的
日志
,支持链路追踪,查看调用链耗时情况,在分布式系统
中
也可以查询关联
日志
,能够帮助快速定位问题,简单易用,
没有
代码入侵,查询界面友好,高效,方便,只要你是java系统,不要做任何项目改造,接入直接
使用
,
日志
不落本地磁盘,无需关心
日志
占用应用服务器磁盘问题,觉得项目好用帮忙点个星星,您的star是我们前进的动力。
Plumelog功能介绍:
1、无入侵的分布式
日志
系统,基于
log4j
、
log4j
2、logback搜集
日志
,设置链路ID,方便查询关联
日志
2、基于elasticsearch作为查询引擎
3、高吞吐,查询效率高
4、全程不占应用
程序
本地磁盘空间,免维护;对于项目透明,不影响项目本身运行
5、无需修改老项目,引入直接
使用
,支持dubbo,支持springcloud
Plumelog架构:
plumelog-core:核心组件包含
日志
搜集端,负责搜集
日志
并推送到kafka,redis等队列
plumelog-server:负责把队列
中
的
日志
日志
异步写入到elasticsearch
plumelog-ui:前端展示,
日志
查询界面
plumelog-demo:基于
springboot
的
使用
案例
Plumelog
使用
方法:
自己编译安装如下
前提:kafka或者redis 和 elasticsearch(版本6.8以上最好) 自行安装完毕,版本兼容已经做了,理论不用考虑ES版本
maven deploy -DskipTests 上传包到自己的私服
私服地址到plumelog/pom.xml改
UTF-8
http://172.16.249.94:4000
2、路径错误
当我们配置
log4j
.appender.logfile.File=../logs/vpn.log为相对路径的时候,启动tomcat只能在bin目录下shstartup.sh,而不能在其他目录下启动,如在tomcat目录下./bin/startup.sh启动;
如果
log4j
.appender.logfile.Fi...
log4j
.logger.com.mchange=ERROR,A2
log4j
.logger.org=ERROR,A2
log4j
.logger.httpclient.wire=ERROR,A2
log4j
.log
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-
log4j
2</artifactId>
</dependency>
2. 在项目的 resources 目录下创建
log4j
2.xml
文件
,并配置
log4j
2 的相关参数,如:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
</Appenders>
<Loggers>
<Root level="error">
<AppenderRef ref="Console"/>
</Root>
<Logger name="org.springframework.boot" level="info"/>
</Loggers>
</Configuration>
3. 在代码
中
使用
log4j
2 记录
日志
,例如:
private static final Logger logger = LogManager.getLogger(YourClassName.class);
logger.info("This is a
log4j
2 log message.");
在项目启动后,
log4j
2 就会根据配置
文件
中
的参数,将
日志
信息记录到控制台或其他地方。