2016-09-09 2 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» для конфигурации весенней загрузки имеет определенные ограничения. Log4J 2 не поддерживал конфигурацию через файл свойств, когда он был первоначально выпущен. Именно из Log4J 2.4, что поддержка вновь добавленного файл свойств, но с совершенно разным syntax.As упомянутого в the documentation

В версии 2.4, Log4j теперь поддерживает конфигурацию с помощью файлов свойств. Обратите внимание, что синтаксис свойства НЕ такой же, как синтаксис, используемый в Log4j 1.

Начиная с версии 2.6, этот список идентификаторов больше не требуется, поскольку имена выведены при первом использовании, однако, если вы хотите использовать более сложные вы должны использовать список. Если список присутствует, он будет использоваться.

Начиная с версии 1.4.0 для загрузки весны, версия log4j2 api - 2.6.2. Обратите внимание, что Spring-Boot использует slf4j api для поддержки нескольких базовых структур ведения журнала. Кажется, что возникает проблема при использовании конфигурации на основе свойств для log4j2 без манипуляции с зависимостями classpath для привязок 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">