java日志系列(logback common-loging slf4j)—— log4j

java日志是开发过程中一个绕不过的坎,优雅的日志是开发一个优秀系统必不可少的。java日志组件有很多种,比如经常用到的log4j。

却一直没有对java日志系列进行一个系统的学习与整理。本文将详细整理java日志系列组件。

1.从零开始

日志记录是应用程序运行中必不可少的一部分。具有良好格式和完备信息的日志记录可以在程序出现问题时帮助开发人员迅速地定位错误的根源。

就像我们在简单代码里加入System.out.println();是一样的。我们需要看到一些输出来让我们看到这个程序正在跑着。当然,如果程序出现问题,我们也需要一些输出来

告诉我们,程序挂了,我们更想知道的是程序挂在哪个地方了。当程序比较复杂,运行时间比较长的时候,我们可能需要记录程序运行过程中发生过的事件,便于我们在程序

出现问题的时候去查找历史记录从而发现问题。总之,日志在程序开发过程中是非常重要的。

2.log4j

log4j的重要性不言而喻。很多java开发人员的第一次日志应用就给了log4j。代码是程序员最好的交流方式,话不多说直接上。

 1 package com.lf.testLog4j;
 2
 3 import org.apache.log4j.Logger;
 4
 5 /**
 6  * Created by lufei3 on 2015/7/5.
 7  */
 8 public class HelloLog4j {
 9     private static Logger logger = Logger.getLogger(HelloLog4j.class);
10
11     /**
12      * @param args
13      */
14     public static void main(String[] args) {
15         // System.out.println("This is println message.");
16
17         // 记录debug级别的信息
18         logger.debug("This is debug message.");
19         // 记录info级别的信息
20         logger.info("This is info message.");
21         // 记录error级别的信息
22         logger.error("This is error message.");
23     }
24 }

再看输出:

像System.out.println();一样把信息打印在了控制台。

这就是log4j的主要功能,很简单吧,当然,要实现这样简单的功能还有两个必不可少的步骤

(1).引入log4j的包。不多说,通过maven管理,或者自行下载引入皆可。

(2).添加log4j.perporties或者log4j.xml配置文件。内容如下:

log4j.perporties,这个配置文件非常简单的展示了log4j的配置信息。它表明把日志信息以简单的SimpleLayout格式展示到控制台。就向上图所示那样。

#可以设置级别:debug>info>error
#debug:显示debug、info、error
#info:显示info、error
#error:只error
log4j.rootLogger=debug,appender1
#log4j.rootLogger=info,appender1
#log4j.rootLogger=error,appender1

#输出到控制台
log4j.appender.appender1=org.apache.log4j.ConsoleAppender
#样式为TTCCLayout
log4j.appender.appender1.layout=org.apache.log4j.SimpleLayout

不过如果只是这样的话你就太小看log4j了,它还有许多其他的功能,下面log4j.xml给出了详细的配置

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">  

    <!--输出方式:输出到控制台-->
    <appender name="myConsole" class="org.apache.log4j.ConsoleAppender">
    <!--
     设置通道名称和输出方式,其中输出方式appender有5种,分别为
      org.apache.log4j.RollingFileAppender
     org.apache.log4j.ConsoleAppender (控制台)
     org.apache.log4j.FileAppender (文件)
     org.apache.log4j.DailyRollingFileAppender (每天产生一个日志文件)
     org.apache.log4j.WriterAppender (将日志信息以流格式发送到指定地方)
     -->
    <param name="Target" value="System.out"/>
    <param name="Threshold" value="INFO"/>
    <!--
      Threshold是个全局的过滤器,他将把低于所设置的level的信息过滤不显示出来
     -->  

    <!-- 设置日志输出的格式-->
    <layout class="org.apache.log4j.PatternLayout">  

    <!-- 有多种格式
    1. org.apache.log4j.HTMLLayout  HTML样式
    2. org.apache.log4j.TTCCLayout
    3. org.apache.log4j.SimpleLayout   简单样式
    4. org.apache.log4j.PatternLayout  自定义样式

       其中自定义样式可以自己定义输出的内容和格式,参数都以%开始后面不同的参数代表不同的格式化信息:
       %c  输出所属类的全名,可在修改为 %d{Num} ,Num类名输出的范围
       如:"org.apache.elathen.ClassName",%C{2}将输出elathen.ClassName    

      %d  输出日志时间其格式为 %d{yyyy-MM-dd HH:mm:ss,SSS},可指定格式 如 %d{HH:mm:ss}   

      %l  输出日志事件发生位置,包括类目名、发生线程,在代码中的行数  

       %n  换行符   

       %m  输出代码指定信息,如info(“message”),输出message   

      %p  输出优先级,即 FATAL ,ERROR 等   

       %r  输出从启动到显示该log信息所耗费的毫秒数   

       %t  输出产生该日志事件的线程名-->  

      <!-- The default pattern: Date Priority [Category] Message\n -->
      <param name="ConversionPattern" value="%d{ABSOLUTE} %-5p [%c{1}] %m%n"/>
    </layout>
  </appender>  

  <!--输出方式是:每天一个日志文件-->
  <!--设置通道名称是:file,输出方式DailyRollingFileAppender-->
  <appender name="myFile" class="org.apache.log4j.DailyRollingFileAppender">
  
    <!--日志文件路径和文件名称 ConsoleAppender(控制台)

