一、基础知识

  Log4j有三个重要组件:Logger-日志信息的级别,appenders-日志信息的输出目的地,layouts-日志信息的输出格式。

  Logger-日志信息的级别:level 是日志记录的优先级,分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者自定义的级别。Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG。通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。比如在这里定义了INFO级别,只有等于及高于这个级别的才进行处理,则应用程序中所有DEBUG级别的日志信息将不被打印出来。ALL:打印所有的日志,OFF:关闭所有的日志输出。

  appenders-日志信息的输出目的地:指定了日志将打印到控制台还是文件中。

  • ConsoleAppender(控制台)
  • FileAppender(文件)
  • DailyRollingFileAppender(每天产生一个日志文件)
  • RollingFileAppender(文件大小到达指定尺寸时产生一个新的文件)
  • WriteAppender(将日志信息以流格式发送到任意指定的地方)
  • JDBCAppender(将日志信息保存到数据库中)

  layouts-日志信息的输出格式:控制了日志信息的显 示内容。

  • %c 输出日志信息所属的类的全名
  • %d 输出日志时间点的日期或时间,比如:%d{yyyy-MM-dd HH:mm:ss },输出类似:2019-05-29 09:20:21
  • %f 输出日志信息所属的类的类名
  • %l 输出日志事件的发生位置,即输出日志信息的语句处于它所属类的第几行
  • %m 输出代码中指定的信息,如log(error)中的error
  • %n 输出一个回车换行符,具体符合当前操作系统回车换行符
  • %p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
  • %r 输出自应用启动到输出该日志信息所耗费的毫秒数
  • %t 输出产生该日志事件的线程名
  • %x 输出和当前线程相关的NDC(嵌套诊断环境)
  • %F 输出日志消息产生时所在的文件名称
  • %% 输出一个“%”字符

  log4j支持两种配置文件格式,一种是XML标准通用标记语言下的一个应用)格式的文件,一种是Java特性文件log4j.properties(键=值)。

    log4j.properties文件作为配置文件说明:

 log4j.rootLogger = debug,Console,D,E

 log4j.appender.Console = org.apache.log4j.ConsoleAppender
log4j.appender.Console.Target = System.out
log4j.appender.Console.layout = org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern = [%p] %d{yyyy-MM-dd HH:mm:ss,SSS} [ %t:%l] - %m%n log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = E://logs/log.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File =E://logs/error.log
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
  ①、配置根Logger
  Logger 负责处理日志记录的大部分操作。
  其语法为:
  log4j.rootLogger = [ level ] , appenderName, appenderName, …
  level 是日志记录的优先级,前面有介绍。
 
  ②、配置日志信息输出目的地 Appender
  Appender 负责控制日志记录操作的输出。
  其语法为:
log4j.appender.appenderName = fully.qualified.name.of.appender.class
log4j.appender.appenderName.option1 = value1

log4j.appender.appenderName.optionN = valueN
  这里的appenderName为在①里定义的,可任意起名。
  其中,Log4j提供的appender有以下几种:
  org.apache.log4j.ConsoleAppender(控制台),
  org.apache.log4j.FileAppender(文件),
  org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),
  org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),可通过log4j.appender.R.MaxFileSize=100KB设置文件大小,还可通过  log4j.appender.R.MaxBackupIndex=1设置为保存一个备份文件
  org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
  例如:log4j.appender.stdout=org.apache.log4j.ConsoleAppender
  定义一个名为stdout的输出目的地,ConsoleAppender为控制台。
 
  ③、配置日志信息的格式(布局)Layout
  Layout 负责格式化Appender的输出。
  其语法为:
log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class
log4j.appender.appenderName.layout.option1 = value1

log4j.appender.appenderName.layout.optionN = valueN
  其中,Log4j提供的layout有以下几种:
  org.apache.log4j.HTMLLayout(以HTML表格形式布局),
  org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
  org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
  org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
 
二、配置log4j
  1、导入log4j包依赖包
<!-- https://mvnrepository.com/artifact/log4j/log4j -->
<dependency>
  <groupId>log4j</groupId>
  <artifactId>log4j</artifactId>
  <version>1.2.17</version>
</dependency>

  2、定义日志输出的格式和内容。(支持两种方法:xml或者properties)

  xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>
<appender name="Console" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%p] %d{yyyy-MM-dd HH:mm:ss,SSS} [ %t:%l] - %m%n"/>
</layout>
</appender>
<appender name="D" class="org.apache.log4j.DailyRollingFileAppender">
<param name="file" value="E://logs/log.log"/>
<param name="append" value="false"/>
<param name="threshold" value="debug"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n"/>
</layout>
</appender>
<appender name="E" class="org.apache.log4j.DailyRollingFileAppender">
<param name="file" value="E://logs/error.log"/>
<param name="append" value="false"/>
<param name="threshold" value="error"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%%-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n"/>
</layout>
</appender>
<logger name="e" additivity="true">
<level value="error"/>
<appender-ref ref="E"/>
</logger>
<logger name="d" additivity="true">
<level value="debug"/>
<appender-ref ref="D"/>
</logger>
<root>
<level value="debug"/>
<appender-ref ref="Console"/>
<appender-ref ref="D"/>
<appender-ref ref="E"/>
</root>
</log4j:configuration>

  properties:

 log4j.rootLogger = debug,Console,D,E

 log4j.appender.Console = org.apache.log4j.ConsoleAppender
