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

[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. import com.markey.messageboard.app.Dosomething;
  10. import com.markey.messageboard.configs.SpringConfig;
  11. import com.markey.messageboard.model.Messageboard;
  12. @RunWith(SpringJUnit4ClassRunner.class)
  13. @ContextConfiguration(classes = SpringConfig.class)
  14. //@PropertySource("classpath:/test.properties")
  15. //@PropertySource("classpath:/log4j.properties")
  16. public class helloSpring {
  17. @Autowired
  18. Environment evn;
  19. @Autowired
  20. Dosomething dosomething;
  21. @Autowired
  22. Logger logger;
  23. @Value("${god.hello}") String titleString;
  24. @Test
  25. public void testWorld(){
  26. //      System.out.println(evn.containsProperty("god.hello"));
  27. //      Messageboard messageBoard = new Messageboard();
  28. //      messageBoard.setTitle(titleString);
  29. //      System.out.println(dosomething.readWall(messageBoard));
  30. //      dosomething.readWall(messageBoard);
  31. logger.error("hello,i am error messages");
  32. }
  33. }

一、引入log4j软件包

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

mava引用如下:

[plain] view plain copy

  1. <!--https://mvnrepository.com/artifact/log4j/log4j -->
  2. <dependency>
  3. <groupId>log4j</groupId>
  4. <artifactId>log4j</artifactId>
  5. <version>1.2.17</version>
  6. </dependency>
  7. <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core-->
  8. <dependency>
  9. <groupId>org.apache.logging.log4j</groupId>
  10. <artifactId>log4j-core</artifactId>
  11. <version>2.7</version>
  12. </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. #console config
  6. log4j.appender.<span style="color:#FF0000;">stdout</span>=org.apache.log4j.ConsoleAppender
  7. #errorfile config
  8. log4j.appender.<span style="color:#FF0000;">errorfile</span>=org.apache.log4j.DailyRollingFileAppender
  9. log4j.appender.errorfile.File= c:/logs/app_logs/error.log
  10. #infofile config
  11. log4j.appender.<span style="color:#FF0000;">infofile</span>=org.apache.log4j.DailyRollingFileAppender
  12. 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. #console config
  5. log4j.appender.stdout=org.apache.log4j.ConsoleAppender ###定义一个控制台输出目的地
  6. log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
  7. log4j.appender.stdout.layout.ConversionPattern=%m%n
  8. log4j.appender.stdout.encoding=GB18030
  9. #errorfile config
  10. log4j.appender.errorfile=org.apache.log4j.DailyRollingFileAppender ###定义一个每日日志输出目的地
  11. log4j.appender.errorfile.File= c:/logs/app_logs/error.log ###输出文件路径
  12. log4j.appender.errorfile.Threshold=error  ###只有error以上级别的日志才会被输出
  13. log4j.appender.errorfile.DatePattern='.'yyyy-MM-dd ###指定日期格式
  14. log4j.appender.errorfile.Append=true ###指定日志文件以追加方式写入
  15. log4j.appender.errorfile.layout=org.apache.log4j.PatternLayout
  16. log4j.appender.errorfile.layout.ConversionPattern=[%-5p]|%d|%C|%L|%m%n
  17. log4j.appender.errorfile.encoding=GB18030 ###指定日志文件编码
  18. #infofile config
  19. log4j.appender.infofile=org.apache.log4j.DailyRollingFileAppender
  20. log4j.appender.infofile.File=c:/logs/app_logs/info.log
  21. log4j.appender.infofile.Threshold=info ###只有error以上级别的日志才会被输出
  22. log4j.appender.infofile.DatePattern='.'yyyy-MM-dd
  23. log4j.appender.infofile.Append=true
  24. log4j.appender.infofile.layout=org.apache.log4j.PatternLayout
  25. log4j.appender.infofile.layout.ConversionPattern=[%-5p]|%d|%C|%L|%m%n
  26. log4j.additivity.infofile=false
  27. 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. }