FileAppender(文件)

DailyRollingFileAppender(每天产生一个日志文件)

RollingFileAppender(文件大小到达指定尺寸时产生一个新的文件)

WriteAppender(将日志信息以流格式发送到任意指定的地方)

JDBCAppender(将日志信息保存到数据库中)
-->
    <!-- 加../在logs,加/在C盘,不加在bin目录 -->
    <!--
      如果在加载时设置了变量System.setProperty("WebApp", appRoot),
       可在此取出来${WebApp} -->
    <param name="File" value="../logs/mylog.log"/>  

    <!-- 设置是否在重新启动服务时,在原有日志的基础添加新日志 -->
    <param name="Append" value="true"/>  

    <!-- Rollover at midnight each day -->
    <!-- e.g. mylog.log.2009-11-25.log -->
    <param name="DatePattern" value="‘.‘yyyy-MM-dd‘.log‘"/>  

    <!-- Rollover at the top of each hour
    <param name="DatePattern" value="‘.‘yyyy-MM-dd-HH‘.log‘"/>
    -->  

    <layout class="org.apache.log4j.PatternLayout">  

      <!--
        The default pattern: Date Priority [Category] Message\n
      -->
      <param name="ConversionPattern" value="%d %-5p [%c] %m%n"/>

      <!--
        The full pattern: Date MS Priority [Category] (Thread:NDC) Message\n -->
      <!--
      <param name="ConversionPattern" value="%d %-5r %-5p [%c] (%t:%x) %m%n"/>
       -->
    </layout>
  </appender>
  <appender name="ERROR_LOG" class="org.apache.log4j.DailyRollingFileAppender">
      <errorHandler class="org.apache.log4j.helpers.OnlyOnceErrorHandler"/>
      <param name="File" value="error.log"/>
      <param name="Append" value="true"/>
      <!-- 指定日志输出级别 -->
      <param name="Threshold" value="INFO"/>
      <param name="DatePattern" value="‘.‘yyyy-MM-dd‘.log‘"/>
      <layout class="org.apache.log4j.PatternLayout">
      <param name="ConversionPattern" value="%d %-5p [%c] %m%n"/>
      </layout>
   </appender>
    <!--
        level:是日记记录的优先级,优先级由高到低分为
          OFF ,FATAL ,ERROR ,WARN ,INFO ,DEBUG ,ALL。
          Log4j建议只使用FATAL ,ERROR ,WARN ,INFO ,DEBUG这四个级别。
     -->  

    <!-- 指定logger的设置,additivity指示是否叠加输出log,如果是false,
      在DsErrorLog logger中日志不会被其它logger满足条件的logger(比如root)
     输出
    -->
    <!-- 将名称为DSErrorLog的logger,输出到“EEROR_LOG”的appender
         所谓logger的名字也就是,在定义Logger时,构造函数的参数
          Logger log = Logger.getLogger("DSErrorLog");
    -->
    <logger name="DSErrorLog" additivity="false">
        <level class="org.apache.log4j.Level" value="DEBUG"/>
        <appender-ref ref="ERROR_LOG"/>
    </logger>  

   <!--
      输出指定类包中的日志,比如想输出
       Hibernate运行中生成的SQL语句,可作如下设置
    -->
   <category name="org.hibernate.SQL">
     <priority value="DEBUG"/>
      <!--
          如果指定一个appender,这些log将被输出到指定的appender
          如:<appender-ref ref="myFile"/>
          否则将作用于所有的appender
       -->
   </category>  

     <!--
       根默认会自动构建一个 root,输出INFO级别的日志到控制台,供logger继承
      -->
     <root>
         <priority value ="INFO"/>
         <appender-ref ref="myConsole"/>
         <appender-ref ref="myFile"/>
    </root>
</log4j:configuration>  

为了增加效率我们通常会增加判断

// 记录debug级别的信息
if (logger.isDebugEnabled()) {
    logger.debug("This is debug message from Dao.");
}

// 记录info级别的信息
if (logger.isInfoEnabled()) {
    logger.info("This is info message from Dao.");
}

// 记录error级别的信息
logger.error("This is error message from Dao.");

至此应当可以开log4j这台车了,至于车子的内部构造,日后再深入研究。

