1、日志框架:
  工作中要进行Java输出日志时,你需要一个或者多个日志框架。框架能提供对象、方法和必要的配置来发送日志信息。Java语言本身有自带的日志实现包java.util.logging。还有很多第三方的日志框架,包括log4j、log4j 2、logback。sl4j和Apache Commons Logging提供了日志的抽象层次,通过它可以从底层的日志框架实现解耦合,从而在不同的日志框架间切换。关于sl4j和logback的日志学习和使用可以参看好朋友的博文(https://fengmengzhao.github.io/2018/06/12/detailed-explanation-of-java-logging-framework.html)。本篇旨在让你能够轻松使用log4j日志框架。

2、log4j日志框架
  Log4j API设计为分层结构,其中每一层提供了不同的对象,对象执行不同的任务。这使得设计灵活,根据将来需要来扩展。Log4j的框架的核心对象即为log4j的核心组件。
Log4j框架的主要学习其:核心对象、支持对象、配置、支持的功能实现。
2.1 Log4j框架对象
2.1.1核心对象: 框架的强制对象和框架的使用,包括:
1)Logger对象:顶级层的Logger,它提供Logger对象。Logger对象负责捕获日志信息及它们存储在一个空间的层次结构。
2)LayOut布局对象:该层提供其用于格式化不同风格的日志信息的对象。布局层提供支持Appender对象到发布日志信息之前。
我们使用的PatternLayout 使用 appender。所有可能的选项有:
•    DateLayout
•    HTMLLayout
•    PatternLayout
•    SimpleLayout
•    XMLLayout
使用HTMLLayout和XMLLayout,可以在HTML和XML格式和生成日志。

--HTMLLayout布局对象
如果想生成一个HTML格式的文件,日志信息,那么可以使用 org.apache.log4j.HTMLLayout 格式化日志信息。HTMLLayout类扩展抽象org.apache.log4j.Layout类,并覆盖其基类的 format()方法来提供HTML样式格式。其提供了以下信息显示:
  •    生成特定的日志事件之前,从应用程序的开始所经过的时间
  •    调用该记录请求的线程的名称
  •    与此记录请求相关联的级别
  •    日志记录器(Logger)和记录消息的名称
  •    可选程序文件的位置信息,并从其中记录被调用的行号
HTMLLayout是一个非常简单的布局对象,它提供以下方法:

setContentType(String)
设置 text/html 为 HTML内容的内容类型。默认为 text/html setLocationInfo(String)
设置位置信息记录事件。默认为 false setTitle(String)
设置为HTML文件的标题。默认值是Log4j的日志信息

简单示例:

log4j.properties文件:
# Define the root logger with appender file
log = D\://ceshiZJB/learnLogs/log4-demo
log4j.rootLogger = DEBUG, FILE # Define the file appender
log4j.appender.FILE=org.apache.log4j.FileAppender
log4j.appender.FILE.File=${log}/htmlLayout.html # Define the layout for file appender
log4j.appender.FILE.layout=org.apache.log4j.HTMLLayout
log4j.appender.FILE.layout.Title=HTML Layout Example
log4j.appender.FILE.layout.LocationInfo=true
import java.io.*;
import java.sql.SQLException; import org.apache.log4j.Logger; public class log4jExample{
/* Get actual class name to be printed on */
static Logger log = Logger.getLogger(
log4jExample.class.getName()); public static void main(String[] args)
throws IOException,SQLException{ log.debug("Hello this is an debug message");
log.info("Hello this is an info message");
}
}

备注:一个具有HTML格式的日志文件的一大优势是,它可以被发布为网页可以远程查看。
--PatternLayout布局对象
如果想生成基于模式的特定格式的日志信息,那么可以使用 org.apache.log4j.PatternLayout 格式化日志信息。
PatternLayout类扩展抽象 org.apache.log4j.Layout 类并覆盖format()方法根据提供的模式构建日志信息。
PatternLayout也是一个简单的布局对象,它提供conversionPattern属性(设置转换模式。默认为 %r [%t] %p %c %x - %m%n),可以通过配置文件进行设置。
参看文章地址:https://www.yiibai.com/log4j/log4j_patternlayout.html
3)Appender对象:下位层提供Appender对象,Appender对象负责打印日志信息到不同的目的地,如控制台,文件,sockets,NT事件日志,数据库等,可以通过包括以下方法的配置文件,设置一个 Appender 对象添加到记录器:

方法1:log4j.logger.[logger-name]=level, appender1,appender..n
方法2:可以编写以XML格式相同的结构如下:
<logger name="com.apress.logging.log4j" additivity="false">
<appender-ref ref="appender1"/>
<appender-ref ref="appender2"/>
</logger>
方法3:如果想要添加Appender对象到程序,那么可以使用下面的方法:
public void addAppender(Appender appender);
addAppender()方法添加一个appender到Logger对象。作为示例配置演示,可以添加很多Appender对象到记录器在逗号分隔的列表,每个打印日志信息分离目的地。

日志追加到一个文件中:即写日志信息到一个文件中,必须使用org.apache.log4j.FileAppender。有以下FileAppender的配置参数:

