参考博文:http://www.blogjava.net/zzzlyr/articles/353039.html
这几天一直在用logger记录日志,但一直不明白log4j.properties配置文件意思,下面看看其他博主文章给自己充充电。
本人认为日志记录不仅可以帮记录执行结果,看代码执行是否正常,并且在排查问题时也能很快帮助你定位有问题代码。
一、介绍
Log4j是一个用Java编写的可靠,快速和灵活的日志框架(API),是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接口服务 器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。
Log4j由三个重要的组件构成:
loggers: 负责捕获记录信息,日志信息的优先级。
appenders : 负责发布日志信息,日志信息的输出目的地。
layouts: 负责格式化不同风格的日志信息,日志信息的输出格式。
从源码角度深入分析log4j配置文件使用:http://www.cnblogs.com/davidwang456/p/4243161.html
注意:
1、日记记录的优先级(低到高):
# 控制台显示的内容是:优先级大于等于log4j.properties中配置的信息。
# ALL< DEBUG < INFO < WARN < ERROR < FATAL < OFF.
# Log4j建议只使用FATAL ,ERROR ,WARN ,INFO ,DEBUG这五个级别。
# ERROR 为严重错误 主要是程序的错误
# WARN 为一般警告,比如session丢失
# INFO 为一般要显示的信息,比如登录登出
# DEBUG 为程序的调试信息
2、Log4j配置简单示列:
第一步:maven 依赖slf4j包或手动引入如下jar包
1、slf4j-api-1.7.5.jar
2、slf4j-log4j12-1.7.5.jar
3、log4j-1.2.16.jar
第二步:在resource中配置log4j.properties(或者log4j.xml)配置文件。
#配置根Logger
log4j.rootLogger = [ level ] , appenderName1 , appenderName2 , …
#配置日志信息输出目的地Appender
log4j.appender.appenderName = fully.qualified.name.of.appender.class
log4j.appender.appenderName.option1 = value1
log4j.appender.appenderName.optionN = valueN
#配置日志信息的格式(布局)
log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class
log4j.appender.appenderName.layout.option1 = value1
log4j.appender.appenderName.layout.optionN = valueN
appenderName就是指定日志信息输出到哪个地方。可同时指定多个输出目的地:
log4j.rootLogger=DEBUG,console,D,E
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss,SSS} [%c]-[%p] %m%n
# 输出DEBUG 级别以上的日志到
log4j.appender.D = org.apache.log4j.RollingFileAppender
log4j.appender.D.Threshold=DEBUG
# DEBUG 级别以上的日志输出目录
log4j.appender.D.File = C:/Users/admin/Desktop/debug.log
log4j.appender.D.Append = true
log4j.appender.D.MaxFileSize=5MB
log4j.appender.D.layout= org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss,SSS} [%c]-[%p] %m%n
# 输出ERROR 级别以上的日志到
log4j.appender.E = org.apache.log4j.RollingFileAppender
log4j.appender.E.Threshold=ERROR
log4j.appender.E.File = C:/Users/admin/Desktop/error.log
log4j.appender.E.Append = true
log4j.appender.E.MaxFileSize=5MB
log4j.appender.E.layout= org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss,SSS} [%c]-[%p] %m%n
注意:Log4j的配置
由于WebApplicationContext需要使用日志功能,用户可以将log4j.properties放置在类路径下,这样就会自动启动。如果放在其他地方,必须在web.xml中指定Log4j配置文件的位置。Spring为启动Log4j引擎提供了两个类og4jConfigServlet和Log4jConfigListener,不管哪种方式都必须保证能够在装载Spring配置文件前先装载Log4J配置信息。
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/log4j.properties</param-value>
</context-param>
<servlet>
<servlet-name>log4jConfigServlet</servlet-name>
<servlet-class>org.springframework.web.util.Log4jConfigServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
第三步:使用日志,在controller层使用日志
@Controller
@RequestMapping(value = "/api/controller/brand")
public class BrandController {
private static Logger logger = LoggerFactory.getLogger(BrandController.class);
@Autowired
private BrandService brandService;
@RequestMapping(value = "/update", method = RequestMethod.POST)
public Brand update(Model model){
Brand brand = brandService.findByBrandCode("1a9e2fb7-d8d3-4dce-a50b-52c77efb2629");
brandService.update(brand);
//SLF4J的日志消息使用占位符"{}"代替了常用的字符串拼接,据官方说这样速度更快
logger.info("{}更新成功",brand.getId());
logger.error("更新失败");
logger.debug("debug功能");
return brand;
}
3、知识点:
log4j.rootLogger=info,stdout, R 定义 logger记录大于等于info优先级日志信息,stdout表示在控制台显示,R表示日志记录在文件中。
stdout:
log4j.appender.stdout=org.apache.log4j.ConsoleAppender 意思是把日志输出到控制台
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 意思是日志在控制台显示布局模式
log4j.appender.stdout.layout.ConversionPattern=%d{HH\:mm\:ss} %c{1} - %m%n 表示日志输出的格式,%d{HH\:mm\:ss} %c{1} - %m%n表示时:分:秒 类名 日志信息 换行
R:
log4j.appender.R=org.apache.log4j.RollingFileAppender :日志文件大小到达指定尺寸的时候产生一个新的文件
log4j.appender.R.File=mat.log 表示是放日志文件的路径
log4j.appender.R.MaxFileSize=5MB 表示指定日志文件大小
log4j.appender.R.layout=org.apache.log4j.PatternLayout 日志记录的布局模式
log4j.appender.R.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss,SSS} [%c]-[%p] %m%n 表示日志输出格式
年-月-日 时:分:秒 类名 优先级显示日志信息 换行
#appender名字定义
#appender名字定义
log4j.rootLogger=INFO,FILE,consoleAppender,RollingFile,MAIL,DailyRollingFile,DATABASE
log4j.addivity.org.apache=true
#配置日志信息输出目的地
#log4j.appender.appenderName = fully.qualified.name.of.appender.class
#(如:log4j.appender.RollingFile = org.apache.log4j.RollingFileAppender)
# 1.org.apache.log4j.ConsoleAppender(控制台)
# 2.org.apache.log4j.FileAppender(文件)
# 3.org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)
# 4.org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)
# 5.org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
#配置日志信息的格式
#log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class
#(如:log4j.appender.RollingFile.layout = org.apache.log4j.HTMLLayout)
# 1.org.apache.log4j.HTMLLayout(以HTML表格形式布局),
# 2.org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
# 3.org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
# 4.org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
#输出格式:layout中的参数都以%开始,后面不同的参数代表不同的格式化信息(参数按字母表顺序列出):
# %c 输出所属类的全名,可在修改为 %d{Num} ,Num类名输出的维(如:"org.apache.elathen.ClassName",%C{2}将输出elathen.ClassName)
# %d 输出日志时间其格式为 %d{yyyy-MM-dd HH:mm:ss,SSS},可指定格式 如 %d{HH:mm:ss}
# %l 输出日志事件发生位置,包括类目名、发生线程,在代码中的行数
# %n 换行符
# %m 输出代码指定信息,如info(“message”),输出message
# %p 输出优先级,即 FATAL ,ERROR 等
# %r 输出从启动到显示该log信息所耗费的毫秒数
# %t 输出产生该日志事件的线程名
#ConsoleAppender,控制台输出
#FileAppender,文件日志输出
#SMTPAppender,发邮件输出日志
#SocketAppender,Socket日志
#NTEventLogAppender,Window NT日志
#SyslogAppender,
#JMSAppender,
#AsyncAppender,
#NullAppender
来源:oschina
链接:https://my.oschina.net/u/2264370/blog/360428