log4j学习

合集下载

log4j文件切分规则

log4j文件切分规则

log4j文件切分规则一、引言log4j是一个Java日志框架,方便开发者记录应用程序的运行日志并进行管理。

在使用log4j时,我们可以通过配置文件来定义日志的输出方式和切分规则。

本文将重点讨论log4j文件切分规则。

二、按文件大小切分在日志文件的切分规则中,按文件大小切分是最常见的一种方式。

通过配置log4j,我们可以设置一个文件的最大大小,当该文件达到最大大小时,log4j会自动将其备份,并创建一个新的日志文件来记录日志。

这种方式可以确保每个日志文件不会过大,方便查阅和管理。

三、按日期切分除了按文件大小切分,log4j还支持按日期切分日志文件。

通过设置切分的时间间隔,log4j会在指定的时间点自动将当前日志文件备份,并创建一个新的日志文件来记录后续的日志信息。

这种方式可以按照日期来管理日志文件,方便按照时间段进行查阅。

四、按文件数量切分除了按文件大小和日期切分,log4j还支持按文件数量切分日志文件。

通过设置切分的文件数量,当日志文件数量达到指定值时,log4j会自动将最早的日志文件备份,并创建一个新的日志文件来记录新的日志信息。

这种方式可以保持日志文件数量的稳定,避免文件过多导致管理困难。

五、动态切分规则在log4j中,我们可以通过配置动态切分规则来灵活地管理日志文件。

例如,我们可以根据业务需求,定义不同的切分规则,如按照不同的模块或日志级别进行切分。

这样可以根据具体的需求来管理日志文件,使日志信息更加有意义和可读性。

六、配置示例下面是一个示例的log4j配置文件,展示了如何设置文件切分规则:```log4j.rootLogger=INFO, filelog4j.appender.file=org.apache.log4j.RollingFileAppenderlog4j.appender.file.File=/path/to/log/file.loglog4j.appender.file.MaxFileSize=10MBlog4j.appender.file.MaxBackupIndex=10yout=org.apache.log4j.PatternLayoutyout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n```在上述配置中,我们定义了一个名为file的appender,它是一个RollingFileAppender。

log4j 漏洞原理

log4j 漏洞原理

log4j 漏洞原理
log4j是一个流行的日志框架,它提供了丰富的日志输出方式和配置选项。

然而,最近爆出了一个严重的漏洞,被命名为
log4shell,它允许攻击者远程执行任意代码,甚至获取系统权限。

该漏洞的原理是利用 log4j 的 JNDI 功能,通过构造特殊的日志消息,在服务器上触发 JNDI 查询并加载远程服务器上的恶意代码。

攻击者可通过控制恶意服务器上的代码,获取系统权限或执行任意命令,造成极大的危害。

受影响的版本包括 log4j 2.0-beta9 至 2.14.1,建议尽快升级至最新版本。

同时,可以通过禁用 JNDI 功能或限制 JNDI 查询的范围等方式,降低风险。

该漏洞已被广泛利用,各大厂商也纷纷发布了安全补丁。

作为开发者和系统管理员,我们需要及时关注并采取相应措施,确保系统安全。

- 1 -。

Log4j配置最全说明

Log4j配置最全说明

Log4j配置最全说明1. log4j 的配置文件Log4j 支持两种配置文件格式,一种是 XML 格式的文件,一种是Java 特性文件 lg4j.properties (键 = 值)。

1.1. log4j configuration scripts in properties formatlg4j.properties 文件作为作为常用的配置文件的方法如下:配置根 LoggerLogger 负责处理日志记录的大部分操作。

其语法为:log4j.rootLogger = [ level ] , appenderName, appenderName, … 其中, level 是日志记录的优先级,分为 OFF 、 FATAL 、 ERROR 、WARN 、 INFO 、 DEBUG 、 ALL 或者自定义的级别。

Log4j 建议只使用四个级别,优先级从高到低分别是 ERROR 、 WARN 、INFO 、 DEBUG 。

