SpringBoot'ta Oturum Açmayı Devre Dışı Bırak


118

Görünüşe göre Springboot, Tomcat ile Logback'i kullanmak için kendisini otomatik olarak yapılandırıyor. Bunu devre dışı bırakmak ve sınıf yolumda sağladığımı kullanmak istiyorum.

Aşağıdaki hata mesajı.

LoggerFactory bir Logback LoggerContext değil, ancak Logback sınıf yolunda. Logback'i veya yarışan uygulamayı kaldırın (sınıf org.slf4j.impl.SimpleLoggerFactory) [org.slf4j.impl.SimpleLoggerFactory] sınıfının nesnesi ch.qos.logback.classic.LoggerContext sınıfının bir örneği olmalıdır

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <artifactId>spring-boot-starter-parent</artifactId>
        <groupId>org.springframework.boot</groupId>
        <version>1.0.1.RELEASE</version>
    </parent>

    <groupId>com.fe</groupId>
    <artifactId>cloudapp</artifactId>
    <version>1.0.0</version>
    <name>Withinet-PaaS</name>
    <description>Develop your web applications in on our infrastructure and we will worry about administration and scalability of your app.</description>

    <properties>
        <java.version>1.7</java.version>
        <guava.version>16.0.1</guava.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    </properties>

    <dependencies>
    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-client</artifactId>
        <version>1.8</version>
    </dependency>
        <dependency>
        <groupId>com.withinet.cloudapp</groupId>
    <artifactId>slave</artifactId>
    <version>1.0.0</version>    
        </dependency>
        <dependency>
            <groupId>org.apache.wicket</groupId>
            <artifactId>wicket-core</artifactId>
            <version>6.15.0</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>4.3.0.Final</version>
        </dependency>

        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.2.4</version>
        </dependency>

        <!-- Spring Boot -->

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

        <!-- Hibernate validator -->

        <dependency>
            <groupId>javax.validation</groupId>
            <artifactId>validation-api</artifactId>
            <version>1.1.0.Final</version>


        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator-annotation-processor</artifactId>
            <version>4.1.0.Final</version>
        </dependency>

        <!-- Guava -->

        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>${guava.version}</version>
        </dependency>

        <!-- Java EE -->

        <dependency>
            <groupId>javax.inject</groupId>
            <artifactId>javax.inject</artifactId>
            <version>1</version>
        </dependency>

        <!--  Search -->
        <dependency>
            <groupId>org.apache.lucene</groupId>
            <artifactId>lucene-queryparser</artifactId>
            <version>4.8.0</version>
        </dependency>

        <!--  Security 
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>
    </dependencies>

    <build>

        <plugins>

            <!-- Spring Boot Maven -->

            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <mainClass>com.withinet.cloud.Application</mainClass>
                    <layout>JAR</layout>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

        </plugins>
    </build>
</project>

Yanıtlar:


143

Çatışmayı çözmek için hem spring-boot-starter hem de spring-boot-starter-web'e dışlama ekleyin.

<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-web</artifactId>
  <exclusions>
    <exclusion>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-logging</artifactId>
    </exclusion>
  </exclusions>
</dependency>

3
Ben bu hariç tutmaları eklerseniz alırım çünkü benim için iş yapmaz: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory.
Ariel

2
Bunu yaptığınızda, sınıf yolunuzda kendi logger'ınızı, örneğin log4j'yi sağlamanız gerekecektir. Varsayılan kaydedicileri neden uygulamanızdan hariç tutmak istiyorsunuz?
FOO

1
Her kavanozda bir 'keşif' yapmadan hangi kavanozun geri dönüşü bildirdiğini bulmanın bir yolu var mı? Ve teşekkürler! Bu bana yardımcı oldu
vivek_ganesan

4
mvn bağımlılığı: ağaç -Dverbose -Dincludes = spring-boot-starter-logging
FOO

her spring-boot-starter- * bağımlılığına bu dışlamayı eklemek zorunda kalmak büyük bir zorluktur. Görünüşe göre Gradle en azından küresel bir dışlamaya izin veriyor. Tek başına bu bile beni Maven'den geçmeyi düşündürüyor.
scottysseus

59

Gradle'da daha iyi, daha genel bir çözüm eklemek için (tüm örnekler hariç tutulacaktır):

configurations {
    all*.exclude module : 'spring-boot-starter-logging'
}

Gönderen https://docs.gradle.org/current/userguide/dependency_management.html


