Log4j

Posted TSXin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Log4j相关的知识,希望对你有一定的参考价值。

Log4j日志框架

项目中对于日志的记录

系统中对于记录日志的需求并不单纯。首先,希望日志要能持久化到磁盘,最基本的就是要能够保存到文件中;其次,我们希望在开发和生产环境中记录的日志并不相同,明显开发环境的日志记录会更多方便调试,但放到生产环境下大量的日志很容易会撑爆服务器,因此在生产环境我们希望只记录重要信息。

基于不单纯的目的,System.out.println是直接不能满足我们的要求,因此抛弃它,选择功能更强的日志框架。而log4j是apache下一款著名的开源日志框架,log4j满足上面的一切需求。

记录日志的框架并不仅仅只有log4j,比较有名的还有logback等,现在比较火的SpringBoot默认集成的日志就是logback。不管哪种日志框架,一般都能够实现日志的持久化功能。


日志的重要性

日志非常重要,不做日志出了问题找不到数据的依据,bug出现没办法了解,从日常的包异常查找问题就能看出来,如果没有日志,找bug将非常困难。

     记录方式

1,输出文件(数据量庞大)

2,记录到数据库(数据量不大,但是很重要)

mvn:

     


//产生一个日志输出对象  创建对象就产生,把类挂上去,

用logger输出都是挂在这的类

private static Logger logger= Logger.getLogger(App.class);


日志输出格式

    logger.info("日常信息输出");
    logger.warn("危险日志");
    logger.error("错误日志");
    logger.debug("debug日志");
    logger.fatal("发出一个错误信息,也是指严重错误,用的并不是很多");
    logger.trace("比debug低一级的日志");




Log4j


log4j级别(level)

不同的级别,能都打印的日志是不同的

Log4j

注:ALL和OFF是1.2.12加上去的

释:当选择ALL时,所有日志都能输出,倘若选INFO则TRACE与DEBUG不输出,

配置级别:

log4j.rootLogger=INFO


输出方式(日志输出的目的地):

log4j.appender

a:org.apache.log4j.ConsoleAppender:将日志信息输出到控制台。   
b:org.apache.log4j.FileAppender:将日志信息输出到一个文件。   
c:org.apache.log4j.DailyRollingFileAppender:将日志信息输出到一个日志文件,并且每天输出到一个新的日志文件。   
d:org.apache.log4j.RollingFileAppender:将日志信息输出到一个日志文件,并且指定文件的尺寸,当文件大小达到指定尺寸时,会自动把文件改名,同时产生一个新的文件。   
e:org.apache.log4j.WriteAppender:将日志信息以流格式发送到任意指定地方。   
f:org.apache.log4j.jdbc.JDBCAppender:通过JDBC把日志信息输出到数据库中。


格式化Appender的输出

log4j.appender.c.layout


控制台输出

Log4j


磁盘输出

Log4j

在配置文件中可以通过log4j.appender.A1.layout.ConversionPattern设置日志输出格式。
参数:
%p: 输出日志信息优先级,即DEBUG,INFO,WARN,ERROR,FATAL,


%d:输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921


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


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


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


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


%x: 输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。


%%: 输出一个”%”字符


%F: 输出日志消息产生时所在的文件名称


%L: 输出代码中的行号


%m: 输出代码中指定的消息,产生的日志具体信息


%n: 输出一个回车换行符,Windows平台为” ”,Unix平台为” ”输出日志信息换行


示例:

#自定义格式内容

log4j.appender.f.layout.ConversionPattern=

%d{yyy-MM-dd HH:mm:ss,SSS,E}%n


文件输出为

Log4j



#输出类型                文件
log4j.appender.h=org.apache.log4j.FileAppender
#输出本地my.html网页
log4j.appender.h.File=my.html
#是否追加
log4j.appender.h.Append=true
#输出格式 网页格式
log4j.appender.h.layout=org.apache.log4j.HTMLLayout


网页效果:

这里只涉及控制台,普通日志文件txt,以及html网页格式日志输出

以上是关于Log4j的主要内容,如果未能解决你的问题,请参考以下文章

log4j怎样控制只输出自己写的代码的日志,不输出框架中的日志

Log4j反序列化远程代码执行漏洞(CVE-2019-17571)

由log4j远程执行漏洞说起

混合 log4j 1.x 和 log4j 2

Java 标准日志工具 Log4j 的使用(附源代码)

log4jspringboot项目启动 ,使用的druid数据源,log4j报错 log4j:WARN Please initialize the log4j system properly.(代码片