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 前运行。

log4j2 rce原理

log4j2 rce原理

log4j2 rce原理
Log4j是一个Java日志管理框架,用于生成和管理日志信息。

Log4j 2.x版本中存在一个远程代码执行(RCE)漏洞,该漏洞允许攻击者通过构造恶意的日志请求触发远程代码执行,可能导致服务器被入侵或者影响应用程序的安全性。

Log4j的RCE漏洞主要是由于Log4j使用了一种能够远程加载类的功能,被称为JNDI Lookup。

JNDI是Java命名和目录接口的一部分,它允许Java应用程序通过名称访问和获取远程对象。

攻击者可以通过恶意构造的JNDI Lookup请求来触发远程代码执行。

具体来说,攻击者可以在日志配置中使用特殊的URL 来引用一个远程服务器,然后该远程服务器返回一个恶意类实例。

当Log4j收到恶意的日志请求时,它会尝试解析配置中的URL,然后从远程服务器获取类,并执行其中的代码。

这样,攻击者就可以通过构造恶意的日志请求,来利用Log4j的远程代码执行漏洞。

攻击者可以利用远程代码执行漏洞实现远程命令执行、文件读取、文件上传等恶意操作。

通过将恶意代码作为类实例返回给Log4j并执行,攻击者可以完全控制受影响的系统。

为了防止此漏洞,建议升级到log4j的最新版本。

此外,还可
以通过禁用Log4j的JNDI Lookup功能来缓解风险,具体方法可以参考相关安全公告和建议。

log4j中文手册

log4j中文手册

Log4j手册文档版本:1.1编者:陈华联系方式:clinker@发布日期:2006年4月5日1. 简介 (1)1. 简介 (3)1.1 概述 (3)1.2 主要组件 (3)2. Logger (4)2.1 层次结构 (4)2.2 输出级别 (5)3. Appenders (7)3.1 概念说明 (7)3.2 Appender的配置 (7)3.3 Appender的添加性 (8)4. Layouts (8)4.1 概念说明 (8)4.2 Layout的配置 (9)5. 配置 (10)6. 默认的初始化过程 (13)7. 配置范例 (14)7.1 Tomcat (14)8. Nested Diagnostic Contexts (14)9. 优化 (15)9.1 日志为禁用时,日志的优化 (15)9.2 当日志状态为启用时,日志的优化 (16)9.3 日志信息的输出时,日志的优化 (16)10. 总结 (16)11. 附录 (17)11.1 参考文档 (17)11.2 比较全面的配置文件 (17)11.3 日志乱码的解决 (19)1. 简介1.1 概述程序开发环境中的日志记录是由嵌入在程序中以输出一些对开发人员有用信息的语句所组成。

例如,跟踪语句(trace),结构转储和常见的System.out.println或printf调试语句。

log4j提供分级方法在程序中嵌入日志记录语句。

日志信息具有多种输出格式和多个输出级别。

使用一个专门的日志记录包,可以减轻对成千上万的System.out.println语句的维护成本,因为日志记录可以通过配置脚本在运行时得以控制。

log4j维护嵌入在程序代码中的日志记录语句。

通过规范日志记录的处理过程,一些人认为应该鼓励更多的使用日志记录并且获得更高程度的效率。

1.2 主要组件Log4j有三个主要组件: loggers、appenders和layouts。

这三个组件协同工作,使开发人员能够根据消息类型和级别来记录消息,并且在程序运行期控制消息的输出格式位置。

log4j学习笔记--ConversionPattern参数详解-- RollingFileAppender选项

log4j学习笔记--ConversionPattern参数详解-- RollingFileAppender选项
MaxBackupIndex=2:指定可以产生的滚动文件的最大数。
ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。
Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。
实例:
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
1、rootLogger与rootCategory的区别
rootLogger是新的使用名称,对应Logger类
rootCategory是旧的使用名称,对应原来的Category类
Logger类是Category类的子类,所以,rootCategory是旧的用法,不推荐使用
2、格式参数
a)例句 : yout.ConversionPattern= [QC] %p [%t] %C.%M(%L) | %m%n
[QC]是log信息的开头,可以为任几个:
%F 输出日志消息产生时所在的文件名称。性能不好,不建议使用
%M 输出日志消息产生时所在的方法名称。性能不好,不建议使用
%x 输出和当前线程相关联的NDC(nested diagnostic context)环境,用于多客户多线程的应用中
%m 输出代码中指定的消息
%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
%r 输出自应用启动到输出该log信息耗费的毫秒数
%t 输出产生该日志事件的线程名
%n 输出一个回车换行符,Windows平台为“rn”,Unix平台为“n”
%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921