通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。

比如在这里定义了 INFO 级别,只有等于及高于这个级别的才进行处理,则应用程序中所有 DEBUG 级别的日志信息将不被打印出来。

ALL: 打印所有的日志, OFF :关闭所有的日志输出。

appenderName 就是指定日志信息输出到哪个地方。

可同时指定多个输出目的地。

Appender配置日志信息输出目的地 Appender 负责控制日志记录操作的输出。

其语法为:log4j.appender.appenderName =.of.appender.classlog4j.appender.appenderName.option1 = value1log4j.appender.appenderName.optionN = valueN其中, 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 设置为保存一个备份文件。

log4j基本使用方法

log4j基本使用方法

log4j是一个非常强大的log记录软件,下面我们就来看看在项目中如何使log4j。

首先当然是得到log4j的jar档,推荐使用1.2.X版,下载地址:/log4j/1.2/download.html我们先看一个最简单的示例:【示例1】项目结构:【注:由于这里的多个项目公用一个jar档,我们可以创建一个专门放置jar档的Java工程,然后将jar档放到lib目录下。

在要使用的工程中按图所示进行引用】Java代码:Java代码1package com.coderdream.log4j;23import org.apache.log4j.Logger;45public class HelloLog4j {67private static Logger logger = Logger.getLogger(HelloLog4j.class);89/**10* @param args11*/12public static void main(String[] args) {13// System.out.println("This is println message.");1415// 记录debug级别的信息16logger.debug("This is debug message.");17// 记录info级别的信息("This is info message.");19// 记录error级别的信息20logger.error("This is error message.");21}22}配置文件log4j.properties:Properties代码23#可以设置级别:debug>info>error24#debug:显示debug、info、error25#info:显示info、error26#error:只error27log4j.rootLogger=debug,appender128#log4j.rootLogger=info,appender129#log4j.rootLogger=error,appender13031#输出到控制台32log4j.appender.appender1=org.apache.log4j.ConsoleAppender33#样式为TTCCLayoutyout=org.apache.log4j.TTCCLayout输出结果:Console代码35[main] DEBUG com.coderdream.log4j.HelloLog4j - This is debug message.36[main] INFO com.coderdream.log4j.HelloLog4j - This is info message.37[main] ERROR com.coderdream.log4j.HelloLog4j - This is error message. 通过配置文件可知,我们需要配置3个方面的内容:1、根目录(级别和目的地);2、目的地(控制台、文件等等);3、输出样式。

log4j

log4j
设置日志消息的初始级别 设置日志信息是否立即输出, 默认为true 设置操作类型 System.out 默认值 System.err
FileAppender Threshold ImmediateFlush File
设置日志消息的初始级别 设置日志信息是否立即输出,默认为true 设置输出的文本 默认值是true,新增文件内容是否覆盖原 有内容,false为覆盖
org.apache.log4j.PatternLayout 可以灵活地指定布局模式 ConversionPattern=%m%n :指定怎样格式化指定的消息.
占位符参考log4j API
org.apache.log4j.SimpleLayout
包含日志信息的级别和信息字符串,内 置的简单布局没有提供自定义设置 包含日志产生的时间,线程,类别等等 信息
Append
DailyRollingFileAppender DatePattern的格式符 的格式符 Threshold '.'yyyy-MM
设置日志消息的初始级别 每月
#在配置文件中设置: '.'yyyy-ww 每周 ImmediateFlush 设置日志信息是否立即输出,默认为true #设置为每月输出 log4j.appender.MyAppenderName.DatePattern = '.'yy-MM '.'yyyy-MM-dd 每天 //在程序中使用 设置输出的文本 File //设置为每月输出 '.'yyyy-MM-dd-a 每天两次 myFile. setDatePattern ("'.true,新增文件内容是否覆盖原 '.'yyyy-MM-dd-HH 每小时 有内容,false为覆盖

log4j的原理

log4j的原理

log4j的原理log4j是一个Java编程语言的日志记录框架,它是Apache软件基金会的一个项目。

log4j的主要目的是为应用程序提供一种简单灵活的方法来记录日志。

它支持多个输出方式,可以将日志信息输出到控制台、文件、数据库等不同的目标。

以下是log4j的原理。

1. Logger:log4j的核心组件是Logger,它负责记录日志信息。

Logger对象用于应用程序中,通过它可以创建不同的记录器。

记录器是log4j的实例,主要用于记录特定类或特定模块的日志信息。

2. Appender:Appender是Logger的附加组件,它用于指定日志信息的输出目标。

log4j支持多种Appender,包括ConsoleAppender(输出到控制台)、FileAppender(输出到文件)、JDBCAppender(输出到数据库)等。

通过配置文件,可以指定将日志信息输出到一个或多个Appender。

3. Layout:Layout用于指定日志记录的格式。

log4j提供多种Layout,包括简单的文本格式、HTML格式、XML格式等。

通过配置文件,可以选择适合自己需求的Layout,并将其与Appender关联起来。

4. Level:Level用于定义日志信息的严重程度。

log4j提供6种Level,从低到高分别是TRACE、DEBUG、INFO、WARN、ERROR和FATAL。

通过配置文件,可以为每个Logger指定不同的Level。

当日志信息的Level高于或等于Logger的Level时,才会被记录。

5. Filter:Filter用于过滤日志信息。

log4j支持多种Filter,包括DenyAllFilter(拒绝所有日志信息)、LevelRangeFilter(限制日志级别范围)、StringMatchFilter(匹配字符串过滤器)等。

通过配置文件,可以为每个Logger指定一个或多个Filter,用于过滤不符合条件的日志信息。

log4j中logger标签中additivity属性的用法说明

log4j中logger标签中additivity属性的用法说明

log4j中logger标签中additivity属性的⽤法说明⽬录log4j logger标签中additivity属性log4j.additivity⽤法和例⼦log4j logger标签中additivity属性将logger中的 additivity 属性配置为 false,则这个logger不会将⽇志流反馈到root中。

可以达到以logger中配置的appender⽅式来输出⽇志⽽其他地⽅输出的⽬的,看配置:< appender name = "DEMO" class = "com.XXXXX.RollingFileAppender" >< param name = "file" value = "${loggingRoot}/xxx.log" />< param name = "append" value = "true" />< param name = "encoding" value = "GB2312" />< param name = "threshold" value = "info" />< param name = "MaxFileSize" value = "50MB" />< param name = "MaxBackupIndex" value = "10" />< layout class = "org.apache.log4j.PatternLayout" >< param name = "ConversionPattern" value = "%d [%X{requestURIWithQueryString}] %-5p %c{2} - %m%n" /></ layout ></ appender >< logger name = "XXXX.XXXX.XXXX" additivity = "false" >< level value = "${loggingLevel}" />< appender-ref ref = "DEMO" /></ logger >root的作⽤是收集下⾯所有反馈上来的信息流并根据配置在root中appender进⾏输出,只要你在looger中配置了additivity="false",就不会反馈到root中。

log4j2中文手册

log4j2中文手册

Log4j2使用手册一.Log4j2介绍Log4j1.x 被广泛应用于应用程序,但是近年发展明显放缓,因为要维持较老java版本的使用,使得log4j1.x 的发展更困难。

而作为其代替品,slf4j/logback 做出了许多必要改进,为什么还需要log4j2? 主要有以下几个原因: (1)Log4j2被设计用作审计日志框架, log4j 和logback 在重载配置时,都会丢失日志时间,而log4j2不会。

Logback中appenders中的异常对于应用来说是不可见的,log4j2可以配置异常向应用渗透。

(2)Log4j2 包含基于LMAX Disruptor library的下一代无锁Asynchronous Loggers ,在多线程环境下,Asynchronous Loggers 相比slf4j / logback 提高了10倍以上的吞吐量,并且有着更低的延时。

(3)Log4j2的插件机制,使得在不需要修改框架的情况下,通过添加 Appenders, Filters, Layouts, Lookups 轻松扩展框架。

(4)简单的插件配置,无需指定具体类名即可在configuration 中配置插件。

(5)支持自定义日志级别,可以在代码或者configuration 中自定义日志级别。

(6)支持lambda表达式,java8的应用可以在请求日志级别启用时使用lambda表达式懒构建一个日志消息,不需要显示的日志级别检查,使得代码更简洁。

(7)支持消息对象,消息允许支持有趣和复杂的结构,传递到日志记录系统,并且可以高效的操作。

用户可以自由创建消息类型和编写Layouts, Filters and Lookups 来操作这些消息。

(8)Log4j1在Appenders 上支持Filters。

logback增加了TurboFilters,允许在日志事件在处理前进行过滤。

Log4j2可以配置Filters 在Logger后者Appender 前运行。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

log4j如同Hadoop一样,把需要的jar包(hadoop.jar )和配置文件,放到CLASSPATH中,配置Log4j也要如此,把log4j-1.2.8.jar,log4j.properties放到classpath中。

配置文件配置的是Log输出到哪里,如何输出,何时输出,哪些类的log要输出(等级)(Where,How,When,Who)代码中用到的 private final Log log = LogFactory.getLog(getClass());得到类的全名,Log4j框架就会去找相应的package是否有设置输出log,以及它的等级。

如果等级为DEBUG那么log.isDebugEnabled()为true。

如下所示,如果等级为INFO,那么log.isInfoEnabled()、log.isWarnEnabled()、log.isErrorEnabled()这三个为true,其他的为false?(有待确认)等级可分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL,如果配置OFF则不打出任何信息,如果配置为INFO这样只显示INFO, WARN, ERROR的log信息,而DEBUG信息不会被显示,具体讲解可参照第三部分定义配置文件中的logger。

if (log.isDebugEnabled()){log.debug("111");}if (log.isInfoEnabled()){("222");}完整的文章如下:在强调可重用组件开发的今天,除了自己从头到尾开发一个可重用的日志操作类外,Apache为我们提供了一个强有力的日志操作包-Log4j。

Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。

最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。

此外,通过Log4j其他语言接口,您可以在C、C++、.Net、PL/SQL程序中使用Log4j,其语法和用法与在Java程序中一样,使得多语言分布式系统得到一个统一一致的日志组件模块。

而且,通过使用各种第三方扩展,您可以很方便地将Log4j集成到J2EE、JINI甚至是SNMP应用中。

说明:下面分为三部分,第一部分讲解如何配置log4j;第二部分为对log4j.properties配置文件中的各个属性的讲解;第三部分为对log4j的详细讲解。

如果只想配置上log4j,那么只需要看前两个部分就可以,如果想对log4j深入了解,则还需看第三部分。

一、Log4j配置第一步:加入log4j-1.2.8.jar到lib下。

第二步:在CLASSPATH下建立log4j.properties。

内容如下:1 log4j.rootCategory=INFO, stdout , R23 log4j.appender.stdout=org.apache.log4j.ConsoleAppender4 yout=org.apache.log4j.PatternLayout5 yout.ConversionPattern=[QC] %p [%t] %C.%M(%L) | %m%n67 log4j.appender.R=org.apache.log4j.DailyRollingFileAppender8 log4j.appender.R.File=D:\\Tomcat 5.5\\logs\\qc.log9 yout=org.apache.log4j.PatternLayout10 yout.ConversionPattern=%d-[TS] %p %t %c - %m%n1112 .neusoft=DEBUG13 .opensymphony.oscache=ERROR14 .sf.navigator=ERROR15 mons=ERROR16 .apache.struts=WARN17 .displaytag=ERROR18 .springframework=DEBUG19 .ibatis.db=WARN20 .apache.velocity=FATAL2122 .canoo.webtest=WARN2324 .hibernate.ps.PreparedStatementCache=WARN25 .hibernate=DEBUG26 .logicalcobwebs=WARN第三步:相应的修改其中属性,修改之前就必须知道这些都是干什么的,在第二部分讲解。

第四步:在要输出日志的类中加入相关语句:定义属性:protected final Log log = LogFactory.getLog(getClass());在相应的方法中:if (log.isDebugEnabled()){log.debug(“System …..”);}二、Log4j说明1 log4j.rootCategory=INFO, stdout , R此句为将等级为INFO的日志信息输出到stdout和R这两个目的地,stdout和R的定义在下面的代码,可以任意起名。

等级可分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL,如果配置OFF则不打出任何信息,如果配置为INFO这样只显示INFO, WARN, ERROR的log信息,而DEBUG信息不会被显示,具体讲解可参照第三部分定义配置文件中的logger。

3 log4j.appender.stdout=org.apache.log4j.ConsoleAppender此句为定义名为stdout的输出端是哪种类型,可以是org.apache.log4j.ConsoleAppender(控制台),org.apache.log4j.FileAppender(文件),org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)具体讲解可参照第三部分定义配置文件中的Appender。

4 yout=org.apache.log4j.PatternLayout此句为定义名为stdout的输出端的layout是哪种类型,可以是org.apache.log4j.HTMLLayout(以HTML表格形式布局),org.apache.log4j.PatternLayout(可以灵活地指定布局模式),org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)具体讲解可参照第三部分定义配置文件中的Layout。