在spring引入log4j(非web项目)的更多相关文章

  1. springboot 创建非web项目及数据源简单使用

    项目组马上要使用springboot来重构程序,首先要对几个比较小的非web项目重构,所以新手入门,简单做了个小例子 代码结构如下: dao层 package com.mysping.myboot00 ...

  2. SpringBootWEB项目和非Web项目的全局异常捕获

    一.简介 SpringBoot的WEB异常捕获,如果是WEB项目的话,可以直接处理Controller中的异常.如果不是WEB项目的话,就需要使用AspectJ来做切面. 二.WEB项目 packag ...

  3. 【.net深呼吸】非 Web 项目使用缓存

    从.net 4 开始,非web项目也可以使用缓存技术,故曰:.net 4 乃框架成熟之标志也. 对于缓存嘛,耍过 ASP.NET 的伙伴们肯定知道,这么说吧,就是将一些使用频率较高的数据放于内存中,并 ...

  4. Spring mvc创建的web项目,如何获知其web的项目名称,访问具体的链接地址?

    Spring mvc创建的web项目,如何获知其web的项目名称,访问具体的链接地址? 访问URL:  http://localhost:8090/firstapp/login 在eclipse集成的 ...

  5. Spring Boot构建的Web项目如何在服务端校验表单输入

    本文首发于个人网站:Spring Boot构建的Web项目如何在服务端校验表单输入 这个例子用于演示在Spring Boot应用中如何验证Web 应用的输入,我们将会建立一个简单的Spring MVC ...

  6. spring boot + Thymeleaf开发web项目

    "Spring boot非常适合Web应用程序开发.您可以轻松创建自包含的HTTP应用.web服务器采用嵌入式Tomcat,或者Jetty等.大多数情况下Web应用程序将使用 spring- ...

  7. spring学习(四) ———— 整合web项目(SSH)

    清楚了spring的IOC 和 AOP,最后一篇就来整合SSH框架把,记录下来,以后应该会用的到. --WH 一.web项目中如何使用spring? 当tomcat启动时,就应该加载spring的配置 ...

  8. spring(四) 手动整合web项目(SSH)

    清楚了spring的IOC 和 AOP,最后一篇就来整合SSH框架把,记录下来,以后应该会用的到. --WH 一.web项目中如何使用spring? 当tomcat启动时,就应该加载spring的配置 ...

  9. (一)JAVA项目(非web项目)部署到windows服务器运行

    [转]http://blog.csdn.net/tracy19880727/article/details/11205063 一般服务器运行的几乎都是web项目,今天遇到一个问题,把写好的Java项目 ...

随机推荐

  1. PHP 中的对象传递

    <?php class A { public $age = 0; public $username = ""; public $obj = null; } $a = new ...

  2. 【转】每天一个linux命令(56):netstat命令

    原文网址:http://www.cnblogs.com/peida/archive/2013/03/08/2949194.html netstat命令用于显示与IP.TCP.UDP和ICMP协议相关的 ...

  3. Linux & Oracle目录说明

    /bin:存放着一百多个Linux下常用的命令.工具  /dev:存放着Linux下所有的设备文件!  /home:用户主目录,每建一个用户,就会在这里新建一个与用户同名的目录,给该用户一个自己的空间 ...

  4. linux 命令 随笔

    1 查找命令 which (寻找执行档) :这个指令是根据PATH这个环境变量所规范的路径,去搜寻执行档的档名,所以,重点是找出执行档而已,which 后面接的是完整档名,也就说执行文件 wherei ...

  5. c#中如何保存焦点控件?

    对所有文本框添加焦点获得事件,头部再定义一个全局的object或者control的类型对象,在焦点获得事件中把当前控件对象赋值给之前定义的object或者control对象,操作的话就对这个全局量操作 ...

  6. 白话 Java Bean

    所谓的Java Bean,就是一个java类,编译后成为了一个后缀名是 .class的文件.这就是Java Bean,不就是Java类吗? 1. 什么是 Java Bean? 很多培训机构在讲java ...

  7. 1062 Talent and Virtue (25 分)

    1062 Talent and Virtue (25 分) About 900 years ago, a Chinese philosopher Sima Guang wrote a history ...

  8. js之ActiveX控件使用说明 new ActiveXObject()

    什么是 ActiveX 控件? ActiveX 控件广泛用于 Internet.它们可以通过提供视频.动画内容等来增加浏览的乐趣.不过,这些程序可能出问题或者向您提供不需要的内容.在某些情况下,这些程 ...

  9. pyH支持python3

    记录下,感谢大神,原地址https://www.cnblogs.com/yunmenzhe/p/6293428.html,侵删 1.修改xxx/python3.5/pyh.py权限 sudo chmo ...

  10. 用cmd导入oracle的.dmp文件和修改oracle管理员密码

    1,首先创建用户 语法[创建用户]: create user 用户名 identified by 口令[即密码]: 例子:create user zhengxin identified by zhen ...