1
Bu benim için ve en az 7 kişi için çalışıyor. Yapılandırmanızla veya ortamınızla ilgili bir sorunun çözümüm için bir olumsuz oy olması gerektiğini düşünmüyorum (aldığım olumsuz oyların yorumunuzdan kaynaklandığını varsaydım - yanılıyorsam özür dilerim).
HankCa

1
Diğer tüm yapılandırmaları denedim, benim için çalışan tek
seçenek bu

Bu işe yaramıyor, hala görüyorumspring-boot-starter-logging
Adam Arold

40

Gradle'da bir çözüm eklemek için.

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

14

Tam spring-boot-starter-loggingmodülü hariç tutmanın gerekli olmadığını anladım . Tek gereken, org.slf4j:slf4j-log4j12modülü dışlamaktır .

Bunu bir Gradle derleme dosyasına eklemek sorunu çözecektir:

configurations {
    runtime.exclude group: "org.slf4j", module: "slf4j-log4j12"
    compile.exclude group: "org.slf4j", module: "slf4j-log4j12"
}

Daha fazla ayrıntı için bu diğer StackOverflow yanıtına bakın.


11

Bunu problemimi çözmek için seviyorum

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
        </exclusion>
    </exclusions>
</dependency>


9

Pom.xml dosyanızda spring-boot-starter-test bulun ve aşağıdaki gibi değiştirin:

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <exclusions>
            <exclusion>
                <artifactId>commons-logging</artifactId>
                <groupId>commons-logging</groupId>
            </exclusion>
        </exclusions>
        <scope>test</scope>
    </dependency>

Aşağıdaki gibi bir hatayı düzeltti:

_Caused by: java.lang.IllegalArgumentException:_ **LoggerFactory** is not a **Logback LoggerContext** but *Logback* is on the classpath.

Either remove **Logback** or the competing implementation

(_class org.apache.logging.slf4j.Log4jLoggerFactory_
loaded from file: 

**${M2_HOME}/repository/org/apache/logging/log4j/log4j-slf4j-impl/2.6.2/log4j-slf4j-impl-2.6.2.jar**).

If you are using WebLogic you will need to add **'org.slf4j'** to prefer-application-packages in WEB-INF/weblogic.xml: **org.apache.logging.slf4j.Log4jLoggerFactory**

7

Benim için çalışmaları takiben

<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>

Bununla birlikte, son yapıtta logback JAR'larını hala görüyordum (Boot'un Maven eklentisi yerine Assembly eklentisini kullanıyordu - bu yüzden aslında Boot paketiyle çalışıp çalışmadığından emin değilim)
Janaka Bandara

7

Tercih ettiğiniz kaydedicinin tam olarak ne olduğunu ve onu denemek ve kurmak için ne yaptığınızı söylerseniz yardımcı olabilir. Her neyse, Spring Boot sınıf yolundaki her neyse onunla çalışmaya çalışır, bu nedenle oturum açma istemiyorsanız sınıf yolundan çıkarın. Dokümanlarda log4j için talimatlar vardır , ancak aynı şey diğer desteklenen günlük kaydı sistemleri için de geçerlidir (slf4j, log4j veya java kullanım).


3
Slf4j kullanıyorum ve maven pom dosyamda yeniden oturum açamıyorum.
FOO

Logback olan bir slf4j logger. Belki ponponunu paylaşabilirsin?
Dave Syer

Diğer slf4j uygulamalarını açıkça göremiyorum, bu yüzden geçişli olarak geliyor olmalı. Bağımlılıkları görselleştirmek için m2e (Eclipse) veya "mvn bağımlılığı: ağaç" gibi araçları kullanabilirsiniz. Eclipse aracı ayrıca bağımlılıkları dışlamak için bir GUI'ye sahiptir (yapmanız gereken bu - bunlardan birini hariç tutun). Zaten tam bir slf4j'niz varsa (jcl köprüsü dahil) "spring-boot-starter-logging" i hariç tutmak yeterli olabilir.
Dave Syer

5

Sorunumu aşağıdaki yolla çözdüm:

compile('org.mybatis.spring.boot:mybatis-spring-boot-starter:1.3.0'){
    exclude module: 'log4j-slf4j-impl'
    exclude module: 'logback-classic'
}
compile('org.springframework.boot:spring-boot-starter-web'){
    exclude module: 'log4j-slf4j-impl'
    exclude module: 'logback-classic'
}

5

Bu benim için iyi çalıştı

configurations {
    all*.exclude module : 'spring-boot-starter-logging'
}

