我已经将log4j2与springboot一起使用,已经创建了日志文件但是日志没有写入文件中。
log4j2.properties
name=PropertiesConfig
property.filename = /export/home/apps/logs
appenders = console, file
appender.console.type = Console
appender.console.name = STDOUT
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = [%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n
appender.file.type = File
appender.file.name = LOGFILE
appender.file.fileName=${filename}/app-frontend.log
appender.file.layout.type=PatternLayout
appender.file.layout.pattern=[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n
loggers=file
logger.file.name=guru.springframework.blog.log4j2properties
logger.file.level = debug
logger.file.appenderRefs = file
logger.file.appenderRef.file.ref = LOGFILE
rootLogger.level = debug
rootLogger.appenderRefs = stdout
rootLogger.appenderRef.stdout.ref = STDOUT
的pom.xml
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</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-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
</dependencies>
使用记录器的方法
private static Logger logger = LogManager.getLogger();
@RequestMapping(value="/check", method = RequestMethod.GET)
public String healthCheck() {
logger.debug("Health-check invoked");
return "Hey, I am fine";
}
上面我提到了我使用过的代码。还是找不到办法解决。日志甚至没有出现在控制台中。
答案 0 :(得分:2)
在spring-boot中使用“log4j2.properties”进行配置有一定的局限性。 Log4J 2在最初发布时不支持通过属性文件进行配置。它来自Log4J 2.4,再次添加了对属性文件的支持,但语法完全不同。如the documentation中所述
从版本2.4开始,Log4j现在支持通过属性文件进行配置。请注意,属性语法与Log4j 1中使用的语法不同。
从版本2.6开始,不再需要此标识符列表,因为首次使用时会推断出名称,但是如果您希望使用更复杂的标识,则必须仍然使用该列表。如果列表存在,将使用它。
从春季启动版本1.4.0开始,使用的log4j2 api版本为2.6.2。请注意,spring-boot使用slf4j api来支持多个底层Logging Framework。在为log4j2使用基于属性的配置时,似乎存在一个问题,而不需要为slf4j绑定添加类路径依赖性。
使用基于XML(或yaml / json)的配置来实现相同的功能并启用log4j2能够使用的所有功能是有意义的。
以下是基于xml的相同属性配置。
log4j2.xml
<?xml version="1.0" encoding="UTF-8"?>
<Configuration monitorInterval="60">
<Properties>
<Property name="filename">export/home/apps/logs</Property>
</Properties>
<Appenders>
<Console name="STDOUT" target="SYSTEM_OUT">
<PatternLayout pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n"/>
</Console>
<File name="LOGFILE"
fileName="${filename}/app-frontend.log">
<PatternLayout pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n"/>
</File>
</Appenders>
<Loggers>
<Logger name="guru.springframework.blog.log4j2properties" level="debug">
<AppenderRef ref="LOGFILE"
level="debug" />
</Logger>
<Root level="debug">
<AppenderRef ref="STDOUT"/>
</Root>
</Loggers>
答案 1 :(得分:2)
请使用您自己的媒体资源重命名 logger.file.name 。
答案 2 :(得分:1)
我尝试过多种方式,但log4j2.properties无效。我试过这么多版本的spring-boot(高达1.4.3)&amp; log4j2组合并得出结论
以下是我取得的成就。
<强>的build.gradle 强>
依赖项{
[
"org.springframework:spring-context",
"org.springframework.boot:spring-boot-starter-web",
"org.springframework.boot:spring-boot-starter-data-jpa",
"org.springframework.boot:spring-boot-starter-test",
"org.springframework:spring-context-support:4.1.6.RELEASE"
].each { dep -> compile(dep) {
exclude module: "spring-boot-starter-logging"
}
}
compile("org.springframework.boot:spring-boot-starter-log4j2")
compile ('org.apache.logging.log4j:log4j-api:2.6.2')
compile ('org.apache.logging.log4j:log4j-core:2.6.2')
compile ('org.apache.logging.log4j:log4j-slf4j-impl:2.6')
compile ('org.hibernate:hibernate-entitymanager:5.2.2.Final')
compile ('org.hibernate:hibernate-core:5.2.2.Final')
compile ('org.hibernate:hibernate-java8:5.2.2.Final')
compile 'mysql:mysql-connector-java:5.1.31'
compile 'org.apache.commons:commons-lang3:3.0'
compile 'org.freemarker:freemarker:2.3.20'
//compile 'org.apache.velocity:velocity:1.7'
compile 'commons-dbcp:commons-dbcp:1.4'
compile 'javax.servlet:jstl:1.2'
compile 'com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.8.5'
testCompile 'junit:junit:4.12'
providedRuntime 'org.apache.tomcat.embed:tomcat-embed-jasper'
}
<强> log4j2.yml 强>
将此文件放在src-&gt; main-&gt; resources
中configuration:
name: Default
properties:
property:
- name: log-path
value: c:\\logs
- name: archive
value: ${log-path}/archive
appenders:
Console:
PatternLayout:
pattern: '[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n'
name: Console-Appender
target: SYSTEM_OUT
File:
PatternLayout:
pattern: '[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n'
fileName: ${log-path}/amc.log
name: File-Appender
RollingFile:
DefaultRolloverStrategy:
max: '30'
PatternLayout:
pattern: '[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n'
Policies:
SizeBasedTriggeringPolicy:
size: 1 KB
fileName: ${log-path}/rollingfile.log
filePattern: ${archive}/rollingfile.log.%d{yyyy-MM-dd-hh-mm}.gz
name: RollingFile-Appender
loggers:
logger:
additivity: 'false'
appender-ref:
- level: info
ref: Console-Appender
- level: info
ref: File-Appender
- level: info
ref: RollingFile-Appender
level: debug
name: <your package>
root:
appender-ref:
ref: File-Appender
level: info
答案 3 :(得分:1)
Logger logger = LogManager.getLogger("My_logger");
在log4j2.xml中,我们应该说出要监听和写入文件的getLogger("String")
的名称。
<Logger name ="My_logger" level="debug">
答案 4 :(得分:1)
最终获得了解决方案: 使您的logger.file.appenderRefs成为根记录器
rootLogger.appenderRefs = file, stdout
rootLogger.appenderRef.file.ref = LOGFILE
rootLogger.level = debug
rootLogger.appenderRef.stdout.ref = STDOUT
绝对可以!!但是我无法限制文件大小。甚至超出了log4j2中默认文件最大大小(10M)的限制。
答案 5 :(得分:0)
就我而言,我必须添加下一行:
rootLogger.appenderRef.file.ref = LOGFILE
也存在评论: appender.file.fileName
///////////////////////////////////////////////// / 配置Log4j2.xml ///////////////////////////////// >
property.filename = logs
appenders = console, file
appender.console.type = Console
appender.console.name = STDOUT
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = [%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n
appender.file.type = File
appender.file.name = LOGFILE
appender.file.fileName = ${filename}/application.log
appender.file.layout.type = PatternLayout
appender.file.layout.pattern = [%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} -%msg%n
loggers = file
logger.file.name = guru.springframework.blog.log4j2properties
logger.file.level = debug
logger.file.appenderRefs = file
logger.file.appenderRef.file.ref = LOGFILE
rootLogger.level = debug
rootLogger.appenderRefs = stdout
rootLogger.appenderRef.stdout.ref = STDOUT
rootLogger.appenderRef.file.ref = LOGFILE
///////////////////////////////////////////////// / 配置Log4j2.xml(完) /////////////////////////////// >
对我有用。
对不起,我的英语。 问候