【情感问答】出轨男狠打怀孕女

小说:【情感问答】出轨男狠打怀孕女作者:杜成辛北更新时间:2019-03-25字数:37109

事实上通天是三清当中最孤傲冷傲的,但是也是最重感情的,看他对自己截教的弟子之看重照顾就知道了,有严师风范也有老师为弟子遮风挡雨的担当,他对截教的看重并不是将这个教派当成是自己争夺气运的工具。

所有的暗恋其实都是明恋

李虎当即摆手道:“民爷,您这可是折杀我了。您想听我的看法,我直说便是。实不相瞒,我走的是杜家的门路。上次杜川之所以敢找我谋害民爷,也正是这个原因。”
“我告诉你怎么出去!”纪太虚说道:“不过你要把骷髅塔跟妙法莲花给我,这样我才会告诉你!”

不一会儿,那个侍从少将过来,客客气气的对他说的:“会见结束了,跟我回去吧!”

java生产的各种框架(如spring等)里各个框架会使用不同的日志体系,多个不同日志在一个jvm里混搭会出现一定问题 ,这里梳理一下java体系里常见的日志框架,以SFL4j为中心介绍下跟各个日志框架的关系,介绍下生产环境如何打理各种日志框架。

1. 接口简介

在java的体系里,主要有slf4j和common-logging两种日志体系接口。实现的框架有很多,主流的诸如logback、log4j等。

 当然,虽然都是接口,但两者也可以通过桥接包实现相互的日志代理输出。

 

 

common-logging挂载的日志实现常为log4j。在初始化的时候,如果没有特殊指定要挂载谁,会自动按上图顺序去实例化实现,log4jLogger封装了log4j的logger,打印日志的时候调用到log4j过去。

2. SLF4j 的桥接和被桥接

slf4j作为一个接口定义,底层可以有很多实现框架,同时也可以支持别的日志实现或者框架打到sfl4j上。它的实现是基于不同的桥接包。

2.1 slf4j的桥接

 

slf4j作为接口定义,下面有很多种实现。实现原理是获取ILoggerFactory时执行初始化,初始化过程绑定实现对象:load出所有实现StaticLoggerBinder的类,然后获取他的单例,后面执行getLogger的时候都是调用这个单例类的方法获取对应有具体实现日志功能的Logger对象。如果有多个实现,之后绑定其中的一个。这种情况需要排除掉不需要的日志实现类。

2.2 slf4j的被桥接

上图展示了其他日志系统如何接入到slf4j日志体系,其中基本原理是针对各自日志体系做了代理 ,输出到了sfl4j接口中,具体实现可以去看桥接包的实现。基本都是对原日志体现做了重新实现,然后底层实际调用日志输出的方法是走到了slf4j上面 。

只有jul是个例外,因为是java自带jdk实现,没法去重新那些类,这个地方根据jul的handler扩展机制实现了一个slf4j的handler然后把日志写到slf4j上面。同时要生效的话,还要修改jre/lib/logging.properties把新的handler配置到.handlers属性中。一般生产不会去这么搞。

2.3 应用

实际项目应用的时候要注意,桥接和被桥接的包不能同时出现,不然会出现死循环了,比如sfl4j既桥接了log4j又被log4j桥接,那log4j输出调用会指向slf4j,slf4j又指向log4j如此循环。一定要注意排除掉无用的包。

生产建议:slf4j-api下挂载的实现只保留logback,上层的日志打印桥接可以存在都指向到slf4j。

参考如下依赖,其他关于log的包统统排掉:

<dependencies>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.24</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.1</version>
</dependency>

<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>1.7.14</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>log4j-over-slf4j</artifactId>
<version>1.7.24</version>
</dependency>

<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jul-to-slf4j</artifactId>
<version>1.7.7</version>
</dependency>
</dependencies>

  

3. 测试代码实现及pom

 测试代码

public class TestLoggers {

    /**
     * slf4j-api -->slf4j-log4j12 -> log4j
     */
    public void testSfl4jUpLog4j(){
        org.slf4j.Logger logger = LoggerFactory.getLogger(TestLoggers.class.getName());
        logger.info("Slf4j print use log4j");
    }

    /**
     * slf4j-api --> slf4j-jcl --> common-logging-api (自动向log4j)--> log4j
     */
    public void testSlf4j2CommonLogging(){
        org.slf4j.Logger logger = LoggerFactory.getLogger(TestLoggers.class.getName());
        logger.warn("Slf4j print to common logging");
    }

    /**
     * log4j-over-slf4j--> slf4j-api--> logback-classic
     */
    public void testLog4j2Slf4j(){
        org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger(TestLoggers.class.getName());
        logger.info("Log4j print to slf4j");
    }

    /**
     * jcl-over-slf4j --> sfl4-api-->logback
     */
    public void testCommonLogging2Sl4j(){
        Log log = LogFactory.getLog(TestLoggers.class.getName());
        log.info("common log to slf4j");
    }

    /**
     * jul(console default)-->jul-to-slf4j-->slf4j-->logback
     * 要在jre/lib/logging.properties 中.handlers添加org.slf4j.bridge.SLF4JBridgeHandler
     */
    public void testJul2Slf4j(){
        java.util.logging.Logger logger = java.util.logging.Logger.getLogger(TestLoggers.class.getName());
        logger.info("jul print to slf4j");
    }

    public static void main(String[] args) {
        TestLoggers tester = new TestLoggers();
        tester.testSlf4j2CommonLogging();
    }
}

  测试maven依赖

 <dependencies>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.24</version>
        </dependency>
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging-api</artifactId>
            <version>1.1</version>
        </dependency>

        <!--<dependency>-->
            <!--<groupId>org.slf4j</groupId>-->
            <!--<artifactId>jcl-over-slf4j</artifactId>-->
            <!--<version>1.7.14</version>-->
        <!--</dependency>-->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>log4j-over-slf4j</artifactId>
            <version>1.7.24</version>
        </dependency>

        <!--<dependency>-->
            <!--<groupId>org.slf4j</groupId>-->
            <!--<artifactId>jul-to-slf4j</artifactId>-->
            <!--<version>1.7.7</version>-->
        <!--</dependency>-->


        <!--<dependency>-->
            <!--<groupId>ch.qos.logback</groupId>-->
            <!--<artifactId>logback-classic</artifactId>-->
            <!--<version>1.2.1</version>-->
        <!--</dependency>-->


        <!--<dependency>-->
            <!--<groupId>org.slf4j</groupId>-->
            <!--<artifactId>slf4j-log4j12</artifactId>-->
            <!--<version>1.7.5</version>-->
        <!--</dependency>-->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-jcl</artifactId>
            <version>1.7.24</version>
        </dependency>

    </dependencies>

  

 参考:

https://www.slf4j.org/legacy.html

https://www.cnblogs.com/chenhongliang/p/5312517.html

 

 

编辑:公徒顺成

发布:2019-03-25 04:52:00

当前文章:http://cnsdbtzg.com/news/201901/18/content_20824.html

“考试作弊”会犯法,你知道吗? 鸡汤比鸡肉更有营养吗? 【情感咨询】人至贱则无敌 孩子出生重要的前3年 被性侵的我,很讨厌家人 如何修炼一个吸引妹子的领袖型人格? 信念疗法 让你生活更积极 佛家经典禅语

22933 16890 74360 80100 39849 56370 42525 16717 40382 98749 95884 53511 37752 95170 85951 93146 14307 64037 75294 26818

我要说两句: (0人参与)

发布