2016-09-09 136 views
0

我已经使用log4j2和springboot,日志文件已创建但日志未写入文件。创建Log4j2文件但未写入日志

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

看来你的log4j2配置不正确。为什么不尝试基于xml(或yaml/json)的配置? “.properties”无法利用log4j2的全部功能。 –

回答

1

“log4j2.properties”在spring-boot中的配置使用有一定的局限性。 Log4J 2在最初发布时不支持通过属性文件进行配置。这是从Log4J的2.4,对于属性文件中再加入支持,但在the documentation

提到的2.4版本完全不同的syntax.As,Log4j的现在支持通过属性文件配置。请注意,属性语法与Log4j 1中使用的语法不同。

从版本2.6起,不再需要此列表的标识符,因为名称是在第一次使用时推断的,但是如果您希望使用更复杂确定您仍然必须使用该列表。如果列表存在,它将被使用。

从Spring引导版本1.4.0开始,所使用的log4j2 api版本是2.6.2。请注意,spring-boot使用slf4j api来支持多种基础日志框架。在使用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> 

+0

你的回答很好描述性。谢谢你,并赞成这个.. :-)不幸的是,系统让我只给一个票。 :-) – CodeIntro

+0

很高兴帮助:) –

1

我试图以多种方式,但log4j2.properties不工作。我试着用弹簧启动这么多版本(1.4.3高达)& log4j2组合,来到结论

  • Log4j2 - 2.7是否工作正常,但春天开机没来log4j2-2.7直到版本(1.4.X)。
  • 不要去log4j2.properties使用springboot组合登录
  • 更好地使用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-> main->资源此文件

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 
1

请将您的logger.file.name更名为您自己的财产。

0
Logger logger = LogManager.getLogger("My_logger"); 

在log4j2.xml我们应该说的getLogger("String")名称听取并写入文件。

<Logger name ="My_logger" level="debug">