Log4j的使用

大家好,我是IT修真院深圳分院第01期学员,一枚正直纯洁善良的web程序员。

今天给大家分享一下,修真院官网JAVA(职业)任务1,深度思考中的知识点——log4j的使用。

1.介绍

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

2.涉及

2.1 从System.out.println到Log4j

System.out(还有System.err)是一个直接和控制台打交道的PrintStream对象,是终端显示的基础,高级的Logger要在终端显示日志内容,就必然会用到。但它还不是一个日志系统,一个比较完善的日志系统应当有输出媒介、优先级、格式化、日志过滤、日志管理、参数配置等功能。


然后伴随J2SE 1.4一起发布了Java Logging API(java.util.logging),它满足了基本日志系统构建的需求,包含7大部分:

日志记录器Logger

日志对象:LogRecord

日志管理器:LogManager

输出媒介控制:Handler

输出格式:Formatter

日志级别:Level

日志过滤器:Filter


Apache Jakarta log4j日志工具包是当前比较流行的一个工具包,它在Logging API的基础上提供更多的输出媒介、输出格式和配置选择。

                     Logging中的类        log4j中的类

日志记录器       Logger                    Logger

日志管理器    LogManager          LogManager

日志对象        LogRecord            LoggingEvent

输出媒介控制    Handler                  Appender

格式化             Formatter                  Layout

级别                    Level                       Level

过滤器                 Filter                       Filter


2.2 Log4j用法

建立maven工程,在pom.xml文件中加入依赖包,通过设置Log Level,定义Appender和在配置文件中指定Layout对象来配置log4j。log4j.properties 文件是一个log4j配置文件,它保留键/值对中的属性。默认情况下, LogManager 在CLASSPATH中查找名为log4j.properties的文件。


Logger是日志记录器,其通常在主类中静态实例化,如:static Logger log = Logger.getLogger(log4jExample.class.getName());

Logger类具有处理日志记录活动的方法:

public void debug(Object message):打印Level.DEBUG级别的消息。

public void error(Object message):打印Level.ERROR级别的消息。

public void fatal(Object message):打印具有Level.FATAL级别的消息。

public void info(Object message):打印Level.INFO级别的消息。

public void warn(Object message):打印Level.WARN级别的消息。

public void trace(Object message):打印Level.TRACE级别的消息


日志级别用Level类表示,一个日志级别对应的是一个整数值,范围和整型值的范围是一致的,该整数值愈大,说明警戒级别愈高。Level有9个内置的级别,分别是:

类型                对应的整数

OFF                最大整数(Integer.MAX_VALUE)

SEVERE         1000

WARNING      900

INFO               800

CONFIG          700

FINE                500

FINER              400

FINEST            300

ALL                  最小整数(Integer.MIN_VALUE)


Appender对象用于将日志消息打印到不同目标(如控制台,文件,套接字,NT事件日志等),所有类别:

AppenderSkeleton,AsyncAppender,ConsoleAppender,DailyRollingFileAppender,ExternallyRolledFileAppender,FileAppender,JDBCAppender,JMSAppender,LF5Appender,NTEventLogAppender,NullAppender,RollingFileAppender,SMTPAppender,SocketAppender,SocketHubAppender,SyslogAppender,TelnetAppender,WriterAppender。


每个Appender对象都具有与其关联的不同属性,这些属性指示该对象的行为。

layout:Appender使用布局对象和转换模式来格式化日志记录信息。

target:目标可以是控制台,文件或其他项目,具体取决于附加程序。

level:级别过滤日志消息。

threshold:Appender可以具有阈值级别,并忽略具有低于阈值级别的级别的任何日志记录消息。

filter:Filter对象决定日志记录请求是由特定Appender处理还是忽略。


org.apache.log4j.Layout是日志格式类,是log4j API中所有其他Layout类的基类。

它有以下子类:DateLayout,HTMLLayout,PatternLayout,SimpleLayout,XMLLayout。


Log4j采用类似C语言中的printf函数的打印格式格式化日志信息,打印参数如下:

%m:输出代码中指定的消息

%p:输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL

%r:输出自应用启动到输出该log信息耗费的毫秒数

%c:输出所属的类目,通常就是所在类的全名

%t:输出产生该日志事件的线程名

%n:输出一个回车换行符,Windows平台为“rn”,Unix平台为“n”

%l:输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java:10)


3. 常见问题

实际使用

4.解决方案

5.编码实战

一个简单的log4j.properties:

# Define the root logger with appender file

log4j.rootLogger = DEBUG, stdout, file

# Redirect log messages to console

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

log4j.appender.stdout.Target=System.out

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

# Redirect log messages to a log file, support file rolling.

log4j.appender.file=org.apache.log4j.RollingFileAppender

log4j.appender.file.File=log4j.log

log4j.appender.file.MaxFileSize=5MB

log4j.appender.file.MaxBackupIndex=10

log4j.appender.file.layout=org.apache.log4j.PatternLayout

log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

在主类中静态实例化:

public class SpringMain {

private static org.apache.log4j.Logger log = Logger.getLogger(SpringMain.class);

public static void main(String args[]){

............

}}

6. 扩展思考

日志应该怎么打,在什么位置,需要打印出来什么样的关键参数?

日志打印应该从4个方面进行:模块运行日志、业务日志、模块性能日志、模块外部资源日志。关键参数为堆栈信息和运行场景。

7. 参考文献

参考一:Java调试的变迁:从System.out.println到log4j【zz】

参考二:W3CSchool Log4j教程

8. 更多讨论

Common-logging、SLF4J、Logback

鸣谢

PPT链接

感谢大家观看

------------------------------------------------------------------------------------------------------------------------

今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,009评论 5 474
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,808评论 2 378
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,891评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,283评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,285评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,409评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,809评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,487评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,680评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,499评论 2 318
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,548评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,268评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,815评论 3 304
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,872评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,102评论 1 258
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,683评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,253评论 2 341

推荐阅读更多精彩内容

  • 在应用程序中添加日志记录总的来说基于三个目的:监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析...
    时待吾阅读 4,917评论 1 13
  • 在应用程序中添加日志记录总的来说基于三个目的:监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析...
    时待吾阅读 4,951评论 0 6
  • 一、Log4j简介 Log4j有三个主要的组件:Loggers(记录器),Appenders (输出源)和Layo...
    默默守护阅读 1,896评论 2 8
  • from:https://www.cnblogs.com/ITtangtang/p/3926665.html一、L...
    enshunyan阅读 3,272评论 0 0
  • log4j 1.1 简介 Log4j是一个由Java编写可靠、灵活的日志框架,是Apache旗下的一个开源项目;现...
    贾博岩阅读 7,887评论 1 32