log4j-使用详解与Java的实例应用

简介: 转载请注明出处:http://blog.csdn.net/qq_26525215本文源自【大学之旅_谙忆的博客】log4j介绍Log4j,具体的我就不去拷贝官网的介绍了,大家只要知道这是帮助我们记录日志的就可以了。

转载请注明出处:http://blog.csdn.net/qq_26525215

本文源自大学之旅_谙忆的博客

log4j介绍

Log4j,具体的我就不去拷贝官网的介绍了,大家只要知道这是帮助我们记录日志的就可以了。

作用就是这2个:
1、跟踪代码的运行轨迹。
2、输出调试信息

很简单,但是真的很实用的一个工具!不需要很深入的去了解,但是必须知道如何使用,如何通过Log4j去记录日志,这是必须的!

在这里,通过一个实例来演示如何使用log4j,以及如何配置log4j的配置文件。

log4j-jar包:

首先,我们需要准备一个Log4j的jar包,不多说,直接上链接:
版本为:log4j-1.2.17.(2016.8.22下载的最先版本)’

点我去下载log4j-1.2.17-jar包

三大组成就是如下三个类:
1、Logger类-生成日志。
2、Appender类-定义日志输出的目的地。
3、Layout类-指定日志输出的格式。

了解一下Logger组件:

日志共分为5种级别(ON开,OFF关这两个不计算在内),从高到底(从严重到轻微)排序为:

FATAL—严重的错误,可能会导致程序不能正常运行. 类似System.exit(),整个项目都不能运行
ERROR – 错误,影响程序的正常运行。 类似当前线程挂了,但其它线程或组件还在跑
WARN – 警告,不会影响程序的运行。最好将此问题修正。
INFO – 一般信息。不影响程序的运行。可能是用户的调试信息。可有可无。等同于system.err.
DEBUG – 一般的信息。等同于system.out

上面五种级别分别对应以下几个方法(Java中调用,等会会演示)
fatal(Object)
error(Object)
warn(Object)
info(Object)
debug(Object)
当信息大于或是等于配置的级别时才会输出日志。

Appender组件

我们只要记住下面这2个就可以了:

Console—控制台–org.apache.log4j.ConsoleAppender
File—文件–org.apache.log4j.FileAppender , org.apache.log4j.RollingFileAppender

Layout组件

功能是定义日志的输出格式
org.apache.log4j.HTMLLayout
org.apache.log4j.PatternLayout (自定义)
org.apache.log4j.SimpleLayout

就是输出到日志的时候,用哪种格式输出,理解成正则表达式就好了。

有一些转义是他规定好的,我这里列出一些,不用全部都记下来,了解就行了,然后记一个常用的匹配格式就OK!

只解释自定义格式PatternLayout:

%d – 具体的时间. %d{yyyy MMM dd HH:mm:ss,SSS}
        输出类似:输出类似:2016年8月21日 00:00:00,921
%p – 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL 
%c – 输出所属的类目,通常就是所在类的全名 -Logger.getLogger(name) 其实就是输出这个name,所以,我们这里一般用当前类的class。
%L(这是大写的L) — 只输出行号
%l - 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:(Log4jDemo.java:13)
%m – 输出代码中指定的消息-我们指定的
%n —换行符-Windows平台为“\r\n”,Unix平台为“\n” 
%r   输出自应用启动到输出该log信息耗费的毫秒数 
%t   输出产生该日志事件的线程名

配置文件的一个模板:

在src/bin目录下(即WEB-INF/classes)建立一个log4j.properties文件.

在WEB-INF/classes目录下,为log4j的默认目录。Log4j.properties也是log4j的默认文件名。

#####配置根元素
log4j.rootLogger=INFO,console,file
#存储INFO以及以上级别的记录
#file的输入地址为文件
#console表示输出到控制台
log4j.appender.file=org.apache.log4j.RollingFileAppender
#以下是具体的目录
log4j.appender.file.File=d:/a/test.log
#每个文件的最大大小
log4j.appender.file.MaxFileSize=20KB
#最多可以是多少个文件
log4j.appender.file.MaxBackupIndex=3
#信息的布局格式-按指定的格式打出
log4j.appender.file.layout=org.apache.log4j.PatternLayout
#具体的布局格式 - %d为时间
#log4j.appender.file.layout.ConversionPattern=%d %p [%c] %m %l %n
log4j.appender.file.layout.ConversionPattern=%d %p [%l]\:%m -%t%n 

#以下配置输出到控制台的配置
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
#log4j.appender.console.layout.ConversionPattern=%d %p [%c] %m%n
log4j.appender.console.layout.ConversionPattern=%d %p [%l]\:%m -%t%n 

演示实例:

package cn.hncu.lib;

import org.apache.log4j.Logger;
/**
 * @author 陈浩翔
 *
 * 2016-8-23
 */
public class Log4jDemo {
    public static void main(String[] args) {
        //日志的名字是传入的任何字符串,通常为类名或包名
        Logger log = Logger.getLogger(Log4jDemo.class);

        for(int i=0;i<10;i++){
            log.fatal("严重错误信息:"+i);
            log.error("错误信息:"+i);
            log.warn("警告信息:"+i);
            log.info("一般信息:"+i);
            log.debug("调试信息:"+i);
        }
    }
}

演示结果:

控制台输出:

文件输出:

是不是很简单,配置好文件之后,我们在Java中用,只需要2步。
1、Logger log = Logger.getLogger(****.class);
2、随意调用下面5个方法:

log.fatal();
log.error();
log.warn();
log.info();
log.debug();
参数是Object类型!在日志中用%m来代表我们这里传的值的toString()。

如果要去更加详细了解的,可以去Log4j官网:

Log4j官网

一个模板:

#####配置根元素
#调试模式,写成DEBUG  ---设置日志级别-存储DEBUG以及以上级别的记录
log4j.rootLogger=DEBUG,console,file,error
#生产级项目,写成INFO就可以了
#INFO级别比DEBUG级别高 ---console,file,error都是自己写的-名称自己定


####以下配置输出到控制台的配置####
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.Target=System.out
#log4j.appender.console.layout.ConversionPattern=%d %p [%c] %m%n
log4j.appender.console.layout.ConversionPattern=%d %p [%l]\:%m -%t%n



### 输出到日志文件 ###
log4j.appender.file=org.apache.log4j.RollingFileAppender
#以下是具体的目录
log4j.appender.file.File=info.log
#每个文件的最大大小
log4j.appender.file.MaxFileSize=20MB
#最多可以是多少个文件
log4j.appender.file.MaxBackupIndex=3
## 输出INFO级别以上的日志 --Threshold是个全局的过滤器,它将把低于所设置的INFO的信息过滤不显示出来。
log4j.appender.file.Threshold=INFO
#信息的布局格式-按指定的格式打出
log4j.appender.file.layout=org.apache.log4j.PatternLayout
#具体的布局格式 - %d为时间
#log4j.appender.file.layout.ConversionPattern=%d %p [%c] %m %l %n
log4j.appender.file.layout.ConversionPattern=%d %p [%l]\:%m -%t%n

### 保存异常信息到单独文件 ###
log4j.appender.error = org.apache.log4j.DailyRollingFileAppender
## 异常日志文件名
log4j.appender.error.File = error.log
log4j.appender.error.Append = true
## 只输出ERROR级别以上的日志!!!
log4j.appender.error.Threshold = ERROR
log4j.appender.error.layout = org.apache.log4j.PatternLayout
log4j.appender.error.layout.ConversionPattern = %d %p [%l]\:%m -%t%n



转载请注明出处:http://blog.csdn.net/qq_26525215

本文源自大学之旅_谙忆的博客

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
15天前
|
移动开发 Java Android开发
构建高效Android应用:探究Kotlin与Java的性能差异
【4月更文挑战第3天】在移动开发领域,性能优化一直是开发者关注的焦点。随着Kotlin的兴起,其在Android开发中的地位逐渐上升,但关于其与Java在性能方面的对比,尚无明确共识。本文通过深入分析并结合实际测试数据,探讨了Kotlin与Java在Android平台上的性能表现,揭示了在不同场景下两者的差异及其对应用性能的潜在影响,为开发者在选择编程语言时提供参考依据。
|
16天前
|
Java
使用Java代码打印log日志
使用Java代码打印log日志
71 1
|
16天前
|
缓存 算法 Java
Java内存管理与调优:释放应用潜能的关键
【4月更文挑战第2天】Java内存管理关乎性能与稳定性。理解JVM内存结构,如堆和栈,是优化基础。内存泄漏是常见问题,需谨慎管理对象生命周期,并使用工具如VisualVM检测。有效字符串处理、选择合适数据结构和算法能提升效率。垃圾回收自动回收内存,但策略调整影响性能,如选择不同类型的垃圾回收器。其他优化包括调整堆大小、使用对象池和缓存。掌握这些技巧,开发者能优化应用,提升系统性能。
|
25天前
|
监控 Serverless 数据库
Serverless 应用引擎常见问题之biphon-education-配置了SLS后一直重启如何解决
Serverless 应用引擎(Serverless Application Engine, SAE)是一种完全托管的应用平台,它允许开发者无需管理服务器即可构建和部署应用。以下是Serverless 应用引擎使用过程中的一些常见问题及其答案的汇总:
28 5
|
15天前
|
Java
深入理解Java并发编程:线程池的应用与优化
【4月更文挑战第3天】 在Java并发编程中,线程池是一种重要的资源管理工具,它能有效地控制和管理线程的数量,提高系统性能。本文将深入探讨Java线程池的工作原理、应用场景以及优化策略,帮助读者更好地理解和应用线程池。
|
22天前
|
Java 编译器 Android开发
构建高效Android应用:探究Kotlin与Java的性能差异
在开发高性能的Android应用时,选择合适的编程语言至关重要。近年来,Kotlin因其简洁性和功能性受到开发者的青睐,但其性能是否与传统的Java相比有所不足?本文通过对比分析Kotlin与Java在Android平台上的运行效率,揭示二者在编译速度、运行时性能及资源消耗方面的具体差异,并探讨在实际项目中如何做出最佳选择。
17 4
|
23天前
|
数据采集 分布式计算 大数据
Java语言在大数据处理中的应用
传统的大数据处理往往依赖于庞大的数据中心和高性能的服务器,然而随着大数据时代的到来,Java作为一种强大的编程语言正在被广泛应用于大数据处理领域。本文将探讨Java语言在大数据处理中的优势和应用,以及其在分布式计算、数据处理和系统集成等方面的重要作用。
|
6天前
|
Java
探秘jstack:解决Java应用线程问题的利器
探秘jstack:解决Java应用线程问题的利器
14 1
探秘jstack:解决Java应用线程问题的利器
|
6天前
|
Java Shell
Java 21颠覆传统:未命名类与实例Main方法的编码变革
Java 21颠覆传统:未命名类与实例Main方法的编码变革
10 0
|
9天前
|
XML JSON JavaScript
Java中XML和JSON的比较与应用指南
本文对比了Java中XML和JSON的使用,XML以自我描述性和可扩展性著称,适合结构复杂、需验证的场景,但语法冗长。JSON结构简洁,适用于轻量级数据交换,但不支持命名空间。在Java中,处理XML可使用DOM、SAX解析器或XPath,而JSON可借助GSON、Jackson库。根据需求选择合适格式,注意安全、性能和可读性。
23 0