5 yout.ConversionPattern= [QC] %p [%t] %C.%M(%L) | %m%n如果使用pattern布局就要指定的打印信息的具体格式ConversionPattern,打印参数如下:%m 输出代码中指定的消息%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL%r 输出自应用启动到输出该log信息耗费的毫秒数%c 输出所属的类目,通常就是所在类的全名%t 输出产生该日志事件的线程名%n 输出一个回车换行符,Windows平台为“rn”,Unix平台为“n”%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921%l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。

[QC]是log信息的开头,可以为任意字符,一般为项目简称。

输出的信息[TS] DEBUG [main] AbstractBeanFactory.getBean(189) | Returning cached instance of singleton bean 'MyAutoProxy'具体讲解可参照第三部分定义配置文件中的格式化日志信息。

7 log4j.appender.R=org.apache.log4j.DailyRollingFileAppender此句与第3行一样。

定义名为R的输出端的类型为每天产生一个日志文件。

8 log4j.appender.R.File=D:\\Tomcat 5.5\\logs\\qc.log此句为定义名为R的输出端的文件名为D:\\Tomcat 5.5\\logs\\qc.log可以自行修改。

9 yout=org.apache.log4j.PatternLayout与第4行相同。

10 yout.ConversionPattern=%d-[TS] %p %t %c - %m%n与第5行相同。

12 . neusoft =DEBUG指定com.neusoft包下的所有类的等级为DEBUG。

可以把com.neusoft改为自己项目所用的包名。

13 .opensymphony.oscache=ERROR14 .sf.navigator=ERROR这两句是把这两个包下出现的错误的等级设为ERROR,如果项目中没有配置EHCache,则不需要这两句。

15 mons=ERROR16 .apache.struts=WARN这两句是struts的包。

17 .displaytag=ERROR这句是displaytag的包。

(QC问题列表页面所用)18 .springframework=DEBUG此句为Spring的包。

24 .hibernate.ps.PreparedStatementCache=WARN25 .hibernate=DEBUG此两句是hibernate的包。

以上这些包的设置可根据项目的实际情况而自行定制。

三、log4j详解1、定义配置文件Log4j支持两种配置文件格式,一种是XML格式的文件,一种是Java特性文件log4j.properties(键=值)。

下面将介绍使用log4j.properties文件作为配置文件的方法:①、配置根LoggerLogger 负责处理日志记录的大部分操作。

相关文档
最新文档