log4j level级别

log4j level级别

log4j level级别log4j是Java中非常流行的日志框架,它支持不同级别的日志记录,以便开发人员精确地控制日志输出的数量和详细程度。

本文将重点介绍log4j的级别级别。

log4j的级别级别共有7个,分别是OFF、FATAL、ERROR、WARN、INFO、DEBUG和TRACE。

级别从高到低依次排列,并具有相应的优先级。

下面我们来逐一介绍这些级别:第一个级别是OFF,它表示关闭了所有日志记录。

如果将日志级别设置为OFF,则log4j将不会记录任何日志消息。

第二个级别是FATAL,它表示严重错误的消息。

该级别适用于系统遇到致命错误时输出的信息。

如果出现FATAL级别的日志消息,则表示系统出现了无法恢复的错误。

第三个级别是ERROR,它表示错误的消息。

当程序遇到错误时,可以使用该级别输出一些错误信息,以便进行调试和修复。

第四个级别是WARN,它表示警告的消息。

如果程序遇到一些可能会导致错误的情况,可以使用该级别输出警告信息,以便进行预防和处理。

第五个级别是INFO,它表示一般信息的消息。

该级别输出的消息通常是记录程序运行状态等重要信息的。

第六个级别是DEBUG,它表示调试信息的消息。

该级别输出的消息通常是记录程序运行过程中的详细信息,以便进行调试和排除问题。

最后一个级别是TRACE,它表示跟踪信息的消息。

该级别输出的消息是最详细的,包括程序运行过程中的每个细节。

在log4j中,我们可以使用以下方式设置级别:logger.setLevel(Level.ERROR);其中,logger是一个实例化的Logger对象,Level.ERROR表示设置日志级别为ERROR,也可以设置为其他级别。

在开发过程中,我们应该根据实际情况选择适当的日志级别,以便更好地控制日志输出的数量和详细程度。

例如,在开发初期,我们可以将日志级别设置为DEBUG或TRACE,以便更好地跟踪程序运行过程中的每个细节;在发布后,我们可以将日志级别设置为INFO或WARN,以便更好地控制日志输出的数量和详细程度。

Java日志框架对比:Log4j、Logback和SLF4J的选择

Java日志框架对比:Log4j、Logback和SLF4J的选择

Java日志框架对比:Log4j、Logback和SLF4J的选择引言:在开发Java应用程序时,日志是一个非常重要的组成部分。

它可以帮助我们记录应用程序的运行状态、调试问题以及监控系统性能。

为了更好地管理和利用日志信息,我们需要选择一个适合的日志框架。

本文将对比三个流行的Java日志框架:Log4j、Logback和SLF4J,帮助读者了解它们的特点和适用场景,以便做出正确的选择。

一、Log4jLog4j是一个广泛使用的Java日志框架,它提供了强大的日志记录功能和灵活的配置选项。

Log4j具有以下几个主要特点:1. 简单易用:Log4j的API设计简单直观,容易上手。

开发人员可以通过几行代码快速集成Log4j到应用程序中,并开始记录日志。

2. 高度可配置:Log4j提供了丰富的配置选项,可以根据需求灵活地配置日志输出格式、日志级别、目标设备等。

这使得开发人员可以根据具体需求进行精细化的日志管理。

3. 强大的过滤器机制:Log4j支持多种过滤器,可以根据日志的级别、来源、内容等进行过滤,从而实现对日志信息的精确控制。

4. 多种输出方式:Log4j支持将日志输出到控制台、文件、数据库等多种目标设备,开发人员可以根据实际需求选择合适的输出方式。

尽管Log4j在过去是Java日志领域的翘楚,但它的维护和更新已经相对较少。

因此,随着时间的推移,Log4j的性能和功能可能无法满足现代应用程序的需求。

二、LogbackLogback是由Log4j的创始人开发的下一代Java日志框架,它在Log4j的基础上进行了改进和优化。

Logback具有以下几个主要特点:1. 高性能:相比于Log4j,Logback在性能上有了显著提升。

它通过精细的设计和优化,可以更高效地处理日志记录,减少对应用程序性能的影响。

