Java Spring不允许删除某些日志(Mongo、Spring社交推特等)

Java Spring不允许删除某些日志(Mongo、Spring社交推特等),java,spring,logging,log4j2,spring-social-twitter,Java,Spring,Logging,Log4j2,Spring Social Twitter,大家好


大家好<在尝试了很多解决方案/测试后,我来寻求帮助

我有一个Java程序,使用SpringSocial和mongoDB。
但是,它受到了Spring和Mongo原木的污染:

[main] INFO org.springframework.context.annotation.AnnotationConfigApplicationContext - Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@2f0a87b3: startup date [Wed Mar 22 11:37:21 CET 2017]; root of context hierarchy
[main] INFO org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor - JSR-330 'javax.inject.Inject' annotation found and supported for autowiring
[main] INFO org.mongodb.driver.cluster - Cluster created with settings {hosts=[ds19220.mlab.com:19220], mode=SINGLE, requiredClusterType=UNKNOWN, serverSelectionTimeout='30000 ms', maxWaitQueueSize=500}
[cluster-ClusterId{value='58d253e1bbc0823c8d76f9ac', description='null'}-ds189220.mlab.com:19220] INFO org.mongodb.driver.connection - Opened connection [connectionId{localValue:1, serverValue:216872}] to ds189220.mlab.com:19220
[cluster-ClusterId{value='58d253e1bbc0823c8d76f9ac', description='null'}-ds189220.mlab.com:19220] INFO org.mongodb.driver.cluster - Monitor thread successfully connected to server with description ServerDescription{address=ds189220.mlab.com:19220, type=REPLICA_SET_PRIMARY, state=CONNECTED, ok=true, version=ServerVersion{versionList=[3, 2, 12]}, minWireVersion=0, maxWireVersion=4, maxDocumentSize=16777216, roundTripTimeNanos=18037014, setName='rs-ds189220', canonicalAddress=ds189220-a.mlab.com:19220, hosts=[ds189220-a.mlab.com:19220], passives=[], arbiters=[], primary='ds189220-a.mlab.com:19220', tagSet=TagSet{[]}, electionId=7fffffff0000000000000001, setVersion=1, lastWriteDate=null, lastUpdateTimeNanos=8721874212220}
[main] INFO org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor - No TaskScheduler/ScheduledExecutorService bean found for scheduled processing
[INFO ]  - ================================
[INFO ]  - STARTING MyProgram...
[INFO ]  - ================================
[INFO ]  - Running MyProgramTask
[pool-2-thread-1] INFO org.mongodb.driver.connection - Opened connection [connectionId{localValue:2, serverValue:216873}] to ds189220.mlab.com:19220
[INFO ]  - my logs....
我使用一个log4j2XML文件:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="OFF">
   <Appenders>      
      <Console name="CONSOLE" target="SYSTEM_OUT">
        <PatternLayout pattern="[%-5level] %c{1} - %msg%n" />       
      </Console>
   </Appenders>
   <Loggers>
      <Logger name="org.springframework" level="OFF" additivity="false"/>
      <Logger name="org.springframework.*" level="OFF" additivity="false"/>
      <Logger name="org.mongodb" level="OFF" additivity="false">
      <Logger name="org.mongodb.driver" level="OFF" additivity="false"/>
      <Logger name="org.mongodb.driver.cluster" level="OFF" additivity="false"/>
      <Root level="WARN">
           <AppenderRef ref="CONSOLE"/>
      </Root>
   </Loggers>
</Configuration>


我添加了我的pom.xml,也许其中有一些有趣的东西…:

<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>

<name>MyProgram</name>
<artifactId>MyProgram</artifactId>
<groupId>java.myprogram</groupId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>

<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>4.3.7.RELEASE</version>
        <exclusions>
            <exclusion>
                <groupId>commons-logging</groupId>
                <artifactId>commons-logging</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.8.7</version>
    </dependency>
    <dependency>
        <groupId>org.mongodb</groupId>
        <artifactId>mongo-java-driver</artifactId>
        <version>3.4.2</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.social</groupId>
        <artifactId>spring-social-twitter</artifactId>
        <version>1.1.2.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-mongodb</artifactId>
        <version>1.10.1.RELEASE</version>
        <exclusions>
            <exclusion>
                <groupId>commons-logging</groupId>
                <artifactId>commons-logging</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>2.8.1</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.8.1</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-simple</artifactId>
        <version>1.7.25</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.25</version>
    </dependency>

</dependencies>

<build>
    <sourceDirectory>src</sourceDirectory>
    <resources>
        <resource>
            <directory>src/main/res</directory>
        </resource>
    </resources>
    <plugins>
        <plugin>
            <groupId>com.heroku.sdk</groupId>
            <artifactId>heroku-maven-plugin</artifactId>
            <version>1.1.4</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.6.1</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>3.0.2</version>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <version>2.10</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
            <executions>
                <execution>
                    <id>copy-dependencies</id>
                    <phase>package</phase>
                    <goals>
                        <goal>copy-dependencies</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

</project>

