2014-08-28 4 views
2

Я новичок в Spring Boot и работаю над простой демо-версией log4j, используя Spring Boot. Я использовал проект градиента и имел весеннюю загрузку-стартер-сеть и отличные зависимости. Ниже приведено мое содержимое файла log4j.properties. Все, что мне нужно, когда я запускаю основную программу и использую аннотацию @ Log4J, я должен иметь возможность сохранять log.perflog в файл в моем локальном (Windows).Log4j in SpringBoot

log4j.rootLogger = WARN , stdout, cslLog 

log4j.logger.perfLog = WARN, perfLog 
log4j.additivity.perfLog = false 

log4j.appender.perfLog = org.apache.log4j.RollingFileAppender 
log4j.appender.perfLog.File = ${GRAILS_HOME}/logs/csl.log 
log4j.appender.perfLog.Append = true 
log4j.appender.perfLog.ImmediateFlush = true 

log4j.appender.perfLog.MaxFileSize=200MB 
log4j.appender.perfLog.MaxBackupIndex = 1 

Мой образец заводной Класс:

package sample.actuator.log4j 

import groovy.util.logging.Log4j; 
import org.apache.log4j.Logger; 
import org.springframework.boot.SpringApplication; 
import org.springframework.boot.autoconfigure.EnableAutoConfiguration; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RestController; 

@Log4j 
@RestController 
@EnableAutoConfiguration 
class HelloGroovy { 

    static Logger perfLog = Logger.getLogger("perfLog") 

    @RequestMapping("/logger") 
    String logger() { 
     log.info "created a new item named identifier" 
     log.error "created a new item named identifier" 
     log.warn "created a new item named identifier" 

     System.out.println("Test") 
     perfLog.trace("Test") 
     return "Logger Called." 

    } 

    static main(args) { 

     SpringApplication.run(this, args) 
    } 

} 

Все получаете первые 3 строки печатается в консоли, а затем «Test», пост, который ничего не отображается в файле я уже упоминал в log4j .properties.

Мой build.gradle файл

buildscript { 
    repositories { 
      maven { 
       url 'http://artifactory.myorg.com:8081/artifactory/plugins-release' 
      } 
    } 
    dependencies { 
     classpath("org.springframework.boot:spring-boot-gradle-plugin:1.1.5.RELEASE") 
    } 
} 

apply plugin: 'java' 
apply plugin: 'eclipse' 
apply plugin: 'idea' 
apply plugin: 'spring-boot' 

jar { 
    baseName = 'log4jOwn' 
} 

repositories { 
      maven { 
       url 'http://artifactory.myorg.com:8081/artifactory/plugins-release' 
      } 
    } 

dependencies { 
    compile 'org.codehaus.groovy:groovy-all:2.3.3' 
    compile 'org.springframework.boot:spring-boot-starter-web' 

    testCompile("junit:junit") 
} 

task wrapper(type: Wrapper) { 
    gradleVersion = '1.11' 
} 
+0

Вы должны показать свою сборку конфигурацию. Без log4j явно на пути к классам ваш 'log4j.properties' будет проигнорирован. –

+0

Да Я добавил папку ресурсов в качестве исходной папки, и в ней есть log4j.properties. –

ответ

-1

Вы должны добавить perfLog Appender к rootLogger так, что ведение журнала по умолчанию сообщения выходить в этот файл. Первая строка файла log4j.properties следует читать:

log4j.rootLogger = WARN , stdout, perfLog 
+0

По-прежнему не получилось. Может быть, глупая ошибка, но слишком долго изобилует. –

13

Вы spring-boot-starter-web как прямую зависимость и не использует log4j для входа, так log4j не на вашем пути к классам. Вам нужно будет исключить spring-boot-starter-logging и включить spring-boot-starter-log4j (например, здесь https://github.com/spring-projects/spring-boot/blob/master/spring-boot-samples/spring-boot-sample-actuator-log4j/pom.xml#L36 - это Maven, но если вы знаете Gradle, вы можете понять, как сделать то же самое).

<dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-actuator</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-log4j</artifactId> 
    </dependency> 

Gradle эквивалент:

dependencies { 
    compile 'org.codehaus.groovy:groovy' 
    compile ('org.springframework.boot:spring-boot-starter-web'){ 
    exclude module: 'org.springframework.boot:spring-boot-starter-logging' 
    } 
    compile ('org.springframework.boot:spring-boot-starter-log4j') 
} 

(. Благодаря тому, кто писал, что в качестве редактирования)

+0

Спасибо, что это сработало. Я написал эквивалент градиента, и он сработал. –

+0

Это не сработало для меня. Мне на самом деле пришлось удалить slf4j из стартера log4j2! compile ('org.springframework.boot: spring-boot-starter-log4j2') {\t исключить группу: 'org.apache.logging.log4j', module: 'log4j-slf4j-impl'} – szxnyc

+0

Спасибо за отзыв @szxnyc - Это сработало для меня. –

1

У меня была такая же проблема, и за исключением пружинной загрузки стартера лесозаготовительной, Logback, log4j -over-slf4j и добавила Spring-boot-starter-log4j для меня.

compile("org.springframework.boot:spring-boot-starter-web"){ 
    exclude module: "org.springframework.boot:spring-boot-starter-logging" 
    exclude module: "logback-classic" 
    exclude module: "log4j-over-slf4j" 
} 

compile group: "org.springframework.boot", name: "spring-boot-starter-log4j", version: "1.3.8.RELEASE" 
0

Я использую Gradle 4.4.1, и, по-видимому

compile('org.springframework.boot:spring-boot-starter-web'){ 
    exclude module: 'org.springframework.boot:spring-boot-starter-logging' 
} 

не исключает пружинный загрузочное стартер-протоколирование по умолчанию, но

compile('org.springframework.boot:spring-boot-starter-web'){ 
    exclude module: 'spring-boot-starter-logging' 
} 

исключит его.

Поэтому я получил это работаю с

dependencies { 
    compile ('org.springframework.boot:spring-boot-starter-web'){ 
    exclude module: 'spring-boot-starter-logging' 
    } 
    compile ('org.springframework.boot:spring-boot-starter-log4j2') 
} 
Смежные вопросы