2. 灵活的配置:Logback提供了与Log4j相似的配置选项,可以根据需要自定义日志输出格式、级别、目标设备等。

使用Log4j如何实现分级输出

使用Log4j如何实现分级输出

log4j日志分级输出到不同文件的配置基础:log4j的配置项说明:log4j总共有6中级别,从高到低分别为:OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定义的级别。

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

其中:DEBUG Level 指出细粒度信息事件对调试应用程序是非常有帮助的。

INFO level表明消息在粗粒度级别上突出强调应用程序的运行过程。

WARN level表明会出现潜在错误的情形。

ERROR level指出虽然发生错误事件,但仍然不影响系统的继续运行。

FATAL level指出每个严重的错误事件将会导致应用程序的退出。

ALL Level是最低等级的,用于打开所有日志记录。

OFF Level是最高等级的,用于关闭所有日志记录。

# log4j.rootLogger中配置的ERROR,表示一下配置的所有配置的级别的起点为:ERROR。

即只能显示、存储ERROR以及ERROR以上级别的日志# 若在此配置了ERROR,下边配置了INFO级别的日志要存储在指定的文件中,实际是不会存储的# 若配置INFO级别的日志存在文件1中,ERROR级别的文件,存在文件2中,# 若有个ERROR的日志的话,两个文件都是可以存储的;若有个INFO 级别的文件的话,则只有文件1会存储该日志,文件2是不会存储的日志的输出格式配置:# %m 输出代码中指定的消息#%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL #%r 输出自应用启动到输出该log信息耗费的毫秒数#%c 输出所属的类目,通常就是所在类的全名#%t 输出产生该日志事件的线程名#%n 输出一个回车换行符,Windows平台为“\r\n”,Unix平台为“\n”#%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss , SSS},输出类似:2002年10月18日22 :10 :28 ,921#%l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。

logginglevel级别介绍

logginglevel级别介绍

logginglevel级别介绍⽇志记录器(Logger)是⽇志处理的核⼼组件。

log4j具有5种正常级别(Level)。

1. static Level DEBUG :DEBUG Level指出细粒度信息事件对调试应⽤程序是⾮常有帮助的,⼀般认为⽐较重要的⽅法执⾏需要详细查看运⾏情况的则开启debug。

2. static Level INFOINFO level表明消息在粗粒度级别上突出强调应⽤程序的运⾏过程,只需要了解该⽅法是否运⾏的可以使⽤INFO3. static Level WARNWARN level表明会出现潜在错误的情形。

4. static Level ERRORERROR level指出虽然发⽣错误事件,但仍然不影响系统的继续运⾏。

⼀般异常处理等情况都需要ERROR5. static Level FATALFATAL level指出每个严重的错误事件将会导致应⽤程序的退出。

另外,还有两个可⽤的特别的⽇志记录级别:1.static Level ALL ALL Level是最低等级的,⽤于打开所有⽇志记录。

2.static Level OFF OFF Level是最⾼等级的,⽤于关闭所有⽇志记录。

⽇志记录器(Logger)的⾏为是分等级的:分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定义的级别。

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

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

⽐如在这⾥定义了INFO级别,则应⽤程序中所有DEBUG级别的⽇志信息将不被打印出来。

优先级⾼的将被打印出来。

项⽬上⽣产环境时候建议把debug的⽇志级别重新调为warn或者更⾼,避免产⽣⼤量⽇志。

以上这篇logging level级别介绍就是⼩编分享给⼤家的全部内容了,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。

springboot学习(六)springboot各版本中使用log4j2记录日志

springboot学习(六)springboot各版本中使用log4j2记录日志

springboot学习(六)springboot各版本中使⽤log4j2记录⽇志spring boot 各版本中使⽤ log4j2 记录⽇志前⾔Spring Boot中默认⽇志⼯具是logback,只不过我不太喜欢logback。

为了更好⽀持 spring boot 框架,我使⽤log4j。

spring boot 各版本与 log4j 的⽀持情况1. spring boot 1.2.X 版本spring boot 1.2.X版本⼀般建议使⽤默认⽇志⼯具(logback),也可以使⽤ log4j。

但,注意的是:Spring Boot 1.2.4.RELEASE包含⼀个bug,。

所以,当你通过application.properties定义⽇志级别时,该错误会更改⽗记录器级别,在最差情况下会更改根记录器级别。

