zoukankan      html  css  js  c++  java
  • 关于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  添加一个配置就可以啦!

  • 相关阅读:
    什么企业邮箱安全性高?国内哪家企业邮箱好用?
    163VIP邮箱外贸群发技巧有哪些?
    163邮箱如何群发邮件?外贸邮箱群发哪个效果好?
    登录163邮箱续费情况怎么查询?163vip邮箱怎么收费?
    Java面试题总结之Java基础(二)
    Java面试题总结之Java基础(一)
    Exception in thread "baseScheduler_QuartzSchedulerThread" java.lang.OutOfMemoryError: GC
    Maven项目报错:java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
    如何下载Github上项目源码打包到本地Maven仓库
    HTML日期时间插件
  • 原文地址:https://www.cnblogs.com/zr520/p/5885139.html
Copyright © 2011-2022 走看看