log4j&&logback

记录日志好帮手

log4j

log4j参考:

入门

示例

参数详解

Log4j中有三个主要的组件,它们分别是 Logger、Appender和Layout

Log4j 允许开发人员定义多个Logger,每个Logger拥有自己的名字,Logger之间通过名字来表明隶属关系。有一个Logger称为Root,它永远 存在,且不能通过名字检索或引用,可以通过Logger.getRootLogger()方法获得,其它Logger通过 Logger.getLogger(String name)方法。

Appender则是用来指明将所有的log信息存放到什么地方,Log4j中支持多种appender,如 console、files、GUI components、NT Event Loggers等,一个Logger可以拥有多个Appender,也就是你既可以将Log信息输出到屏幕,同时存储到一个文件中。

Layout的作用是控制Log信息的输出方式,也就是格式化输出的信息。

Log4j中将要输出的Log信息定义了5种级别,依次为DEBUG、INFO、WARN、ERROR和FATAL,当输出时,只有级别高过配置中规定的 级别的信息才能真正的输出


logback

入门

配置

异步等高级特性

异步实例

AsyncAppender并不处理日志,只是将日志缓冲到一个BlockingQueue里面去,并在内部创建一个工作线程从队列头部获取日志,之后将获取的日志循环记录到附加的其他appender上去,从而达到不阻塞主线程的效果。因此AsynAppender仅仅充当事件转发器,必须引用另一个appender来做事

注意logger中name选项,资料上说是一个包/类,当其中的运行时,log.info(“”);即可记录。其实name放的就是个字符串,以.为分割层层解析。若仅用于一类,只要在使用时new的参数传入的字符串一致即可。

<?xml version="1.0" encoding="UTF-8"?>
<!-- Logback Configuration. -->
<configuration>
    ## 供开发模式下使用,把信息输出到控制台
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d %-5p %F:%L - %m%n</pattern>
             <charset>UTF-8</charset>
        </encoder>
    </appender>

    ## 应用本身以外的日志输出到文件root.log
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${alibaba_havana_club_output}/root.log</file>
        <param name="append" value="true"/>
        <append>true</append>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${alibaba_havana_club_output}/root.log.%d{yyyy-MM-dd}</fileNamePattern>
            <!-- 日志最大的历史7天 -->
            <maxHistory>7</maxHistory>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d %-5p %F:%L - %m%n</pattern>
            <charset>UTF-8</charset> <!-- 编码格式 -->
        </encoder>
    </appender>

    <appender name="OPERATOR_LOGGER" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${alibaba_havana_club_output}/operator.log</file>
        <param name="append" value="true"/>
        <append>true</append>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${alibaba_havana_club_output}/operator.log.%d{yyyy-MM-dd}</fileNamePattern>
            <!-- 日志最大的历史7天 -->
            <maxHistory>7</maxHistory>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%m%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <appender name="OUT_INVOKE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${alibaba_havana_club_output}/root.log</file>
        <param name="append" value="true"/>
        <append>true</append>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${alibaba_havana_club_output}/out_invoke.log.%d{yyyy-MM-dd}</fileNamePattern>
            <!-- 日志最大的历史7天 -->
            <maxHistory>7</maxHistory>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d %-5p %F:%L - %m%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

     <appender name ="ASYNC" class= "ch.qos.logback.classic.AsyncAppender">  

            <discardingThreshold >0</discardingThreshold>  

            <queueSize>512</queueSize>  

         <appender-ref ref ="OPERATOR_LOGGER"/>
          <charset>UTF-8</charset>
     </appender>  

    <logger name="com.alibaba.havana.club" additivity="false">
        <level value="WARN"/>
        <appender-ref ref="FILE"/>
    </logger>
    <logger name="operatorLogger" additivity="false">
        <level value="INFO" />
        <appender-ref ref="ASYNC" />
    </logger>
    <logger name="outLogger" additivity="false">
        <level value="INFO" />
        <appender-ref ref="OUT_INVOKE" />
    </logger>

    <root level="ERROR" >
        <appender-ref ref="FILE" />
    </root>
</configuration>

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-04 20:09:12

log4j&&logback的相关文章

log4j+logback+slf4j+commons-logging的关系与调试(转)

log4j+logback+slf4j+commons-logging的关系与调试 从Log4j迁移到LogBack的理由 http://www.tuicool.com/articles/beeeYvF 为什么要使用SLF4J而不是Log4J

log4j+logback+slf4j+commons-logging的关系与调试(转)

