博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Log4j 基本使用
阅读量:6785 次
发布时间:2019-06-26

本文共 3345 字,大约阅读时间需要 11 分钟。

hot3.png

    项目搭建起来之后,发现日志频繁不理想,因为是别人搭建的日志系统,所以出错之后很难定位。终于,忍无可忍,自己学习Log4j,其实一切都是那么简单,当然,这些都是初级知识,所以不应该骄傲,不过还是要记录下来,供以后学习使用!

关于系统文件描述:

1)三个标准文件描述符:标准输入,标准输出,标准出错。

2)Java中的System.in,System.out,System.err。对应:stdin,stdout,stderr

3)System.out 与 System.err 表面的区别就是控制台中打印,一个是黑色的一个是红色的!

4)System.out 与 System.err 内在的区别就是前者是缓冲流,后者不是缓冲流。换句话说前者不一定立刻打印信息,而后者会立刻打印!

5)System.out 与 System.err 设置一般可以调用对应的方法设置重定向(默认打印在控制台,通过设置可以打印到指定文件流中),分别是:

System.setOut(new PrintStream(file))和System.setErr(new PrintStream(file));

6)System.out 与 System.err 如果混合使用会出现顺序混乱,原因是缓冲流的原因,所以有些时候会看到异常的信息并不是在指定位置打印,原因就是异常调用的是System.err,他与System.out一起使用的话,可能就发生顺序混乱!

7)参考程序,看看打印结果:

  for(int i = 0 ; i < 10 ; i++){   if(i % 2 ==0){    System.out.println(i);   }else{    System.err.println(i);   }  }

 

Log4j 学习使用

1)Logger对象,她表示的就是一个日志输出对象,这个输出对象根据包名控制着日志级别、日志打印的位置。主要包括:日志打印的当前位置、日志打印的格式、日志打印的目的位置。

Logger对象的获取:

 Logger log = Logger.get:pgger(this.getClass());

Logger对象打印日志:

    log.debug(msg,exception);    log.info(msg,exception);    log.warn(msg,exception);    log.error(msg,exception);    log.fatal(msg,exception);

注意:级别从上往下是由低到高,父子关系是继承关系,因为他们是包含关系,但是子类优先考虑,只会打印大于等于自身级别的log。

2)Appender对象,日志信息输出的目的地对象,她代表着是控制台还是文件还是邮件等

一般的Appender对象:

    ConsoleAppender:输出到控制台的Appender对象    RollingFileAppender:输出到文件的Appender对象    JMSAppender:输出到JMS的Appender对象    SMTPAppender:输出到邮件系统SMTP的Appender对象

注意:输出目的地对于父子类关系是采用合并,因为他们不是互斥关系。也就是儿子应该拥有父亲的,同时还拥有自己的。

3)Layout对象,日志打印格式控制对象

一般采用日志格式对象:

    PatternLayout:使用pattern字符串控制日志输出格式    SimpleLayout:只是输出简单日志信息的一种格式

关于日志格式pattern字符串的意义:

    %p:日志信息级别,level    %d{}:日志信息产生时间 , 一般使用格式%d{yyyy MM dd HH:mm:ss,SSS}    %c:日志信息所在地(类名)    %m:产生的日志具体信息    %n:输出日志信息换行

4)Log4j文件的内容

有的是采用Log4j.properties 文件,有的是Log4j.xml 文件,二者是相同的,个人推荐使用前者,原因是看起来简单。

具体内容如下:

#指向根目录,以防止遗漏某些Logger对象,需要指定打印方式Appender和打印级别Levellog4j.rootLogger=error,stdout,logfile#配置一个控制日志打印方式Appender,控制台打印log4j.appender.stdout=org.apache.log4j.ConsoleAppender#配置一个控制日志打印的格式log4j.appender.stdout.layout=org.apache.log4j.PatternLayout#配置格式具体形式log4j.appender.stdout.layout.ConversionPattern=[%d][%c]-[%p] %m%n#把打印到控制台的内容都标记为标准输出,也可以指定为System.errlog4j.appender.CONSOLE.Target=System.out#配置一个Logger,指定包名和打印级别,其他可以继承或合并log4j.logger.com.restservice=infolog4j.logger.org.apache.catalina=warnlog4j.logger.org.springframework=infolog4j.logger.java.sql.Connection=debuglog4j.logger.java.sql.Statement=debuglog4j.logger.java.sql.PreparedStatement=debug,stdout#配置一个控制日志打印方式的Appender,文件打印log4j.appender.logfile=org.apache.log4j.RollingFileAppender#指定日志打印位置,根目录下的Log/server.loglog4j.appender.logfile.File=Log/server.loglog4j.appender.logfile.MaxBackupIndex=3log4j.appender.logfile.MaxFileSize=512KBlog4j.appender.logfile.layout=org.apache.log4j.PatternLayoutlog4j.appender.logfile.layout.ConversionPattern=[%d][%c]-[%p] %m%n

5)Log4j文件的位置

只需要把它放在src目录下即可,系统自动加载初始化;对于Web程序,如果你想指定他的位置可以在 web.xml 文件中使用如下代码:

      
webAppRootKey
      
identity_projectname
  
  
log4jConfigLocation
  
/WEB-INF/log4j.properties
 
 
 
org.springframework.web.util.Log4jConfigListener

Log4j与文件系统

本人刚刚接触项目,发现控制台采用System.out.print("hello world");总是没有东西输出,后面才发现,原来是标准输出采用重定向了,那么如果我们在初始化Log4j的时候,也把标准输出和标准出错指定在一个特定的文件里面,那么所有的信息都会记录为日志,而不需要采用Log去手动打印了!比如异常抛出,就可以重定向到文件中去。

转载于:https://my.oschina.net/heweipo/blog/388471

你可能感兴趣的文章
数据可视化:柱状图、雷达图等六种基本图表的特点和适用场合
查看>>
选择器 :gt(index)
查看>>
notes on python
查看>>
kafa
查看>>
资源 | Feature Tools:可自动构造机器学习特征的Python库
查看>>
linux Shell 中常用的条件判断
查看>>
angular 动态设置blob链接给 ng-href时遇到unsafe 解决方案
查看>>
Java与Highcharts实例(四) - Hello Highcharts (后台Java传递数
查看>>
连接数据库的操作 总结
查看>>
Android 小米手机开发APP图标更换后还显示原来的图标
查看>>
在代码中修改Shape的solid属性的color值
查看>>
MySQL字符集问题
查看>>
Java多线程总结
查看>>
iPad Mini外屏碎了 换屏幕教程
查看>>
LinkedBlockingQueue操作,线程安全问题,ConcurrentModificationException 异常分析与解决方案...
查看>>
redis3.2新功能--GEO地理位置命令介绍与实战开发
查看>>
java 通过ssh 执行命令
查看>>
算法导论——基数排序(基于计数排序)
查看>>
19.TCP的交互数据流
查看>>
字符串匹配的Boyer-Moore算法
查看>>