log4j.appender.Console.Target = System.out
log4j.appender.Console.layout = org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern = [%p] %d{yyyy-MM-dd HH:mm:ss,SSS} [ %t:%l] - %m%n log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = E://logs/log.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File =E://logs/error.log
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n

  

  3、初始化log4j(没有仔细分析,后续有了更深认识再补上)

  初始化log4j有3种方法:
  • BasicConfigurator.configure():该方法进行log4j的简单初始化,给root logger添加一个ConsoleAppender,同时PatternLayout设置为“%-4r [%t] %-5p %c %x - %m%n“,日志级别设置为debug。

  • PropertyConfigurator.configure ( String configFilename) :读取使用键值对编写的配置文件。

  • DOMConfigurator.configure ( String filename ) :读取XML形式的配置文件。

  

  4、使用log4j

  对每个需要记录日志的类,通过Logger.getLogger方法和传递一个字符串(通常是该类的全名)获取一个Logger对象。该Logger对象通过被定义为static final。

  假如在包com.xxx下有一个类X,以下三种表达式都是可行相同的:

  Logger.getLogger(“com.xxx.X”);

  Logger.getLogger(X.class.getName());

  Logger.getLogger(X.class);

参考:https://juejin.im/entry/585d1f36da2f6000658485ee

   https://blog.csdn.net/u013870094/article/details/79518028

   https://baike.baidu.com/item/log4j/480673?fr=aladdin#2

   https://blog.csdn.net/u011781521/article/details/55002553

log4j(一)的更多相关文章

  1. 利用log4j+mongodb实现分布式系统中日志统一管理

    背景     在分布式系统当中,我们有各种各样的WebService,这些服务可能分别部署在不同的服务器上,并且有各自的日志输出.为了方便对这些日志进行统一管理和分析.我们可以将日志统一输出到指定的数 ...

  2. org.apache.log4j.Logger详解

    org.apache.log4j.Logger 详解 1. 概述 1.1. 背景 在应用程序中添加日志记录总的来说基于三个目的 :监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析工 ...

  3. (转)配置Log4j(很详细)

    来自:http://blog.csdn.net/yttcjj/article/details/37957317 Log4J的配置文件(Configuration File)就是用来设置记录器的级别.存 ...

  4. Log4j记录日志步骤

    记录日志对调试Bug很有帮助  亲身体会 个人习惯用Log4J,大家可以在apache网站:jakarta.apache.org/log4j 可以免费下载到Log4j最新版本的软件包. Log4j支持 ...

  5. log4j:ERROR Failed to rename [/log/xxx.log] to [/log/xxx.log.2016-11-23.log]

    Log4j报错: log4j:ERROR Failed to rename [/log/xxx.log] to [/log/xxx.log.2016-11-23.log] google了一下发现是个b ...

  6. 项目自动化建构工具gradle 入门2——log4j输出helloWorld

    上一章节呢,有一个能跑的程序了.但是对做工程的人来说,用日志输出感觉比用System.out要有档次一点.比如使用log4j.直接上例子: 1进入D:\work\gradle\log目录  ,您电脑没 ...

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

    转自:http://www.blogjava.net/daiyongzhi/archive/2014/04/13/412364.html common-logging是apache提供的一个通用的日志 ...

  8. Log4j配置详解(转)

    一.Log4j简介 Log4j有三个主要的组件:Loggers(记录器),Appenders (输出源)和Layouts(布局).这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出.综合使 ...

  9. log4j+mybatis打印数据库日志

    参考文献:一:http://blog.csdn.net/rangqiwei/article/details/50825090 二:http://www.mybatis.org/mybatis-3/zh ...

  10. log4j分离日志输出 自定义过滤 自定义日志文件

    普通的log4j.properties 定义: ### set log levels ### log4j.rootLogger = debug,D,E ## Disable other log log ...

随机推荐

  1. #3 working with data stored in files && securing your application

    This chapter reveals that you can use files and databases together to build PHP application that waa ...

  2. java集群技术

    序言 越来越多的关键应用运行在J2EE(Java 2, Enterprise Edition)中,这些诸如银行系统和账单处理系统需要高的可用性(High Availability, HA),同时像Go ...

  3. 使用vue+webpack的多页面架构(转+自己的情况)

    按以下步骤可正常配置多页面架构 记得安装 node-glob   安装命令:npm install node-glob --save-dev 文件附加 webpack.base.conf.js --参 ...

  4. Asp.net自定义控件开发任我行(1)-笑傲江湖

    1.引言 参加工作5个月了,来到一家小公司,有几只老鸟带我,但不是我公司的,几个礼拜才来一次.来到公司做的第一个项目是web项目,里面有很多的重复代码,页面代码都是千篇一律,你这人也太水了吧,垃圾代码 ...

  5. 50、转自知乎上android开发相见恨晚的接口

      原文链接:http://www.zhihu.com/question/33636939     程序员软件开发Android 开发JavaAndroid修改 Android开发中,有哪些让你觉得相 ...

  6. 【Container With Most Water】cpp

    题目: Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, a ...

  7. IOS开发学习笔记036-UIScrollView-循环自动滚动

    实现scrollView的自动循环滚动,需要实现几个方法. 其中scrollView中始终保存三张图片,其他的图片在滚动到时再进行加载. 循环的实现主要是在setUpdate 中,如果索引为0是第一个 ...

  8. phpmyadmin4.8.1后台getshell

    phpmyadmin4.8.1后台getshell 包含文件进行getshell 姿势: ① 建立数据库的,新建表,字段名为一句话木马. 会生成对应的数据库文件,相应文件的路径查看 select @@ ...

  9. CSU-2046: sequence

    CSU-2046: sequence Description 给出一个长度为N的正整数序列a,你有两种变换操作: 1.把数列中的某个数乘 2. 2.把数列中的所有数减 1. 现在你需要通过最少的变换操 ...

  10. web访问流程

    客户端发送请求—->httpd得到请求—->httpd解析请求的格式(html,css,jsp)—->请求相应的PHP解析—->PHP解析程序执行完毕—–>db(数据库) ...