immediateFlush

标志的默认设置为true,这意味着输出流的文件被刷新,在每个追加操作

encoding

它可以使用任何字符编码。默认情况下是特定于平台的编码方案

threshold

这个 appender 阈值级别

Filename

日志文件的名称

fileAppend

默认设置为true,这意味着记录的信息被附加到同一文件的末尾

bufferedIO

此标志表示是否需要写入缓存启用。默认设置为false

bufferSize

如果 bufferedI/O 启用,这表示缓冲区的大小,默认设置为8KB

日志追加到多个文件中:当想生成每一天的日志文件,以保持日志记录信息的良好记录。日志记录信息纳入日常的基础文件,就必须它扩展FileAppender类,并继承其所有属性useorg.apache.log4j.DailyRollingFileAppender类。除了如上所述属性,FileAppender还有一个重要的配置参数:DatePattern (这表示在滚动的文件,并按命名惯例来执行。默认情况下,在每天午夜滚动)
DatePattern控制使用下列滚动的时间表方式之一:

DatePattern

描述

'.' yyyy-MM

滚动在每个月的结束和下一个月初

'.' yyyy-MM-dd

这是默认值,每天午夜滚动

'.' yyyy-MM-dd-a

滚动每一天的午夜和中午

'.' yyyy-MM-dd-HH

滚动在每一个小时

'.' yyyy-MM-dd-HH-mm

滚动在每一个分钟

'.' yyyy-ww

滚动每个星期取决于区域设置时的第一天

简单示例:

# Define the root logger with appender file
log = D\://ceshiZJB/learnLogs/log4-demo
# Define the root logger with appender file
log4j.rootLogger = DEBUG, FILE # Define the file appender
log4j.appender.FILE=org.apache.log4j.DailyRollingFileAppender
# Set the name of the file
log4j.appender.FILE.File=${log}/log.out # Set the immediate flush to true (default)
log4j.appender.FILE.ImmediateFlush=true # Set the threshold to debug mode
log4j.appender.FILE.Threshold=debug # Set the append to false, should not overwrite
log4j.appender.FILE.Append=true # Set the DatePattern
log4j.appender.FILE.DatePattern='.' yyyy-MM-dd-HH-mm # Define the layout for file appender
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.conversionPattern=%m%n
public class log4jExample{
/* 每分钟生成日志文件
* */
static Logger log = Logger.getLogger(
log4jExample.class.getName());
static Object obj =new Object(); public static void main(String[] args)
throws IOException,SQLException, InterruptedException{ synchronized (obj) {
for(int i=0;i<350;i++){
obj.wait(1000L);
log.debug("Hello this is an debug message"+i);
//log.info("Hello this is an info message");
}
} }
}

日志存放到数据库中
参看文章地址:https://www.yiibai.com/log4j/log4j_logging_database.html#article-start

2.1.2支持对象:可选的对象执行另外重要的任务,log4j框架的其他重要的对象(支持对象)起到日志框架的一个重要作用。包括:
1)Level对象:Level对象(级别对象)用来定义任何记录信息的粒度和优先级。有记录的七个级别在API中定义:OFF, DEBUG, INFO, ERROR, WARN, FATAL 和 ALL
使用DEBUG两个追加程序。所有可能的选项有:org.apache.log4j.Level类提供以下级别,但也可以通过Level类的子类自定义级别。

Level

描述

ALL

各级包括自定义级别

DEBUG

指定细粒度信息事件是最有用的应用程序调试

ERROR

错误事件可能仍然允许应用程序继续运行

FATAL

指定非常严重的错误事件,这可能导致应用程序中止

INFO

指定能够突出在粗粒度级别的应用程序运行情况的信息的消息

OFF

这是最高等级,为了关闭日志记录

TRACE

指定细粒度比DEBUG更低的信息事件

WARN

指定具有潜在危害的情况

2)Filter过滤对象用于分析日志信息及是否应记录或是否需要根据这些信息做出进一步的决定。
  一个appender对象可以有与之关联的几个Filter对象。如:日志记录信息传递给特定Appender对象,经由 Filter对象批准后的日志信息,然后才能发布到所连接的目的地。

方法1:
private static org.apache.log4j.Logger log = Logger.getLogger(LogClass.class);
log.setLevel(Level.WARN);
方法2:
# Define the root logger with appender file
log = /usr/home/log4j
log4j.rootLogger = WARN, FILE # Define the file appender
log4j.appender.FILE=org.apache.log4j.FileAppender
log4j.appender.FILE.File=${log}/log.out # Define the layout for file appender
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.conversionPattern=%m%n

3)ObjectRenderer(对象渲染器)
  ObjectRenderer对象是一个指定提供传递到日志框架的不同对象的字符串表示。这个对象所使用的布局对象来准备最后的日志信息。
4)日志管理对象:管理日志框架。它负责从一个系统级的配置文件或配置类读取初始配置参数。

上述所有学习资料的来源均转自:https://www.yiibai.com/log4j/

