zoukankan      html  css  js  c++  java
  • 在spring引入log4j(非web项目)

    https://blog.csdn.net/u012578322/article/details/78012183

    在spring中使用log4j

    • 引入log4j软件包
    • 配置log4j属性
    • 加载log4j配置文件
      • 默认加载
      • 手动加载
    • 使用logger

    本文的整体代码结构是在已经引入spring基本应用的前提下,在spring配置文件中通过@Bean注解创建一个Logger bean,然后在测试代码中使用。

    [java] view plain copy

    1. import java.io.File;  
    2. import java.io.FileInputStream;  
    3. import java.io.FileNotFoundException;  
    4. import java.net.URL;  
    5.   
    6. import org.apache.log4j.Logger;  
    7. import org.apache.logging.log4j.core.config.ConfigurationSource;  
    8. import org.apache.logging.log4j.core.config.Configurator;  
    9. import org.springframework.context.annotation.Bean;  
    10. import org.springframework.context.annotation.ComponentScan;  
    11. import org.springframework.context.annotation.Configuration;  
    12. import org.springframework.context.annotation.EnableAspectJAutoProxy;  
    13. import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;  
    14.   
    15. @Configuration  
    16. @EnableAspectJAutoProxy  
    17. @ComponentScan({"com.markey.messageboard.app.impl","com.markey.messageboard.aop"})  
    18. public class SpringConfig {  
    19. //  @Bean  
    20. //  public static PropertySourcesPlaceholderConfigurer placeholderConfigurer(){  
    21. //      PropertySourcesPlaceholderConfigurer placeholderConfigurer = new PropertySourcesPlaceholderConfigurer();  
    22. //      return placeholderConfigurer;  
    23. //  }  
    24.     @Bean  
    25.     public static Logger logger(){  
    26.         String path="/com/log4j.properties";  
    27.         URL url=SpringConfig.class.getResource(path);  
    28.         ConfigurationSource source;  
    29.         try {  
    30.             source = new ConfigurationSource(new FileInputStream(new File(url.getPath())),url);  
    31.             Configurator.initialize(null, source);  
    32.         } catch (FileNotFoundException e) {  
    33.             // TODO Auto-generated catch block  
    34.             e.printStackTrace();  
    35.         }  
    36.         Logger logger = Logger.getLogger(SpringConfig.class);  
    37.         return logger;  
    38.     }  
    39. }  

    [java] view plain copy

    1. import org.apache.log4j.Logger;  
    2. import org.junit.Test;  
    3. import org.junit.runner.RunWith;  
    4. import org.springframework.beans.factory.annotation.Autowired;  
    5. import org.springframework.beans.factory.annotation.Value;  
    6. import org.springframework.core.env.Environment;  
    7. import org.springframework.test.context.ContextConfiguration;  
    8. import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;  
    9.   
    10. import com.markey.messageboard.app.Dosomething;  
    11. import com.markey.messageboard.configs.SpringConfig;  
    12. import com.markey.messageboard.model.Messageboard;  
    13.   
    14. @RunWith(SpringJUnit4ClassRunner.class)  
    15. @ContextConfiguration(classes = SpringConfig.class)  
    16. //@PropertySource("classpath:/test.properties")  
    17. //@PropertySource("classpath:/log4j.properties")  
    18. public class helloSpring {  
    19.       
    20.     @Autowired  
    21.     Environment evn;  
    22.     @Autowired  
    23.     Dosomething dosomething;  
    24.     @Autowired  
    25.     Logger logger;  
    26.     @Value("${god.hello}") String titleString;  
    27.     @Test  
    28.     public void testWorld(){  
    29. //      System.out.println(evn.containsProperty("god.hello"));  
    30. //      Messageboard messageBoard = new Messageboard();  
    31. //      messageBoard.setTitle(titleString);  
    32. //      System.out.println(dosomething.readWall(messageBoard));  
    33. //      dosomething.readWall(messageBoard);  
    34.         logger.error("hello,i am error messages");  
    35.     }  
    36.   
    37. }  

    一、引入log4j软件包

    使用log4j涉及两个库文件:log4j和log4j-core

    mava引用如下:

    [plain] view plain copy

    1. <!--https://mvnrepository.com/artifact/log4j/log4j -->  
    2.   
    3. <dependency>  
    4.   
    5.    <groupId>log4j</groupId>  
    6.   
    7.    <artifactId>log4j</artifactId>  
    8.   
    9.    <version>1.2.17</version>  
    10.   
    11. </dependency>  
    12.   
    13. <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core-->  
    14.   
    15. <dependency>  
    16.   
    17.    <groupId>org.apache.logging.log4j</groupId>  
    18.   
    19.    <artifactId>log4j-core</artifactId>  
    20.   
    21.    <version>2.7</version>  
    22.   
    23. </dependency>  

    二、配置log4j属性

    log4j配置文件支持xml格式和properites格式,下面为例properites介绍需要配置的内容。

    配置文件分为三部分配置:

    l  日志级别配置

    l  输出目的地配置

    l  输出样式配置

    1.     日志级别配置

    日志级别配置分为两种:根目录级别和包目录基本。

    顾名思义,根目录级别就是定义总的日志级别,具体到某个特定的包路径下的类,还可以定制日志级别。

    Log4j自定义的日志级别有:OFF >FATAL > ERROR > WARN > INFO > DEBUG > ALL

    但是建议只使用ERROR > WARN > INFO > DEBUG这四种。通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。比如在这里定 义了 INFO 级别,则应用程序中所有 DEBUG 级别的日志信息将不被打印出来 。

    [plain] view plain copy

    1. ###定义根日志级别为info###  
    2. ###定义com.markey.messageboard日志级别为debug###  

    [plain] view plain copy

    1. ###定义com.markey.messageboard.springtest日志级别为info###  

    log4j.rootLogger=infolog4j.logger.com.markey.messageboard=DEBUGlog4j.logger.com.markey.messageboard.springtest=info

    
     

    2.     输出目的地配置

    定义输出目的地,定义完成后需要配置根目录启用,可以定义多个目的地输出。

    Log4j 提供的 appender 有以下几种:

    1.    org.apache.log4j.ConsoleAppender(控制台),

    2.    org.apache.log4j.FileAppender (文件),

    3.    org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),

    4.    4.org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个   新的文件)

    5.    org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)

    [html] view plain copy

    1. ###配置输出目的地###  
    2. log4j.rootLogger=info,<span style="color:#FF0000;">stdout,errorfile,infofile </span>  
    3. log4j.logger.com.markey.messageboard=DEBUG  
    4. log4j.logger.com.markey.messageboard.springtest=info  
    5.   
    6. #console config  
    7. log4j.appender.<span style="color:#FF0000;">stdout</span>=org.apache.log4j.ConsoleAppender  
    8.   
    9. #errorfile config  
    10. log4j.appender.<span style="color:#FF0000;">errorfile</span>=org.apache.log4j.DailyRollingFileAppender   
    11. log4j.appender.errorfile.File= c:/logs/app_logs/error.log   
    12.   
    13. #infofile config  
    14. log4j.appender.<span style="color:#FF0000;">infofile</span>=org.apache.log4j.DailyRollingFileAppender   
    15. log4j.appender.infofile.File=c:/logs/app_logs/info.log  

    3.     输出样式配置

    定义日志样式,在输入目的地配置中使用

    Log4j 提供的 layout 有以下4种:

             1.org.apache.log4j.HTMLLayout (以 HTML 表格形式布局),

             2.org.apache.log4j.PatternLayout (可以灵活地指定布局模式),

             3.org.apache.log4j.SimpleLayout (包含日志信息的级别和信息字符串),

             4.org.apache.log4j.TTCCLayout (包含日志产生的时间、线程、类别等等信息)

      PatternLayout模式使用最多,其 用类似 C 语言中的 printf 函数的打印格式格式化日志信息,打印参数如下:

             %m 输出代码中指定的消息

       %p 输出优先级,即 DEBUG, INFO , WARN , ERROR , FATAL

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

       %c 输出所属的类目,通常就是所在类的全名

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

       %n 输出一个回车换行符,Windows 平台为 “rn” , Unix 平台为 “n”

       %d 输出日志时间点的日期或时间

       %l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。

    Log4j还有其他一些配置:

    l  指定输出到文件的日志级别:

    l  指定输出文件路径

    l  指定输出日志中的日期格式

    l  指定日志日志文件写入方式是否为文件后追加

    l  指定日志编码

    [plain] view plain copy

    1. log4j.rootLogger=info,stdout,errorfile,infofile ###格式为[level] ,appender1,appender2,……  
    2. log4j.logger.com.markey.messageboard=DEBUG  
    3. log4j.logger.com.markey.messageboard.springtest=info  
    4.   
    5. #console config  
    6. log4j.appender.stdout=org.apache.log4j.ConsoleAppender ###定义一个控制台输出目的地  
    7. log4j.appender.stdout.layout=org.apache.log4j.PatternLayout  
    8. log4j.appender.stdout.layout.ConversionPattern=%m%n  
    9. log4j.appender.stdout.encoding=GB18030  
    10.   
    11. #errorfile config  
    12. log4j.appender.errorfile=org.apache.log4j.DailyRollingFileAppender ###定义一个每日日志输出目的地  
    13. log4j.appender.errorfile.File= c:/logs/app_logs/error.log ###输出文件路径  
    14. log4j.appender.errorfile.Threshold=error  ###只有error以上级别的日志才会被输出  
    15. log4j.appender.errorfile.DatePattern='.'yyyy-MM-dd ###指定日期格式  
    16. log4j.appender.errorfile.Append=true ###指定日志文件以追加方式写入  
    17. log4j.appender.errorfile.layout=org.apache.log4j.PatternLayout   
    18. log4j.appender.errorfile.layout.ConversionPattern=[%-5p]|%d|%C|%L|%m%n  
    19. log4j.appender.errorfile.encoding=GB18030 ###指定日志文件编码  
    20.   
    21. #infofile config  
    22. log4j.appender.infofile=org.apache.log4j.DailyRollingFileAppender   
    23. log4j.appender.infofile.File=c:/logs/app_logs/info.log  
    24. log4j.appender.infofile.Threshold=info ###只有error以上级别的日志才会被输出  
    25. log4j.appender.infofile.DatePattern='.'yyyy-MM-dd  
    26. log4j.appender.infofile.Append=true  
    27. log4j.appender.infofile.layout=org.apache.log4j.PatternLayout   
    28. log4j.appender.infofile.layout.ConversionPattern=[%-5p]|%d|%C|%L|%m%n  
    29. log4j.additivity.infofile=false  
    30. log4j.appender.infofile.encoding=GB18030  

    三、加载log4j配置文件

    1、默认加载

    将log4j.properites文件放在src目录下,log4j框架会自动加载配置文件并应用。

    例如我的配置文件放在如下位置,则无需其他配置,会被自动加载。

    2、手动加载

    如果想要使用相对路径加载配置文件,则需要使用到log4j-core中的ConfigurationSource类和Configurator类。

    例如我把配置文件放在如下src目录下代码的一级目录com下:

    则需要手动进行配置文件的加载,主要逻辑就是:根据相对路劲找到配置文件,使用log4j的配置文件加载器Configurator来加载。

    [java] view plain copy

    1. public class SpringConfig {  
    2.     @Bean  
    3.     public static PropertySourcesPlaceholderConfigurer placeholderConfigurer(){  
    4.         PropertySourcesPlaceholderConfigurer placeholderConfigurer = new PropertySourcesPlaceholderConfigurer();  
    5.         return placeholderConfigurer;  
    6.     }  
    7.     @Bean  
    8.     public static Logger logger(){  
    9.         String path="/com/log4j.properties";//定义配置文件路径  
    10.         URL url=SpringConfig.class.getResource(path);//转化配置文件路径  
    11.         try {  
    12.             ConfigurationSource source = new ConfigurationSource(  
    13.                     new FileInputStream(new File(url.getPath())),url);//找到配置文件  
    14.             Configurator.initialize(null, source);//初始化配置  
    15.         } catch (FileNotFoundException e) {  
    16.             // TODO Auto-generated catch block  
    17.             e.printStackTrace();  
    18.         }  
    19.         Logger logger = Logger.getLogger(SpringConfig.class);  
    20.         return logger;  
    21.     }  
    22. }  
  • 相关阅读:
    LeetCode Path Sum II
    LeetCode Longest Palindromic Substring
    LeetCode Populating Next Right Pointers in Each Node II
    LeetCode Best Time to Buy and Sell Stock III
    LeetCode Binary Tree Maximum Path Sum
    LeetCode Find Peak Element
    LeetCode Maximum Product Subarray
    LeetCode Intersection of Two Linked Lists
    一天一个设计模式(1)——工厂模式
    PHP迭代器 Iterator
  • 原文地址:https://www.cnblogs.com/xiang--liu/p/9710130.html
Copyright © 2011-2022 走看看