一、日志框架:
工做中要进行Java输出日志时,你须要一个或者多个日志框架。框架能提供对象、方法和必要的配置来发送日志信息。Java语言自己有自带的日志实现包java.util.logging。还有不少第三方的日志框架,包括log4j、log4j 二、logback。sl4j和Apache Commons Logging提供了日志的抽象层次,经过它能够从底层的日志框架实现解耦合,从而在不一样的日志框架间切换。关于sl4j和logback的日志学习和使用能够参看好朋友的博文(https://fengmengzhao.github.io/2018/06/12/detailed-explanation-of-java-logging-framework.html)。本篇旨在让你可以轻松使用log4j日志框架。html
二、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格式和生成日志。java
--HTMLLayout布局对象
若是想生成一个HTML格式的文件,日志信息,那么可使用 org.apache.log4j.HTMLLayout 格式化日志信息。HTMLLayout类扩展抽象org.apache.log4j.Layout类,并覆盖其基类的 format()方法来提供HTML样式格式。其提供了如下信息显示:
• 生成特定的日志事件以前,从应用程序的开始所通过的时间
• 调用该记录请求的线程的名称
• 与此记录请求相关联的级别
• 日志记录器(Logger)和记录消息的名称
• 可选程序文件的位置信息,并从其中记录被调用的行号
HTMLLayout是一个很是简单的布局对象,它提供如下方法:git
setContentType(String) 设置 text/html 为 HTML内容的内容类型。默认为 text/html setLocationInfo(String) 设置位置信息记录事件。默认为 false setTitle(String) 设置为HTML文件的标题。默认值是Log4j的日志信息
简单示例:github
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 对象添加到记录器:sql
方法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的配置参数:数据库
immediateFlushapache |
标志的默认设置为true,这意味着输出流的文件被刷新,在每一个追加操做缓存 |
encodingapp |
它可使用任何字符编码。默认状况下是特定于平台的编码方案框架 |
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