zoukankan      html  css  js  c++  java
  • javaweb项目添加log4j日志

    谈到我们在Java程序中经常用的日志,Log4j应该是耳熟能详了。这里先提下slf4j,英文全名是Simple Logging Facade for Java,直面意思是:Java的简单日志门面。slf4j-api.jar,从这个名称的字面意思可以看出,就是为日志工具提供嵌入程序的接口;而slf4j-log4j12.jar可以理解成就是日志底层接口的实现,类似于中间件,一边对应底层的接口,一边可以根据偏好接入不同的日志系统。log4j.jar就是我们说的日志系统了,当然java有很多开源的日志系统,感兴趣的可以查一查,这里只说Log4j。

    第一步:引入依赖
        打开pom文件,在dependencies里添加下面这部分代码

    Xml代码  收藏代码
    1. <!-- ============== log begin ============== -->  
    2. <dependency>  
    3.     <groupId>org.slf4j</groupId>  
    4.     <artifactId>slf4j-log4j12</artifactId>  
    5.     <version>1.7.25</version>  
    6. </dependency>  
    7. <!-- ============== log end ============== -->  


        然后更新项目,同时会引入如下三个有依赖关系的jar包
       

        每个jar包的大致用途,上边已经讲了,接下来看看如何使用Log4j。

    第二步:如何使用Log4j
        Log4j本身支持两种文件的配置方式,一种是XML文件,一种是properties文件,这里我们只说properties的方式,先创建一个log4j.properties的文件,写入配置信息

    Java代码  收藏代码
    1. ### set log levels ###    
    2. log4j.rootLogger = INFO, console, debugFile, errorFile  
    3.     
    4. ### 输出到控制台 ###    
    5. log4j.appender.console = org.apache.log4j.ConsoleAppender  
    6. ##这个不指定默认是System.out,指定输出控制台  
    7. log4j.appender.console.Target = System.out  
    8. ##输出INFO级别以上的日志  
    9. log4j.appender.console.Threshold = INFO  
    10. ##布局模式,自己灵活指定  
    11. log4j.appender.console.layout = org.apache.log4j.PatternLayout  
    12. log4j.appender.console.layout.ConversionPattern = [framework][%d{ABSOLUTE}-%l][%p]:%m %n  
    13.   
    14. ### 保存日志内容到具体文件 ###  
    15. ##输出到每天一个独立文件  
    16. log4j.appender.debugFile = org.apache.log4j.DailyRollingFileAppender  
    17. ##输出DEBUG级别以上的日志   
    18. log4j.appender.debugFile.Threshold = DEBUG  
    19. ##异常日志文件路径,文件名称方案  
    20. log4j.appender.debugFile.File = D:/logs/log.log  
    21. log4j.appender.debugFile.DatePattern = '.'yyyy-MM-dd-HH  
    22. ##设定信息是增加而不是覆盖  
    23. log4j.appender.debugFile.Append=true  
    24. #信息输出格式  
    25. log4j.appender.debugFile.layout = org.apache.log4j.PatternLayout  
    26. log4j.appender.debugFile.layout.ConversionPattern = [framework][%d{ABSOLUTE}-%l][%p]:%m %n  
    27.   
    28. ### 保存异常信息到具体文件 ###    
    29. ##输出到每天一个独立文件  
    30. log4j.appender.errorFile = org.apache.log4j.DailyRollingFileAppender  
    31. ##只输出ERROR级别以上的日志内容   
    32. log4j.appender.errorFile.Threshold = ERROR  
    33. ##异常日志文件路径,文件名称方案  
    34. log4j.appender.errorFile.File = D:/logs/error.log  
    35. log4j.appender.errorFile.DatePattern = '.'yyyy-MM-dd-HH  
    36. ##设定信息是增加而不是覆盖  
    37. log4j.appender.errorFile.Append=true  
    38. #信息输出格式  
    39. log4j.appender.errorFile.layout = org.apache.log4j.PatternLayout  
    40. log4j.appender.errorFile.layout.ConversionPattern = [framework][%d{ABSOLUTE}-%l][%p]:%m %n  


        对于上边的代码,这里讲下Log4j简单的使用重点
    1.配置根Logger

    Java代码  收藏代码
    1. og4j.rootLogger = [ level ] , console, debugFile, errorFile  


        level指的是日志记录的优先级,分为ALL、DEBUG、INFO、WARN、ERROR等或者自定义的级别,这个决定日志信息展示的信息颗粒密度和重要等级,如果后边没有做具体设置,这个将起到作用。console, debugFile等是设定日志信息输出策略的名字。
    2.配置日志信息输出目的

    Java代码  收藏代码
    1. log4j.appender.console = org.apache.log4j.ConsoleAppender  


        这个参数是用来配置日志信息输出在哪里,常用的有这几个

    Java代码  收藏代码
    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(将日志信息以流格式发送到任意指定的地方)  


        当然也可以通过邮件、连接数据库等方式进行输出,也可以进行自己定义,具体可以查下相关资料。
    3.配置日志信息的布局

    Java代码  收藏代码
    1. log4j.appender.console.layout = org.apache.log4j.PatternLayout  


        这个参数是用来设置采取什么布局样式,常用的有以下几种

    Java代码  收藏代码
    1. org.apache.log4j.HTMLLayout(以HTML表格形式布局)  
    2. org.apache.log4j.PatternLayout(可以自己指定布局模式)  
    3. org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)  
    4. org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)  


        我们一般都是采用PatternLayout的格式来自己定义日志信息格式。
    4.输出格式设置

    Java代码  收藏代码
    1. log4j.appender.console.layout.ConversionPattern = [framework][%d{ABSOLUTE}-%l][%p]:%m %n  


        这个类似于C语言的格式化打印的脚本信息,常用的几个如下

    Java代码  收藏代码
    1. %m   输出代码中指定的消息(这个就是我们在代码中定义要打出的那部分)  
    2. %n   输出一个回车换行符(Windows平台为“ ”,Unix平台为“ ”)   
    3. %p   输出优先级(即DEBUG,INFO,WARN,ERROR,FATAL)  
    4. %r   输出自应用启动到输出该log信息耗费的毫秒数   
    5. %c   输出所属的类目,通常就是所在类的全名   
    6. %t   输出产生该日志事件的线程名   
    7. %d   输出日志时间点的日期或时间(默认格式为ISO8601,也可以指定格式,如:%d{yyy MMM dd HH:mm:ss , SSS},或者直接%d{ABSOLUTE})  
    8. %l   输出日志事件的发生位置,包括类目名以及在代码中的行数。(如:test.demo.controller.TestSpringController.getUser(TestSpringController.java:40))  


        类似不同的还有很多,就不一一列述。
        此外,还有要注意的是Appender选项的Threshold设定,是用来配置当前策略日志消息的输出最低层次的,还有一些选项,可以过后查查相关资料。
        日志的配置信息搞定了之后,我们接下来就在程序里添加几行代码,如下

    Java代码  收藏代码
    1. package test.demo.controller;  
    2.   
    3. import javax.annotation.Resource;  
    4.   
    5. import org.slf4j.Logger;  
    6. import org.slf4j.LoggerFactory;  
    7. import org.springframework.stereotype.Controller;  
    8. import org.springframework.web.bind.annotation.PathVariable;  
    9. import org.springframework.web.bind.annotation.RequestMapping;  
    10. import org.springframework.web.bind.annotation.RequestMethod;  
    11. import org.springframework.web.bind.annotation.ResponseBody;  
    12. import test.demo.dao.UserDAO;  
    13. import test.demo.data.User;  
    14.   
    15. @Controller  
    16. public class TestSpringController {  
    17.   
    18.     private static final Logger logger = LoggerFactory.getLogger(TestSpringController.class);    
    19.       
    20.     @Resource    
    21.     private UserDAO userDao;  
    22.       
    23.     @ResponseBody  
    24.     @RequestMapping(value="/getUser/{userId}", method=RequestMethod.GET)  
    25.     public String  getUser(@PathVariable Integer userId) {  
    26.         User user = userDao.getUserById(userId);  
    27.         logger.info("这个用户的名字是:{},年龄是{}" , user.getName(), user.getAge());   
    28.         logger.error("这个只是个测试:{}" , user.getName());  
    29.         return user.getName() + " , Hello Controller!";  
    30.     }  
    31.   
    32. }  


        我们为了突出效果,此处只留了我们所需的代码,OK,清理构建,打包部署,然后看看运行结果怎么样。

    第三步:运行结果
        服务器启动之后,我们可以看到,日志系统开始工作了,部分截图如下
       

        接着我们在浏览器输入:http://localhost:8080/demo/getUser/1、http://localhost:8080/demo/getUser/2,回车然后就可以在控制台看到以下内容

    Java代码  收藏代码
    1. [framework][17:04:28,801-com.alibaba.druid.pool.DruidDataSource.init(DruidDataSource.java:785)][INFO]:{dataSource-1} inited   
    2. [framework][17:04:28,972-test.demo.controller.TestSpringController.getUser(TestSpringController.java:27)][INFO]:这个用户的名字是:tom,年龄是2   
    3. [framework][17:04:28,972-test.demo.controller.TestSpringController.getUser(TestSpringController.java:28)][ERROR]:这个只是个测试:tom   
    4. [framework][17:04:44,446-test.demo.controller.TestSpringController.getUser(TestSpringController.java:27)][INFO]:这个用户的名字是:jerry,年龄是1   
    5. [framework][17:04:44,446-test.demo.controller.TestSpringController.getUser(TestSpringController.java:28)][ERROR]:这个只是个测试:jerry   


        然后去D盘下的logs文件夹下,可看到这两个日志文件已经生成
       

        好了,到此为止,我们已经成功的在系统中添加了日志功能。

  • 相关阅读:
    10 个深恶痛绝的 Java 异常。。
    为什么公司宁愿 25K 重新招人,也不给你加到 20K?原因太现实……
    推荐一款代码神器,代码量至少省一半!
    Spring Cloud Greenwich 正式发布,Hystrix 即将寿终正寝。。
    hdu 3853 LOOPS(概率 dp 期望)
    hdu 5245 Joyful(期望的计算,好题)
    hdu 4336 Card Collector(期望 dp 状态压缩)
    hdu 4405 Aeroplane chess(概率+dp)
    hdu 5036 Explosion(概率期望+bitset)
    hdu 5033 Building (单调栈 或 暴力枚举 )
  • 原文地址:https://www.cnblogs.com/2016-10-07/p/6873673.html
Copyright © 2011-2022 走看看