背景     由于现在开源框架日益丰富,好多开源框架使用的日志组件不尽相同.存在着在一个项目中,不同的版本,不同的框架共存.导致日志输出异常混乱.虽然也不至于对系统造成致命伤害,但是明显可以看出,架构不够精良,追求极致略有不足.     其中有一些标准通用接口,标准实现,各种桥接器的存在,下面就让笔者树立一下这些框架之间的关系. 从上图中,我们可以看到4部分. 接口:将所有日志实现适配到了一起,用统一的接口调用. 实现:目前主流的日志实现 旧日志到slf4j的适配器:如果使用了slf4j,但是只

log4j+logback+slf4j+commons-logging的关系与调试

背景     由于现在开源框架日益丰富,好多开源框架使用的日志组件不尽相同.存在着在一个项目中,不同的版本,不同的框架共存.导致日志输出异常混乱.虽然也不至于对系统造成致命伤害,但是明显可以看出,架构不够精良,追求极致略有不足.     其中有一些标准通用接口,标准实现,各种桥接器的存在,下面就让笔者树立一下这些框架之间的关系.  从上图中,我们可以看到4部分. 接口:将所有日志实现适配到了一起,用统一的接口调用. 实现:目前主流的日志实现 旧日志到slf4j的适配器:如果使用了slf4j,但是

slf4j log4j logback

最先大家写日志都用log4j,后来作者勇于创新,又搞了个logback,又为了统一江湖,来了个slf4j,所以目前在代码中进行日志输出,推荐使用slf4j,这样在运行时,你可以决定到底是用log4j还是logback,根据他们不同的配置文件就可以搞定. 基本原理就是 slf4j  -->  adator --> log, 见下图: 但是对于之前的比较老的项目,还是在用log4j输出,是否有可能将其在不改动代码的前提下转到用logback输出了? 答案是有的,去掉运行时环境中的log4j的包和配

Java日志框架SLF4J和log4j以及logback的联系和区别

1.SLF4J(Simple logging Facade for Java) 意思为简单日志门面,它是把不同的日志系统的实现进行了具体的抽象化,只提供了统一的日志使用接口,使用时只需要按照其提供的接口方法进行调用即可,由于它只是一个接口,并不是一个具体的可以直接单独使用的日志框架,所以最终日志的格式.记录级别.输出方式等都要通过接口绑定的具体的日志系统来实现,这些具体的日志系统就有log4j,logback,java.util.logging等,它们才实现了具体的日志系统的功能. 如何使用SL

从log4j日志无缝迁移至logback

logback对比log4j的有点在此就不赘述了. 由于在项目的原有代码中,大量的日志生成是通过log4j实现的,新的代码希望通过logback的方式生成日志,同时希望将老的代码在不修改的情况下直接将日志生成至logback指定配置中. log4j迁移到logback 此文中介绍了一种迁移方式,但是需要修改代码,此种迁移风险太高. <slf4j官方文档>传统桥接API 一文中介绍了使用log4j-over-slf4j.jar替代log4j.jar,通过桥接的方式将原有的日志生成至logback

为什么使用 SLF4J 而不是 Log4J 来做 Java 日志

转自:为什么使用 SLF4J 而不是 Log4J 来做 Java 日志 英文原文:Why use SLF4J over Log4J for logging in Java 每个Java开发人员都知道日志记录对Java应用的重要性,尤其是对服务端应用,而且其中许多人都已经熟悉了各种记录日志的库,比如java.util.logging,Apache的log4j,logback,然而如果你不知道SLF4J,java的简单记录日志的设计的话 ,那么到了学习并在你的项目中使用它的时候了.在这篇Java文档

Logback相关知识汇总

例如:%-4relative 表示,将输出从程序启动到创建日志记录的时间 进行左对齐 且最小宽度为4格式修饰符,与转换符共同使用:可选的格式修饰符位于“%”和转换符之间.第一个可选修饰符是左对齐 标志,符号是减号“-”:接着是可选的最小宽度 修饰符,用十进制数表示.如果字符小于最小宽度,则左填充或右填充,默认是左填充(即右对齐),填充符为空格.如果字符大于最小宽度,字符永远不会被截断.最大宽度 修饰符,符号是点号"."后面加十进制数.如果字符大于最大宽度,则从前面截断.点符号“.”后面

【java-日志组件】slf4j+logback配置及详解

文本主要介绍一下slf4j+logback在java工程中的配置,面向的读者是已经对slf4j+logback有一定了解的同学,不了解的同学,请看文章末尾的相关链接.以后会写一篇介绍slf4j框架的文章,其中会说明logback与之的关系.下面咱们进入正题. 一.基于maven的slf4j+logback pom.xml配置 <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api<