虽然这个bug是修复在1.2.6.RELEASE,我建议⾄少使⽤1.2.8.RELEASE(如果你想坚持1.2.x)。

因为 spring boot 现在仍然在快速发展阶段,版本更新较快,有时候就会因为版本问题⽽出现各种奇奇怪怪的bug。

2. spring boot 1.3.X 版本spring boot 从 1.3.X 版本开始⽀持slf4j+log4j/log4j2。

* ⾸先,先解决为什么使⽤ SL4J Facade?对于这个问题,⽹上已经有许多精彩地点答案了,我就直接附上其中⼀篇的地址了:。

同时,附上⼀张⼯作流程图:然后,就是在⾃⼰的 springboot 项⽬中使⽤ log4j。

补充⼀下,由于⽅法⼀样,我将slf4j+log4j2放到了1.4.X版本中来应⽤。

1.创建⼀个1.3.X版本的 spring boot 项⽬(记得排除logback-classic的依赖)。

12 3 4 5 6 7 8 9 10<dependency><groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId><exclusions><exclusion><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId> </exclusion></exclusions></dependency>2.引⼊ SL4J 依赖。

log4jrefreshinterval实现原理

log4jrefreshinterval实现原理

log4jrefreshinterval实现原理1.介绍在开发过程中,我们经常会遇到需要记录日志的情况。

lo g4j是一个常用的J av a日志框架,它提供了丰富的功能来帮助我们生成和管理日志信息。

其中一个重要的配置项是r ef re sh I nt er va l,它决定了日志文件的刷新间隔。

本文将详细介绍lo g4jr efr e sh in te rv al的实现原理。

2. lo g4jrefreshinter val的作用在l og4j配置文件中,我们可以通过设置r ef re sh In te rv al来控制日志文件的刷新间隔。

r ef re sh In te rv al的值表示以毫秒为单位的时间间隔。

当re fr es hIn t er va l的值不为0时,l og4j会定期检查日志文件的变化,并在超过re f re sh In te rv al的时间后将日志写入磁盘。

这个功能非常有用,它可以确保日志文件的及时更新,同时避免频繁地写入磁盘造成性能问题。

3.实现原理l o g4jr ef re sh in ter v al的实现原理涉及到两个核心概念:F i le Ap pe nd er和Re f re s h St ra te gy。

3.1F i l e A p p e n d e rF i le Ap pe nd er是lo g4j中用于将日志写入文件的类。

当lo g4j配置文件中指定了Fi le Ap p en de r时,l og4j会创建一个Fi le Ap p en de r实例,并使用该实例将日志写入指定的文件中。

3.2R e f r e s h S t r a t e g yR e fr es hS tr at eg y是l og4j中用于控制F il eA pp en de r刷新间隔的类。

lo g4j提供了多种R ef re sh St ra te gy的实现,包括I n te rv al Re fr es hSt r at eg y、Si ze B a se d Re fr es hS tr at egy等。

详解log4j-over-slf...

详解log4j-over-slf...

详解log4j-over-slf...注:下⽂中的“桥接”、“转调”、“绑定”等词基本都是同⼀个概念。

log4j-over-slf4j和slf4j-log4j12是跟java⽇志系统相关的两个jar包,当它们同时出现在classpath下时,就可能会引起堆栈溢出异常。

异常信息⼤致如下(摘⾃slf4j官⽹⽂档):Exception in thread "main" ng.StackOverflowErrorat java.util.Hashtable.containsKey(Hashtable.java:306)at org.apache.log4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:36)at org.apache.log4j.LogManager.getLogger(LogManager.java:39)at org.slf4j.impl.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:73)at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:249)at org.apache.log4j.Category.<init>(Category.java:53)at org.apache.log4j.Logger..<init>(Logger.java:35)at org.apache.log4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:39)at org.apache.log4j.LogManager.getLogger(LogManager.java:39)at org.slf4j.impl.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:73)at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:249)at org.apache.log4j.Category..<init>(Category.java:53)at org.apache.log4j.Logger..<init>(Logger.java:35)at org.apache.log4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:39)at org.apache.log4j.LogManager.getLogger(LogManager.java:39)subsequent lines omitted...现有⽇志体系分析这个异常出现的具体原因之前,有必要先快速了解⼀下现有的Java⽇志体系。

java自定义日志输出文件(log4j日志文件输出多个自定义日志文件)