时间: 2024-10-07 01:08:04

java日志系列(logback common-loging slf4j)—— log4j的相关文章

Java日志组件logback使用:加载非类路径下的配置文件并设置定时更新

Java日志组件logback使用:加载非类路径下的配置文件并设置定时更新 摘自: https://blog.csdn.net/johnson_moon/article/details/78874499 2017年12月22日 16:20:29 阅读数:868 标签: javalogback日志配置文件logback-xm 更多 个人分类: Java日志 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/johnson_moon/article/d

【转】java日志组件介绍(common-logging,log4j,slf4j,logback )

common-logging common-logging是apache提供的一个通用的日志接口.用户可以自由选择第三方的日志组件作为具体实现,像log4j,或者jdk自带的logging, common-logging会通过动态查找的机制,在程序运行时自动找出真正使用的日志库.当然,common-logging内部有一个Simple logger的简单实现,但是功能很弱.所以使用common-logging,通常都是配合着log4j来使用.使用它的好处就是,代码依赖是common-loggin

java日志组件介绍(common-logging,log4j,slf4j,logback)

common-logging common-logging是apache提供的一个通用的日志接口.用户可以自由选择第三方的日志组件作为具体实现,像log4j,或者jdk自带的logging, common-logging会通过动态查找的机制,在程序运行时自动找出真正使用的日志库.当然,common-logging内部有一个Simple logger的简单实现,但是功能很弱.所以使用common-logging,通常都是配合着log4j来使用.使用它的好处就是,代码依赖是common-loggin

转:java日志组件介绍(common-logging,log4j,slf4j,logback )

原网址:http://www.blogjava.net/daiyongzhi/archive/2014/04/13/412364.html common-logging common-logging是apache提供的一个通用的日志接口.用户可以自由选择第三方的日志组件作为具体实现,像log4j,或者jdk自带的logging, common-logging会通过动态查找的机制,在程序运行时自动找出真正使用的日志库.当然,common-logging内部有一个Simple logger的简单实现

Java日志体系 —— logback

1.1 简介 师出同门,与log4j一样,logback也是由Ceki Gülcü开发的开源日志组件,可以说是log4j的改进版:在现如今的项目中,logback的出现次数越来越多,是目前主流首选的日志记录工具. 1.2 logback结构 logback分成三个模块:logback-core,logback- classic,logback-access. logback-core提供了logBack的核心功能,是另外两个组件的基础: logback-classic模块实现了SLF4J API

Java日志框架-logback的介绍及配置使用方法(转)

说明:内容估计有些旧,2011年的,但是大体意思应该没多大变化,最新的配置可以参考官方文档. 一.logback的介绍 Logback是由log4j创始人设计的又一个开源日志组件.logback当前分成三个模块:logback-core,logback- classic和logback-access.logback-core是其它两个模块的基础模块.logback-classic是log4j的一个改良版本.此外logback-classic完整实现SLF4J API使你可以很方便地更换成其它日志

java日志组件介绍(common-logging,log4j,slf4j,logback )

common-logging common-logging是 apache提供的一个通用的日志接口.用户可以自由选择第三方的日志组件作为具体实现,像log4j,或者jdk自带的logging, common-logging会通过动态查找的机制,在程序运行时自动找出真正使用的日志库.当然,common-logging内部有一个Simple logger的简单实现,但是功能很弱.所以使用common-logging,通常都是配合着log4j来使用.使用它的好处就是,代码依赖是 common-logg

java日志系列(三)log4j 2

Log4j1.x已经被广泛应用到各个系统及框架中.然后,1.x毕竟太古老,代码很久没有更新.目前,Log4j 1.x的代码已经很难维护,因为它依赖于很多Jdk老版本的api.作为 Log4j 1.x的替代品,SLF4J/Logback已经对日志系统做了很大的改进,那么,为什么我们还需要Log4j 2? 1. Log4j 2被设计成对安全审计有用的日志框架.在Logback框架中,当输出日志产生异常时,从来不会告诉被调用方,而log4j 2,这个将是可配置的. 2. Log4j 2使用了新一代的基

0002 - Java 日志从入门到实战

日志和异常处理结合得当的话,会给项目维护带来非常大的价值. 日志:就是介绍一个过程和经历的详细记录. 项目日志:就是项目开发过程的详细记录,一般由项目经理记录. 代码里的日志:就是程序员记录某个开发过程的详细情况,这是项目里每个程序员需要做的工作. 代码里的日志在项目中扮演着非常重要的角色,日志记录的详细程度决定系统是否容易维护,Java 项目中日志记录的框架有很多,在项目中如何选型也必将困惑. 我们这场 chat 讨论的主题就是:Java代码里的日志,主要是写给 Java 程序员看的,本篇 C