簡體   English   中英

帶有log4j2的slf4j創建日志文件,但不寫入日志文件

[英]slf4j with log4j2 creates log files but does not write to it

我有一個Spring Boot應用程序,我正在嘗試使用SLF4J和Log4J2設置日志記錄。

這是應用程序的摘錄

package hello;
import java.util.concurrent.atomic.AtomicLong;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class GreetingController implements IGreetingService {
  //  private Logger logger =    LogManager.getLogger(GreetingController.class.getName());
  private Logger logger = LoggerFactory.getLogger(GreetingController.class.getName());
  private static final String template = "Hello, %s!";
  private final AtomicLong counter = new AtomicLong();

  @Override
  public Greeting greeting(@RequestParam(value = "name", defaultValue = "World") String name) {
    logger.error("greeting called");
    return new Greeting(counter.incrementAndGet(), String.format(template, name));
   }
}

這是log4j2.component.properties文件的內容,我在其中定義了log4j配置文件:log4j.configurationFile = c:\\ log4j2.xml

這是log4j2.xml文件:

<Configuration>
    <properties>
        <property name="path">logs</property>
    </properties>
<Appenders>
    <Console name="consoleAppender" target="SYSTEM_OUT">
     <PatternLayout pattern="%d{yyy-MM-dd HH:mm:ss} %msg"/>
    </Console>
    <File name="myfileAppender" fileName="${path}/file.log" immediateFlush="true" append="true">
        <PatternLayout pattern="%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
      </File>
      <RollingFile name="rollingAppender" 
        fileName="c:\\roll.log" 
        filePattern="c:\\roll.log\\$${date:yyyy-MM}\\app-%d{MM-dd-yyyy}-%i.log">
           <PatternLayout>
               <pattern>%d %p %C{1.} [%t] %m%n</pattern>
           </PatternLayout>
           <Policies>
              <OnStartupTriggeringPolicy />
              <TimeBasedTriggeringPolicy interval="6" modulate="true"/>
              <SizeBasedTriggeringPolicy size="250 MB"/>
           </Policies>
      </RollingFile>    
  </Appenders>
<Loggers>
<Logger name="hello" level="error">
    <AppenderRef ref="consoleAppender"/>
    <AppenderRef ref="myfileAppender"/>
</Logger>  
<Root level="error">
  <AppenderRef ref="consoleAppender"/>
  <AppenderRef ref="myfileAppender"/>
  <AppenderRef ref="rollingAppender"/>
</Root>

我為控制台設置了三個附加程序,一個文件和一個滾動文件。 當我運行應用程序時,我會在控制台中看到日志,但是日志的格式沒有我在配置中定義的格式。

2016-09-13 12:41:09.569 ERROR 9892 --- [nio-8888-exec-6] h.GreetingController                     : greeting called

創建了file.log和roll.log,但是它們中沒有任何日志信息。

這是build.gradle的片段

configurations {
  compile.exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging'
  compile.exclude group: 'commons-logging'
}

dependencies {
    compile(group: 'org.springframework.boot',  name: 'spring-boot-starter-web')
    compile(group: 'org.springframework.boot',  name: 'spring-boot-starter-log4j2')
    compile(group: 'org.springframework.cloud', name: 'spring-cloud-starter-eureka-server')
    compile group: 'com.netflix.eureka',        name: 'eureka-client', version: '1.4.10'
    compile group: 'com.sun.jersey',            name: 'jersey-server', version: '1.19.1'
    compile group: 'com.sun.jersey',            name: 'jersey-core', version: '1.19.1'
    compile group: 'com.sun.jersey',            name: 'jersey-servlet', version: '1.19.1'   
}

春季啟動版本:1.3.6

任何幫助弄清楚我在做什么錯的幫助將不勝感激。 提前致謝。

所示的配置文件沒有</Loggers</Configuration >標記。 這可能會阻止XML的解析,並且log4j將安裝默認配置,該配置僅以錯誤級別記錄到控制台。

如果找不到或未正確處理配置文件,則仍可以通過設置系統屬性-Dorg.apache.logging.log4j.simplelog.StatusLogger.level=TRACE來啟用log4j2內部狀態日志記錄。 這可以讓您深入了解問題所在。

我想出了如何使其工作。 我需要將log4j2.xml文件添加到項目和文件系統中的src / main / resources中,在我的情況下為c:\\ log4j2.xml

如果缺少其中一個文件,則日志記錄將不起作用。 謝謝大家的幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM