【黑马程序员】System.err 和 Log4j框架的关系详解
java log4j,logback日志总结

一:java开发常用日志概括slf4j由log4j作者Ceki开发,逐步取代apahce commons-logginglogback由log4j作者Ceki开发,逐步取代log4j。
关系:slf4j=====commons-logging*.各种日志实现的通用入口,会根据classpath中存在下面哪一个Jar来决定具体的日志实现库。
logback====log4j*.日志实现类日志管理:slf4j(commons-logging)+logback(log4j)二:logback简介1、Logback为取代log4j而生Logback是由log4j创始人Ceki Gülcü设计的又一个开源日志组件。
logback当前分成三个模块:logback-core,logback- classic和logback-access。
2、Logback的核心对象:Logger、Appender、LayoutLogback主要建立于Logger、Appender 和 Layout 这三个类之上。
Logger:日志的记录器,把它关联到应用的对应的context上后,主要用于存放日志对象,也可以定义日志类型、级别。
Logger对象一般多定义为静态常量,如:1package com.logs;23import org.slf4j.Logger;4import org.slf4j.LoggerFactory;56public class MyApp {7final static Logger logger = LoggerFactory.getLogger("MyApp.class"); 8public static void main(String[] args) {910 logger.trace("trace");11 logger.debug("debug str");12 ("info str");13 logger.warn("warn");14 logger.error("error");15 }16 }Appender:用于指定日志输出的目的地,目的地可以是控制台、文件、远程套接字服务器、 MySQL、 PostreSQL、Oracle和其他数据库、 JMS和远程UNIX Syslog守护进程等。
log4j 原理

log4j 原理log4j 是一个优秀的日志框架,它能够帮助开发人员在应用程序中方便地记录日志信息。
在实际的软件开发中,日志记录是非常重要的,它可以帮助开发人员在出现问题时快速定位并解决 bug,同时也可以帮助运维人员监控系统运行状态。
而log4j 作为一个成熟且广泛应用的日志框架,其原理和实现机制就显得尤为重要。
首先,我们来看一下 log4j 的工作原理。
log4j 的核心概念是日志级别、日志输出目的地和日志格式。
日志级别包括 DEBUG、INFO、WARN、ERROR、FATAL 等,开发人员可以根据不同的情况选择合适的日志级别进行记录。
日志输出目的地可以是控制台、文件、数据库等,开发人员可以根据实际需求配置不同的输出目的地。
而日志格式则决定了日志信息的展示形式,开发人员可以自定义日志格式,包括时间、日志级别、类名、方法名等信息。
log4j 的工作原理主要分为三个步骤,选择日志器、设置日志级别、指定日志信息输出目的地。
首先,开发人员需要选择合适的日志器,通常情况下我们会选择org.apache.log4j.Logger 作为日志器。
然后,需要设置日志级别,开发人员可以通过调用日志器的 setLevel 方法来设置日志级别。
最后,需要指定日志信息的输出目的地,开发人员可以通过配置 log4j.properties 文件来指定输出目的地。
log4j 的实现机制主要依靠两个核心组件,日志器和日志Appender。
日志器负责收集和管理日志信息,开发人员可以通过获取日志器实例来记录日志。
而日志Appender则负责将日志信息输出到指定的目的地,log4j 提供了多种不同的Appender,包括 ConsoleAppender、FileAppender、JDBCAppender 等,开发人员可以根据实际需求选择合适的 Appender。
除了核心组件外,log4j 还提供了过滤器和布局器两个重要的功能组件。
java基础(System.err和System.out)详解

java基础(System.err和System.out)详解今天偶尔看到out和err 那么我们就简单谈⼀谈!1.JDK⽂档对两者的解释:out:“标准”输出流。
此流已打开并准备接受输出数据。
通常,此流对应于显⽰器输出或者由主机环境或⽤户指定的另⼀个输出⽬标。
err:“标准”错误输出流。
此流已打开并准备接受输出数据。
通常,此流对应于显⽰器输出或者由主机环境或⽤户指定的另⼀个输出⽬标。
按照惯例,此输出流⽤于显⽰错误消息,或者显⽰那些即使⽤户输出流(变量 out 的值)已经重定向到通常不被连续监视的某⼀⽂件或其他⽬标,也应该⽴刻引起⽤户注意的其他信息。
2.out和err的⼀个区别是,out往往是带缓存的,⽽err没有缓存(默认设置,可以改)。
所以如果你⽤标准出错打印出来的东西可以马上显⽰在屏幕,⽽标准输出打印出来的东西可能要再积累⼏个字符才能⼀起打印出来。
如果你在应⽤中混⽤标准输出和标准出错就可能看到这个问题。
测试代码:public class Test2 {static{System.out.println("1");}public static void main(String[] args) {System.err.println("2");new Test2();}public Test2() {System.out.println("3");}}测试结果: 1,3的位置相对不变,2的位置随机出现.尽量避免混⽤!3.如果使⽤了log4j的⽇志记录,System.err会被记⼊⽇志,System.out不会ps:打印System.err在eclipse是红⾊的。
System.out是蓝⾊的。
log4j

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为覆盖
Java开发日志分析工具Log4j使用详解

