zoukankan      html  css  js  c++  java
  • log4j的使用 与 父接口 slf4j 门面模式(外观模式)

    log4j的使用

    添加日志记录的目的在于:
    【1】监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析工作
    【2】跟踪代码运行时轨迹,作为日后审计的依据
    【3】担当集成开发环境中的调试器的作用,向文件或控制台打印代码的调试信息


    Log4j 是 Apache 的一个开放源代码项目,通过使用 Log4j ,我们可以控制日志信息输送的目的地是控制台、文件、 GUI 组件、甚至是套接口服务器、 NT 的事件记录器、 UNIX Syslog 守护进程等
    另外还有一个log4j2的日志框架
    log4j一般都是采用log4j.properties来配置的(键值对),也可以用xml配置

    log4j是apache实现的一个开源日志组件。(Wrapped implementations)
    logback同样是由log4j的作者设计完成的,拥有更好的特性,用来取代log4j的一个日志框架。是slf4j的原生实现。(Native implementations)

    1、slf4j提供各种抽象接口,日志应该基于slf4j的API进行日志打印,这样无论迁移到那个项目,只需要配一个实现类log4j or logback,都能正常打印日志
    2、slf4j的实现类不能有多个,不然冲突
    3、如果项目中有直接引用log4j的,可以加入log4j-over-slf4j,把旧的日志log4j适配到slf4j,这时候,再使用logback就可以了。


    不可直接使用日志系统(log4j,logback)中的api,而应依赖使用日志框架slf4j中的api,使用门面模式的日志框架,有利于维护和各个类的日志处理方式统一。


    Logger 变量为啥使用 static 和 final 修饰
    最重要的就是性能好。这就是static和final的好处咯。

    private Logger log = LoggerFactory.getLogger(this.getClass());

    --
    private static final Logger log = LoggerFactory.getLogger(this.getClass());
    log.error("识别结果为空 ");

    ----
    aop日志中也是采用这个
    private Logger logger = LoggerFactory.getLogger(ArchivesLogAspect.class);

    就像前面介绍的几种日志框架一样,每一种日志框架都有自己单独的API,要使用对应的框架就要使用其对应的API,这就大大的增加应用程序代码对于日志框架的耦合性。

    为了解决这个问题,就是在日志框架和应用程序之间架设一个沟通的桥梁,对于应用程序来说,无论底层的日志框架如何变,都不需要有任何感知。只要门面服务做的足够好,随意换另外一个日志框架,应用程序不需要修改任意一行代码,就可以直接上线。


    错误的
    private final Logger logger = Logger.getLogger(getClass());
    public Logger log=Logger.getLogger(SaveCrmsInfo.class);
    private final Logger logger = Logger.getLogger(getClass());

  • 相关阅读:
    C#异步和多线程以及Thread、ThreadPool、Task区别和使用方法
    C# LINQ查询表达式用法对应Lambda表达式
    C# WPF 通过委托实现多窗口间的传值
    C# WPF 父控件通过使用可视化树找到子控件
    OpenCV打开摄像头闪退问题
    C#调用pyd
    微信支付(JSAPI、小程序)开发流程记录
    在安装pymysql遇到的问题
    个人理解的python的面向对象
    关于python3.4 MD5
  • 原文地址:https://www.cnblogs.com/smallwangmusk/p/11333700.html
Copyright © 2011-2022 走看看