Ancak maven kullanıcıları için işe yaramaz . Tüm bağımlılıklarım libs.gradle içindeydi ve onları diğer dosyalarda istemedim. Yani bu sorun çözüldü ekleyerek exclude module : 'spring-boot-starter-loggingde spring-boot-starter-data-jpa, spring-boot-starter-testve önyükleme kelimesiyle hemen her şeyde.

GÜNCELLEME

Yeni projemin güncellenmesi gerekiyordu, spring-boot-starter-test1.5 ve daha eski sürümlerin sahip olmadığı ortaya çıktı spring-boot-starter-logging. 2.0'da var


5

Benim durumumda, yalnızca spring-boot-starter-loggingeserin birinden çıkarılması gerekiyordu spring-boot-starter-security.

Bu, aşağıdaki bağımlılıkları içeren yeni oluşturulmuş bir yay önyükleme 2.2.6. RELEASE projesindedir:

  • yay önyükleme marş-güvenlik
  • Yay önyükleme starterli doğrulama
  • yay çizme-marş-web
  • yay çizme-marş-testi

Koşarak mvn dependency:treeve arayarak öğrendim ch.qos.logback.

<dependencies>Benimle ilgili yaylı bot pom.xmlşuna benziyor:

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

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-validation</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <scope>runtime</scope>
        <optional>true</optional>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-configuration-processor</artifactId>
        <optional>true</optional>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
        <exclusions>
            <exclusion>
                <groupId>org.junit.vintage</groupId>
                <artifactId>junit-vintage-engine</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-test</artifactId>
        <scope>test</scope>
    </dependency>



</dependencies>

Spring-boot-starter-logging hariç tutulduktan sonra çalıştı
Prateek Mehta

4

Bunu build.gradle dosyanıza ekleyin

configurations.all {
    exclude group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat'
    exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging'
    exclude group: 'org.springframework.boot', module: 'logback-classic'
}

2

Bu hata, log4j2'yi kullanmaya çalışırken SpringBoot'ta ortaya çıktıysa, şu adımları uygulayın:

  • "ExcludeGroupIds log4j-slf4j-impl / excludeGroupIds" ekleyerek kavanozu paketleme sırasında çıkarın.
  • "Mvn bağımlı: ağaç" komutunu kullanarak hangi kitaplığın "logback-classic" e bağlı olduğunu bulun
  • Bulduğunuz her yerde onu bağımlılıktan dışlar.

Bu hata, logback log4j2 değişikliklerini geçersiz kıldığı için oluştu. Yani log4j2'yi kullanmak istiyorsanız, o zaman logback kitaplığını ve bağımlılıklarını kaldırmanız gerekir.

Umarım bu birine yardımcı olur.


2

Varsayılan günlük kaydını dışlamanın ve günlük kaydı için log4j'yi yapılandırmanın doğru yolu.

<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>

Bakınız Bahar Günlüğü - Nasıl Yapılır .


1

Netbeans IDE'den oturum açma için bir dışlama eklemek için

  1. Projeniz için > Projeler gezgini bölümüne erişin
  2. Aşağıda görüntülendiği gibi > Bağımlılıklar'a gidin
  3. 'Spring-boot-starter-logging-XXXjar' izleme
  4. Akü üzerine sağ tıklayın ve aşağıda gösterildiği gibi Bağımlılığı Hariç Tut'u seçin . Bu, pom.xml'deki logback jar dosyasını bu şekilde hariç tutar;

      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-logging</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    

görüntü açıklamasını buraya girin


1

Benim durumumda aşağıdaki dışlama işe yarıyor !!

    <dependency>
        <groupId>com.xyz.util</groupId>
        <artifactId>xyz-web-util</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

1

Hariç tutma eklemek benim için yeterli değildi. Sahte bir kavanoz sağlamam gerekiyordu:

    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <scope>system</scope>
        <systemPath>${project.basedir}/empty.jar</systemPath>
    </dependency>

1

Bunun nedeni, yay önyüklemesinin varsayılan günlük yapılandırması olarak logback ile birlikte gelmesidir, oysa camel log4j kullanır. Çatışmanın nedeni bu. Yukarıdaki cevaplarda belirtildiği gibi yaylı önyüklemeden logback'i kaldırmak veya log4j'yi deveden kaldırmak olmak üzere iki seçeneğiniz vardır.

<dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-spring-boot-starter</artifactId>
            <version>${camel.version}</version>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

0

Sadece sınıf yolunuza logback.xml yapılandırmasını ekleyin ve tüm yapılandırmanızı kök ekleyici eklenmiş olarak ekleyin. Spring boot, fasulye yüklemesini tamamladığında, yapılandırmanıza bağlı olarak günlük tutmaya başlayacaktır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.