Log4j

Log4j

Log4j简介

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

什么是日志?

日志:用来记录一些重要的操作信息

有价值的日志数据能够帮助用户提前发现和避开灾难,并且找到事件发生的原因

为什么要使用Log4J

  • 监视代码中变量的变化情况
  • 跟踪代码的运行轨迹
  • 担任开发环境中的调试作用,向文件或控制台打印代码的调试信息

Log4J的三个组件

  • Logger:负责生成日志,并能够对日志信息进行分类筛选,决定被输出和被忽略的信息。
  • Appender:定义了日志信息输出的目的地,指定日志输出到什么地方,可以是控制台,文件,网络等。
  • Layout:指定日志信息的输出格式

org.apache.log4j.Level类提供以下级别,但也可以通过Level类的子类自定义级别。

Level描述
ALL各级包括自定义级别
DEBUG指定细粒度信息事件是最有用的应用程序调试
ERROR错误事件可能仍然允许应用程序继续运行
FATAL指定非常严重的错误事件,这可能导致应用程序中止
INFO指定能够突出在粗粒度级别的应用程序运行情况的信息的消息
OFF这是最高等级,为了关闭日志记录
TRACE指定细粒度比DEBUG更低的信息事件
WARN指定具有潜在危害的情况

ALL < DEBUG < INFO < WARN < ERROR < FATAL < OFF

Log4j建议只使用四个级别,优先级从高到低分别是 ERROR、WARN、INFO、DEBUG。通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。比如在定义了INFO级别,则应用程序中所有DEBUG级别的日志信息将不被打印出来,也是说大于等于的级别的日志才输出。

Log4J使用

为项目添加log4j的jar包
配置log4j.properties配置文件

#log4j.properties
#off 	最高日志级别,关闭左右日志
#fatal	将会导致应用程序退出的错误
#error	发生错误事件,但仍不影响系统的继续运行
#warn	警告,即潜在的错误情形
#info	一般和在粗粒度级别上,强调应用程序的运行全程
#debug	一般用于细粒度级别上,对调试应用程序非常有帮助
#all	最低等级,打开所有日志记录
#在代码中使用     Logger logger = Logger.getLogger(当前类.class);  
#				  logger.info("输出信息");
log4j.rootLogger = INFO,CONSOLE,FILE
#控制台输出配置
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
#指定日志的输出格式
log4j.appender.CONSOLE.layout.ConversionPattern=%-4r %-5p [%t] %37c %3x - %m%n
#文件输出配置
log4j.appender.FILE=org.apache.log4j.DailyRollingFileAppender
log4j.appender.FILE.layout = org.apache.log4j.PatternLayout
#指定日志的输出格式
log4j.appender.FILE.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] - %m%n
#将文件路径
log4j.appender.FILE.File=D\:/log/log4jsfshop.log 

在代码中使用
Logger logger = Logger.getLogger(当前类.class);
logger.info("输出信息");

log4j 采用类似 C 语言的 printf 函数的打印格式格式化日志信息,具体的占位符及其含义如下:

%m 输出代码中指定的日志信息

%p 输出优先级,及 DEBUG、INFO 等

%n 换行符(Windows平台的换行符为 “\n”,Unix 平台为 “\n”)

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

%c 输出打印语句所属的类的全名

%t 输出产生该日志的线程全名

%d 输出服务器当前时间,默认格式为 ISO8601,也可以在后面指定格式。如:%d{yyyy年MM月dd日 HH:mm:ss}

%l 输出日志时间发生的位置,包括类名、发生的线程,以及在代码中的行数,如:Test.main(Test.java:10)

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

%L 输出代码中的行号

%x 输出和当前线程相关的 NDC(嵌套诊断环境)

%% 输出一个 “%” 字符

可以在 % 与字符之间加上修饰符来控制最小宽度、最大宽度和文本的对其方式。如:

%5c 输出category名称,最小宽度是5,category<5,默认的情况下右对齐
%-5c 输出category名称,最小宽度是5,category<5,"-“号指定左对齐,会有空格
%.5c 输出category名称,最大宽度是5,category>5,就会将左边多出的字符截掉,<5不会有空格
%20.30c category名称<20补空格,并且右对齐,>30字符,就从左边交远销出的字符截掉”

按日期每天生成一个文件

# 设置根Logger的级别为DEBUG,并且设置两个Appender,一个输出到控制台,一个输出到文件  
log4j.rootLogger=DEBUG, stdout, file  
  
# 配置控制台Appender  
log4j.appender.stdout=org.apache.log4j.ConsoleAppender  
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  
  
# 配置文件Appender,使用DailyRollingFileAppender实现按日期滚动  
log4j.appender.file=org.apache.log4j.DailyRollingFileAppender  
# 设置日志文件输出目录和文件名  
log4j.appender.file.File=D:/logs/myapp.log  
# 设置日志文件的滚动策略为每天滚动  
log4j.appender.file.DatePattern='.'yyyy-MM-dd  
# 设置日志文件的布局  
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  
  
# (可选)如果只想在ERROR级别打印堆栈跟踪,并且想要自定义格式,  
# 你可能需要编写一个自定义的AppenderLayout,但通常这不是必需的。  
# Log4j会自动在ERROR级别且传递了Throwable对象时打印堆栈跟踪。

在你的Java代码中,你应该这样记录错误日志:

try {  
    // 你的代码逻辑  
    throw new RuntimeException("这是一个测试异常");  
} catch (Exception e) {  
    // 使用logger记录错误,并传递异常对象  
    logger.error("发生错误", e);  
}

在这个例子中,logger.error(“发生错误”, e);调用会在日志文件中(以及控制台,如果配置了的话)打印出“发生错误”这条消息,紧接着是异常e的完整堆栈跟踪信息。

请注意,如果你使用的是Log4j 2.x,配置文件的格式和Appender的类名可能会有所不同,但基本概念是相同的。在Log4j 2.x中,你通常会使用XML、JSON、YAML或properties(但有所限制)格式的配置文件,并且DailyRollingFileAppender已经被RollingFileAppender结合TimeBasedTriggeringPolicy所替代。但是,对于你的需求来说,关键是确保在记录错误时传递了异常对象,这样Log4j就会自动打印堆栈跟踪信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值