java自定义日志输出文件(log4j日志文件输出多个自定义日志文件)

java⾃定义⽇志输出⽂件(log4j⽇志⽂件输出多个⾃定义⽇志⽂件)如果在实际应⽤中需要输出独⽴的⽇志⽂件,怎样才能把所需的内容从原有⽇志中分离,形成单独的⽇志⽂件呢?先看⼀个常见的log4j.properties⽂件,它是在控制台和test.log⽂件中记录⽇志:复制代码代码如下:log4j.rootLogger=DEBUG, stdout, logfilelog4j.appender.stdout=org.apache.log4j.ConsoleAppenderyout=org.apache.log4j.PatternLayoutyout.ConversionPattern=%d %p [%c] - %m%nlog4j.appender.logfile=org.apache.log4j.RollingFileAppenderlog4j.appender.logfile.File=log/test.loglog4j.appender.logfile.MaxFileSize=128MBlog4j.appender.logfile.MaxBackupIndex=3yout=org.apache.log4j.PatternLayoutyout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p [%t] %c.%M(%L) - %m%n如果在同⼀类中需要输出多个⽇志⽂件呢?其实道理是⼀样的,先在Test.java中定义:复制代码代码如下:private static Log logger1 = LogFactory.getLog("mylogger1");private static Log logger2 = LogFactory.getLog("mylogger2");log4j.properties中配置如下:复制代码代码如下:log4j.logger.mylogger1=DEBUG,test1log4j.appender.test1=org.apache.log4j.FileAppenderlog4j.appender.test1.File=log/test1.logyout=org.apache.log4j.PatternLayoutyout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p [%t] %c.%M(%L) - %m%nlog4j.logger.mylogger2=DEBUG,test2log4j.appender.test2=org.apache.log4j.FileAppenderlog4j.appender.test2.File=log/test2.logyout=org.apache.log4j.PatternLayoutyout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p [%t] %c.%M(%L) - %m%n不同⽇志要使⽤不同的logger(如输出到test1.log的要⽤("abc"))。

浅谈log4j不打印异常堆栈

浅谈log4j不打印异常堆栈

浅谈log4j不打印异常堆栈本⽂研究的主要是log4j 不打印异常堆栈的相关内容,具体如下。

最近在线上系统的错误⽇志中发现了⼀个现象:代码⾥⽤log4j打印系统运⾏时异常堆栈信息,在错误⽇志中⽆法看到堆栈信息,只有异常信息。

这对于程序员来说是⼀个打击,没有堆栈信息何从查bug啊。

[01-15 11:29:26] [ERROR] [org.apache.thrift.server.AbstractNonblockingServer$FrameBuffer:524] Unexpectedthrowable while invoking!后来发现这个是jdk的⼀个优化。

JVM 为了性能会做优化,如果频繁的抛出某个异常,会重新编译,不再打印异常堆栈。

解决这个问题也⽐较简单,如果不想每次都去查前⾯的 log 去看堆栈,只要在启动参数加上 -XX:-OmitStackTraceInFastThrow,就可以禁⽤该优化,强制打印异常堆栈。

这样可能会导致,log ⽂件过⼤,不过产线上今天之前的 log ⽂件都会被压缩,所以感觉问题也不⼤。

[01-15 16:40:09] [ERROR] [org.apache.thrift.server.AbstractNonblockingServer$FrameBuffer:524] Unexpectedthrowable while invoking!ng.NullPointerExceptionat com.iqiyi.ttbrain.recommend.selector.services.FilterService.filter2(FilterService.java:42)at com.iqiyi.ttbrain.recommend.thrift.IFilterService$Processor$filter2.getResult(IFilterService.java:181)at com.iqiyi.ttbrain.recommend.thrift.IFilterService$Processor$filter2.getResult(IFilterService.java:166)at org.apache.thrift.ProcessFunction.process(ProcessFunction.java:39)at org.apache.thrift.TBaseProcessor.process(TBaseProcessor.java:39)at org.apache.thrift.server.AbstractNonblockingServer$FrameBuffer.invoke(AbstractNonblockingServer.java:518) at org.apache.thrift.server.Invocation.run(Invocation.java:18)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)at ng.Thread.run(Thread.java:745)总结以上就是本⽂关于浅谈log4j 不打印异常堆栈的全部内容,希望对⼤家有所帮助。

  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 负责处理日志记录的大部分操作。

相关文档
最新文档