Java开发日志分析工具Log4j使用详解Log4j是一个用于记录应用程序运行时日志的Java开发工具。
它可以帮助开发人员更好地理解和监控应用程序的运行状态,以及解决潜在的问题。
下面将详细介绍Log4j的使用方法和功能。
一、Log4j的配置文件Log4j使用一个名为log4j.properties的配置文件来定义日志的输出格式、日志级别、输出目标等。
这个配置文件需要放在应用程序的classpath下,以便Log4j能够找到它并加载配置。
配置文件中的每一个配置项都有一个特定的名称和对应的值。
例如,可以使用"log4j.rootLogger"配置项来设置根日志记录器的级别,使用"log4j.appender.console"配置项来设置控制台输出的格式等。
二、Log4j的日志级别Log4j提供了多个日志级别,用于控制日志的输出。
这些日志级别按照严重程度递增,包括TRACE、DEBUG、INFO、WARN、ERROR和FATAL。
可以通过配置文件中的"log4j.rootLogger"配置项来设置根日志记录器的级别,从而决定哪些级别的日志会被记录。
三、Log4j的输出目标Log4j可以将日志输出到不同的目标,包括控制台、文件、数据库等。
可以通过配置文件中的"log4j.appender"配置项来设置输出目标。
常用的输出目标有:1. ConsoleAppender:将日志输出到控制台。
2. FileAppender:将日志输出到文件。
3. RollingFileAppender:将日志输出到滚动文件,可以设置文件的大小和数量,以便自动滚动日志文件。
4. JDBCAppender:将日志输出到数据库。
四、Log4j的日志格式Log4j可以自定义日志的输出格式。
可以通过配置文件中的"log4j.appender"配置项来设置输出格式。
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 日志内容详解
Log4j详细解1.1. 背景在应用程序中添加日志记录总的来说基于三个目的:监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析工作;跟踪代码运行时轨迹,作为日后审计的依据;担当集成开发环境中的调试器的作用,向文件或控制台打印代码的调试信息。
最普通的做法就是在代码中嵌入许多的打印语句,这些打印语句可以输出到控制台或文件中,比较好的做法就是构造一个日志操作类来封装此类操作,而不是让一系列的打印语句充斥了代码的主体。
1.2. Log4j简介在强调可重用组件开发的今天,除了自己从头到尾开发一个可重用的日志操作类外,Apache为我们提供了一个强有力的日志操作包-Log4j。
Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。
最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。
此外,通过Log4j其他语言接口,您可以在C、C+ +、.Net、PL/SQL程序中使用Log4j,其语法和用法与在Java程序中一样,使得多语言分布式系统得到一个统一一致的日志组件模块。
而且,通过使用各种第三方扩展,您可以很方便地将Log4j集成到J2EE、JINI 甚至是SNMP应用中。
Log4j有三个主要的组件:Loggers(记录器),Appenders (输出源)和Layouts(布局),这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出。
综合使用这三个组件可以轻松的记录信息的类型和级别,并可以在运行时控制日志输出的样式和位置。
下面对三个组件分别进行说明:1、LoggersLoggers组件在此系统中被分为五个级别:DEBUG、INFO、W ARN、ERROR和FATAL。
log4实现原理 -回复
log4实现原理-回复Log4j是Java语言的一个开源项目,旨在通过输出日志信息,帮助开发者进行程序的调试、问题追踪和性能分析。
本文将详细讨论Log4j的实现原理,以帮助读者更好地理解其工作原理。
首先,Log4j采用了一种基于继承的日志体系结构。
在该体系结构中,日志记录器(Logger)是层次结构的主要组件。
Logger是用于记录应用程序日志的实体,每个Logger都与一个特定的日志类别相关联。
日志类别是通过包名和类名来定义的,可以轻松地识别特定的日志记录。
Log4j提供了不同级别的日志记录,如DEBUG、INFO、WARN、ERROR 和FATAL。
每个级别都有相应的方法来记录日志。
开发者可以根据不同的需求选择适当的级别进行日志记录。
此外,Log4j还支持自定义日志级别,以便满足特定业务场景的需求。
Logger对象之间通过父子关系形成了一个层次结构。
每个Logger可以有一个或多个父Logger,称为祖先Logger。
子Logger从祖先Logger 继承日志记录的级别、附加的附加器(Appender)以及其他配置。
这种继承性使得日志系统可以在不同的层次结构中进行灵活的配置。
Log4j的输出目标由附加器(Appender)定义。
附加器负责将日志信息输出到指定的目的地,例如控制台、文件、数据库等。
Log4j提供了多个内置的附加器,可以满足各种输出需求。
此外,开发者还可以根据自己的需求自定义附加器。
Log4j还支持日志过滤器(Filter),用于进一步过滤和处理日志信息。
日志过滤器可以根据特定的条件对日志进行过滤,例如根据日志级别、包名等。
开发者可以根据自己的需求添加自定义的日志过滤器。
除了日志记录器、附加器和过滤器之外,Log4j还引入了一些辅助组件来完善其功能。
其中,最重要的是日志管理器(LogManager)。
日志管理器负责管理Logger对象,为开发者提供Logger实例并维护Logger之间的关系。
log4j配置详解
“
yout =className yout.Option1 = value1 … yout.OptionN = valueN
Appender
Appender用来规定日志输出的目的地是哪里,可以是控制台,文件,数据库等等。 常见的Appender有以下几种:
org.apache.log4j.ConsoleAppender(控制台) org.apache.log4j.FileAppender(文件) org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件) org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文 件) org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
配置Logger
“
log4j.rootLogger = [ level ] , appenderName1, appenderName2, … .apache=false # 表示示Logger不会在父父Logger的appender里里输 出,默认为true。
配置Layout
“
yout=className
常见的className如下:
org.apache.log4j.HTMLLayout(以HTML表格形式布局) org.apache.log4j.PatternLayout(可以灵活地指定布局模式) org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串) org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
log4j的使用
log4j的使用log4j是Apache的一个开源日志记录库,它支持可配置的日志记录,可以帮助开发者轻松地分析程序的性能问题。
本文将解释log4j 如何帮助开发者记录日志以及它的主要组件是什么。
首先,让我们解释log4j能够为程序员做什么。
Log4j有助于跟踪应用程序的运行信息,并将其存储到日志文件中。
它可以轻松地将日志信息分类,可以在特定等级最低的细节进行记录。
它还可以帮助开发者及时发现程序中的问题和异常。
log4j具有三个主要组件,分别是日志记录器,日志布局和日志过滤器,它们之间构成了一个完整的日志记录和处理系统。
日志记录器是log4j的核心,它负责记录程序中发生的事件,并提供各种不同等级的日志记录功能,包括输出、警告和错误。
日志布局用于定义日志消息的格式,它可以为不同的消息类别设置不同的日志输出布局,以便将相关信息可视化地呈现给用户。
最后,日志过滤器可以用来确定哪些消息需要被记录,哪些不需要。
使用log4j记录日志的第一步是创建一个log4j.properties文件,该文件用于定义log4j的配置项以及相关信息,主要包括日志记录器、日志布局、文件名、日志文件位置等。
一旦log4j.properties 文件完成,开发者只需按照该文件定义的各项设置进行日志记录即可。
log4j还支持动态配置,可以通过API调用实现。
它可以在应用程序运行期间更改配置文件,以根据应用程序的不同情况记录更详细的日志信息,这有助于开发者随时查看并优化程序的性能。
总的来说,log4j是一款强大的日志记录库,可以帮助开发者记录程序的运行日志,有助于及时发现程序中的问题和异常,从而提升程序的性能。
它支持静态配置和动态配置,使用起来十分方便。
本文介绍了log4j的主要用途和组件,以及如何使用log4j记录日志。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
【黑马程序员】System.err 和Log4j框架的关系详解经历过Java基础班的同学,我想大概都知道System类里面的两个静态常量变量,那就是in 和out,in是InputStream类型的,out是PrintStream类型的,但是大家从来没有关注过System类里面还有一个常量,那就是err,也是PrintStream类型的一个常量,那么这个err常量究竟是干什么用的呢?接下来我们一起去循序渐进的揭秘!
首先我们先在Eclipse里面写这样一个代码并执行
public class Demo {
public static void main(String[] args) {
System.out.println("HelloWorld");
}
}
那么这段代码的执行结果,我相信我不用说大家都知道打印什么内容,那就是”HelloWorld”,其实我想让大家注意的并不是打印出来的内容,而是内容的字体颜色,即黑色的HelloWorld,那么接下来我们我们接着在Eclipse里面写如下代码:
public class Demo {
public static void main(String[] args) {
System.err.println("HelloWorld");
}
}
刚才前面的代码唯一区别就是,这次是用的System.err来输出的,那么这次大家看到的却是红色的HelloWorld。
那为什么是红色的呢?别急,我们继续来看下面的代码:
public class Demo {
public static void main(String[] args) throws FileNotFoundException {
new FileReader("hehe.txt");
}
}
如果”hehe.txt”这个文件根本不存在的话,因为找不到文件,所以执行
new FileReader("hehe.txt");这条语句就会报出异常,先别急着看是什么异常,报出的异常信息都是什么颜色的字,答案很简答,是红色的。
此时此刻,我相信大家都已经明白一些了,异常信息是红色的字,刚才用System.err打印的字也是红色的,那也就是说异常信息是通过System.err打印出来的。
大家学过学过就业班的就会接触过一个日志框架叫做Log4j,当Log4j的配置文件配置了之后,你会发现,我们在运行项目时候所报出的异常信息,不再是打印到控制台Console 了,而是都写入到了一个日志文件中,如果想知道项目中出了哪些问题,只能去翻看相应的日志文件,那Log4j究竟是如何做到的呢?
首先Log4j是个比较复杂的框架,但是不管多么复杂,也离不开最基本的System.err,那么下面我就用System.err来给大家演示一下如何把异常信息都写入到日志文件中,下面必须要做的就是先要给大家介绍一个方法,就是System类下的public static void
误输出流的输出路径。
大家请看下面的代码:
public class Demo {
public static void main(String[] args) throws FileNotFoundException {
System.setErr(new PrintStream("error.txt"));
new FileReader("hehe.txt");
}
}
上面的代码表达的意思是,把错误输出流的流向改为了输出到项目路径下的error.txt文件中,创建一个指向hehe.txt的字节输入流。
error.txt是存在的,而hehe.txt是不存在的,所以在执行过程中new FileReader("hehe.txt");这句代码肯定会报异常的,但是当我们真的执行的时候,我们却发现控制台并没有打印任何的东西?难道不报错了?答案是否定的。
当我们打开error.txt的时候我们发现,原本打印到控制台上的异常信息都被写入到了error.txt中去了。
那么这种现象和Log4j的功能就及其相似了,所以说万变不离其宗,大家还是要把基础学扎实,不管多么复杂的框架都是夯实的基础上实现的!。