• 关于JAVA日志


    虽然工作有一年了,做了好几个项目,但是对于日志这一块还只局限于拷贝配置文件,对于实现细节和灵活使用都还不会,主要的原因还是以前一直没有重视,在经历了好几个项目以后越发的觉得日志的重要性了。所以这几天都花点时间去研究一下日志这一块

    1.log4j

     最主要的三个概念:

    • loggers:负责采集日志信息。
    • appenders:负责将日志信息发布到不同地方。
    • layouts:负责以各种风格格式化日志信息

      Logger 对象

      最上一层是 Logger 对象,该对象负责获取日志信息,并存储于一个分层的命名空间之中

       Layout 对象

      Layout 层提供了用于以各种风格格式化日志信息的对象,在发布日志信息之前,它为 appender 对象提供支持。

      Layout 对象对于发布日志信息非常重要,它使日志变得可读、可复用。

      Appender 对象

      该对象位于分层架构中的较低一层,Appender 对象负责将日志信息发布到不同目的地,比如数据库、文件、控制台、Unix Syslog 等。

      Level 对象

      Level 对象定义了日志信息的粒度和优先级。API 定义了七种级别:OFF、DEBUG、INFO、ERROR、WARN、FATAL、ALL。

      Filter 对象

      Filter 对象用来分析日志信息,进而决定该条日志是否被记录。

      一个 Appender 对象可对应多个 Filter 对象,当日志信息传给 Appender 对象时,与其关联的所有 Filter 对象需要判断是否将日志信息发布到目的地。

      ObjectRenderer

      ObjectRenderer 对象负责为传入日志框架的不同对象提供字符串形式的表示,Layout 对象使用该对象来准备最终的日志信息。

      LogManager

      LogManager 对象管理日志框架,它负责从系统级的配置文件或类中读取初始配置参数。

      log4j的配置:

         1.将配置文件log4j.properties拷贝到classpath下面
         2.设置Log4j.rootLogger=level,appender1,appender2,

         3.日志等级: 

    • TRACE
    • DEBUG
    • INFO
    • WARN
    • ERROR
    • FATAL
    • ALL

      Appender有下面这些:

    • AppenderSkeleton
    • AsyncAppender
    • ConsoleAppender
    • DailyRollingFileAppender
    • ExternallyRolledFileAppender
    • FileAppender
    • JDBCAppender
    • JMSAppender
    • LF5Appender
    • NTEventLogAppender
    • NullAppender
    • RollingFileAppender
    • SMTPAppender
    • SocketAppender
    • SocketHubAppender
    • SyslogAppender
    • TelnetAppender
    • WriterAppender

    Appender一般是这样设置的:

    log4j.appender.Console=org.apache.log4j.ConsoleAppender
    log4j.appender.Console.layout=org.apache.log4j.PatternLayout
    log4j.appender.Console.layout.ConversionPattern=%d %-5p [%c{5}] - %m%n

    其实就是设置Appender的各种属性,对于不同的Appender,可以看api进行属性的设置

    下面是log4j的几遍文章:

    http://wiki.jikexueyuan.com/project/log4j/sample-program.html

    http://www.cnblogs.com/ITEagle/archive/2010/04/23/1718365.html

    http://www.cnblogs.com/ArtsCrafts/archive/2013/06/07/log4j8.html

     2016/10/08添加:

    今天在处理一个很老的项目的时候 想要看一下sql打印的情况  但是无论怎么修改log4j.properties  就是不能够显示任何的日志  除了tomcat的日志  就只有一句

    Initializing Spring FrameworkServlet 'springServlet'
    

     这样让我很诧异  后来仔细一看连这句话估计也是tomcat打印的,我没有跟代码,初步估计可能是因为spring的log使用的类加载器是继承tomcat的。这些还是小事,最主要的是为何无论怎么配置日志都不能出现,后来查日志看到说我绑定了多个slf4j的实现,我以为把多个实现改成一个就可以了  但是还是太天真了, 最后翻看mybatis的官网 这样说:

    不少应用服务器的classpath中已经包含Commons Logging,如Tomcat和WebShpere, 所以MyBatis会把它作为具体的日志实现。记住这点非常重要。这将意味着,在诸如 WebSphere的环境中——WebSphere提供了Commons Logging的私有实现,你的Log4J配置将被忽略。 这种做法不免让人悲催,MyBatis怎么能忽略你的配置呢?事实上,因Commons Logging已经存 在了,按照优先级顺序,Log4J自然就被忽略了!不过,如果你的应用部署在一个包含Commons Logging的环境, 而你又想用其他的日志框架,你可以通过在MyBatis的配置文件mybatis-config.xml里面添加一项setting(配置)来选择一个不同的日志实现。
    
    <configuration>

    ok 现在只要在mybatis-config.xml  添加一个配置就可以啦!

  • 相关阅读:
    基本技能训练之线程
    关于UEditor的使用配置(图片上传配置)
    PAT 乙级练习题1002. 写出这个数 (20)
    codeforces 682C Alyona and the Tree DFS
    codeforces 681D Gifts by the List dfs+构造
    codeforces 678E Another Sith Tournament 概率dp
    codeforces 680E Bear and Square Grid 巧妙暴力
    codeforces 678D Iterated Linear Function 矩阵快速幂
    codeforces 679A Bear and Prime 100 交互
    XTUOJ 1248 TC or CF 搜索
  • 原文地址:https://www.cnblogs.com/zr520/p/5885139.html
Copyright © 2020-2023  润新知