4.0.0
我的计划
我的计划
java.myprogram
1.0-快照
罐子
org.springframework
弹簧芯
4.3.7.1发布
公用记录
公用记录
com.fasterxml.jackson.core
杰克逊数据绑定
2.8.7
org.mongodb
mongo java驱动程序
3.4.2
org.springframework.social
春季社交推特
1.1.2.1发布
org.springframework.data
spring数据mongodb
1.10.1.发布
公用记录
公用记录
org.apache.logging.log4j
log4japi
2.8.1
org.apache.logging.log4j
log4j型芯
2.8.1
org.slf4j
slf4j简单
1.7.25
org.slf4j
slf4j api
1.7.25
src
src/main/res
com.heroku.sdk
heroku maven插件
1.1.4
1.8
1.8
org.apache.maven.plugins
maven编译器插件
3.6.1
1.8
1.8
org.apache.maven.plugins
maven jar插件
3.0.2
org.apache.maven.plugins
maven依赖插件
2.10
1.8
1.8
复制依赖项
包裹
复制依赖项

如果出现以下情况,我将添加主:

import java.io.IOException;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.context.ApplicationListener;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.event.ContextStartedEvent;
import org.springframework.stereotype.Component;

import main.java.myprogram.config.AppConfig;
import main.java.myprogram.config.MongoConfig;

@Component
public class MyProgram implements ApplicationListener<ContextStartedEvent>{

    private static final Logger log = LogManager.getRootLogger();

    @SuppressWarnings("resource")
    public static void main(String[] args) {
        try {
            new AnnotationConfigApplicationContext(AppConfig.class, MongoConfig.class).start();
        } catch (Exception e){
            e.printStackTrace();
        }
    }

    @Override
    public void onApplicationEvent(ContextStartedEvent event) {
        log.info("================================");
        log.info("STARTING Myprogram...");
        log.info("================================");
    }


}
import java.io.IOException;
导入org.apache.logging.log4j.LogManager;
导入org.apache.logging.log4j.Logger;
导入org.springframework.context.ApplicationListener;
导入org.springframework.context.annotation.AnnotationConfigApplicationContext;
导入org.springframework.context.event.ContextStartedEvent;
导入org.springframework.stereotype.Component;
导入main.java.myprogram.config.AppConfig;
导入main.java.myprogram.config.MongoConfig;
@组成部分
公共类MyProgram实现ApplicationListener{
私有静态最终记录器log=LogManager.getRootLogger();
@抑制警告(“资源”)
公共静态void main(字符串[]args){
试一试{
新的注释ConfigApplicationContext(AppConfig.class,MongoConfig.class).start();
}捕获(例外e){
e、 printStackTrace();
}
}
@凌驾
ApplicationEvent(ContextStartedEvent事件)上的公共无效{
日志信息(“=======================================================”);
log.info(“正在启动我的程序…”);
日志信息(“=======================================================”);
}
}

关于log4j2,我尝试使用WARN/ERROR/OFF,但没有成功。
此外,我已经测试了使用lo4j1和java.util.Logging。。。 也许是spring的依赖关系迫使他打印日志

无论如何,即使这不是今年的问题,也非常感谢你的帮助


------------------------------------
编辑:根据@wangyuntao的说法,在JCL桥上添加了一个驱动程序后(由于Mongodb驱动程序,SLF4J),一切正常

新的pom依赖项:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.8.7</version>
</dependency>
<dependency>
    <groupId>org.springframework.social</groupId>
    <artifactId>spring-social-twitter</artifactId>
    <version>1.1.2.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-mongodb</artifactId>
    <version>1.10.1.RELEASE</version>
</dependency>

<dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>mongo-java-driver</artifactId>
    <version>3.4.2</version>
</dependency>

<!-- LOGS -->
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-jcl</artifactId>
    <version>2.8.1</version>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.8.1</version>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>2.8.1</version>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-slf4j-impl</artifactId>
    <version>2.8.1</version>
</dependency>

com.fasterxml.jackson.core
杰克逊数据绑定
2.8.7
org.springframework.social
春季社交推特
1.1.2.1发布
org.springframework.data
spring数据mongodb
1.10.1.发布
org.mongodb
mongo java驱动程序
3.4.2
org.apache.logging.log4j
log4jcl
2.8.1
org.apache.logging.log4j
log4j型芯
2.8.1
org.apache.logging.log4j
log4japi
2.8.1
org.apache.logging.log4j
log4j-slf4j-impl
2.8.1

正如spring文档所说,spring使用公共日志记录进行所有内部日志记录:

SpringBoot使用Commons日志记录所有内部日志记录,但将底层日志实现保持打开状态。为Java Util日志、Log4J2和Logback提供了默认配置。在每种情况下,记录器都预先配置为使用控制台输出,还可以使用可选的文件输出

因此,我认为应该使用log4j2Commons日志桥将spring日志路由到log4j2

Commons日志桥允许编码到Commons日志API的应用程序使用Log4j 2作为实现

用法

使用Commons日志桥非常简单。只需添加网桥jar、其他log4j2jar和Commons日志jar,所有使用Commons日志API完成的日志都将被路由到Log4j

有关更多详细信息,请参阅以下链接