已创建Log4j2文件但未写入日志

时间:2016-09-09 05:33:00

标签: logging spring-boot log4j2

我已经将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";
    }

上面我提到了我使用过的代码。还是找不到办法解决。日志甚至没有出现在控制台中。

6 个答案:

答案 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组合并得出结论

  • Log4j2 - 2.7工作正常,但是spring-boot并没有提供log4j2-2.7直到版本(1.4.x)。
  • 不要使用springboot组合登录log4j2.properties
  • 最好使用这个组合的log4j2.yml,因为极客们最近对使用xml不感兴趣。

以下是我取得的成就。

<强>的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(完) ///////////////////////////////

对我有用。

对不起,我的英语。 问候