学习源码和笔记可在百度网盘进行下载:https://pan.baidu.com/s/1QZ57clyQYUIOBQ5M12vIcg  pg1y

一、log4j日志框架的理论和不同场景使用的更多相关文章

  1. Slf4j+Log4j日志框架入门

    (一).日志系统介绍 slf4j,即简单日志门面(Simple Logging Facade for Java),不是具体的日志解决方案,它只服务于各种各样的日志系统.简答的讲就是slf4j是一系列的 ...

  2. Log4j日志框架小记

    人啊,总是在学习中发现不足,不足中学习,学习中成长. 今天来系统记录一下对于常用日志组件的理解.配置.使用. 仅供参考, 错误之处请各路好汉不吝笔墨批评指正. 转载请注明出处 Log4j日志框架是Ap ...

  3. SpringBoot系列之切换log4j日志框架

    SpringBoot系列之使用切换log4j日志框架 ok,在pom文件右键->Diagrams->show Dependencies....,如图,找到spring-boot-start ...

  4. log4j日志框架学习

    初识Log4j:      log4j有三个部分:           1.loggers 负责捕获日志信息.           2.appenders  负责输出信息到不同的目的地         ...

  5. Spring源码学习:第2步--使用SLF4j+Log4j日志框架替换掉其自身的commons-logging日志框架

    正如Spring官方文档所述,其底层的实现选择了commons-logging作为日志框架.这一"失足"性的选择,竟连Spring自身都抱怨.但是,谁叫Spring如此优秀呢,即使 ...

  6. Log4j日志框架学习零到壹(一)

    日志是系统开发过程中用于排查问题重要的记录.通常使用日志来记录系统运行的行为,什么时间点发生了什么 事情.Java中常用的莫过于Log4j框架了.下面主要围绕Log4j的基础知识.Log4j的使用方式 ...

  7. SpringBoot整合log4j日志框架

    Spring Boot 2.x默认使用Logback日志框架,要使用 Log4j2必须先排除 Logback. 加入修改依赖 <dependency> <groupId>org ...

  8. log4j日志框架的使用

    java.util.logging.Logger——java 中提供的日志类 实际开发 90% 都是使用 log4j 记录日志,而 Log4j 底层就是 java.util.logging.Logge ...

  9. log4J日志框架

    log4j的配置:log4j是一个日志输出框架,就是用于输出日志的,主流框架大部分都是Log4j输出.Spring框架也可以通过Log4j输出日志 Log4j提供了强大的日志输出的自定义功能(1)通过 ...

随机推荐

  1. bootstrap创建带遮罩层的进度条

    <div class="modal fade" id="loadingModal"> <div style="width: 200p ...

  2. Django Web接口开发

    什么是接口 接口一般来讲分为两种: (1)程序内部的接口:方法与方法.模块与模块之间的交互,程序内部抛出的接口,如登录发帖,发帖就必须要登录,如果不登录不能发帖,发帖和登录这两个模块之间就要有交互,就 ...

  3. 在IDEA离线安装lombok插件

    1.打开,找到自己IDEA版本,idea http://plugins.jetbrains.com/plugin/6317-lombok/versions 2.下载,导入安装

  4. PAT 1014 Waiting in Line (30分) 一个简单的思路

    这题写了有一点时间,最开始想着优化一下时间,用优先队列去做,但是发现有锅,因为忽略了队的长度. 然后思考过后,觉得用时间线来模拟最好做,先把窗口前的队列填满,这样保证了队列的长度是统一的,这样的话如果 ...

  5. 【MySQL】单表查询

    " 目录 where 约束 group by 分组查询 聚合函数 having 过滤 order by 查询排序 limit 限制查询的记录数 # 语法 select 字段1, 字段2 .. ...

  6. Windows10下修改pip源

    pip修改源 写在前面 当我们在使用pip的时候,有些时候会觉得pip安装第三方库的时候速度慢得让人抓狂,那是因为pip是从国外的网站下载东西所以呢下载速度很慢,为了方便我们下载,我们可以通过来修改p ...

  7. 从QC到QA

    QC遇到了什么无法逾越的障碍 我们公司的主要业务是项目外包,一般的项目都在2-3个月的周期,采用瀑布模式.这种模式本身是相对简单,且十分成熟的模式.但是在实际的工作中,我们还是遇到了前所未有的挑战. ...

  8. Springboot学习:日志

    介绍 市面上的日志框架: JUL.JCL.Jboss-logging.logback.log4j.log4j2.slf4j.... 日志门面 (日志的抽象层) 日志实现 JCL(Jakarta Com ...

  9. LeetCode中等题(三)

    题目一: 反转从位置 m 到 n 的链表.请使用一趟扫描完成反转. 说明:1 ≤ m ≤ n ≤ 链表长度. 示例: 输入: 1->2->3->4->5->NULL, m ...

  10. __str__()方法和__repr__()方法

    有时候我们想让屏幕打印的结果不是对象的内存地址,而是它的值或者其他可以自定义的东西,以便更直观地显示对象内容,可以通过在该对象的类中创建或修改__str__()或__repr__()方法来实现(显示对 ...