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. solr学习三(测试类,含普通与ExtractingRequestHandler测试)

    solr客户端基本是配置出来的,服务端可以对其进行测试,我使用的是solrj服务端. 如果初学solr,先使用普通的测试类: import java.io.IOException; import ja ...

  2. Open-sourcing sso, the way we secure services at BuzzFeed

    文章来源: https://tech.buzzfeed.com/unleashing-the-a6a1a5da39d6 说明: 设计有好多地方值得借鉴,粘贴过来的排版不好 Today we are o ...

  3. 00.嵌入式Linux开发环境搭建

     3.虚拟机上网配置 虚拟机如果要从网上获取资源,就要能够访问外网.虚拟机有三种上网方式:桥接上网,NAT上网,单主机模式[没用过].本节从原理和操作2个方面讲了NAT方式和桥接方式这2种不同的虚拟机 ...

  4. summernote 如何设置为只读?

    从 summernote 的文档看到以下信息. disable, enable You can disable editor by API. $('#summernote').summernote(' ...

  5. 【转】每天一个linux命令(10):cat 命令

    原文网址:http://www.cnblogs.com/peida/archive/2012/10/30/2746968.html cat命令的用途是连接文件或标准输入并打印.这个命令常用来显示文件内 ...

  6. yarn 知识点

    yarn 与 npm 功能对应表格: 命令 yarn npm 初始化 yarn init npm init 安装项目所有包(注意) yarn npm install 添加 dependencies y ...

  7. webpack 的插件 DllPlugin 和 DllReferencePlugin

    在项目中,引入了比较多的第三方库,导致项目大,而每次修改,都不会去修改到这些库,构建却都要再打包这些库,浪费了不少时间.所以,把这些不常变动的第三方库都提取出来,下次 build 的时候不再构建这些库 ...

  8. centos7虚拟机安装出现license information

    问题:vm 10下安装CentOs7后无法启动.出现一个license information页面 解决办法:出现license information,即说明需要同意许可信息,输入1-回车-2-回车 ...

  9. Centos 6.5 yum 安装Apache软件

    首先在系统上面查询一下是否已经安装了apache 软件[Apache软件在linux系统里的名字是httpd] rpm    -qa    httpd 如果有返回的信息,则会显示已经安装的软件.如果没 ...

  10. [.net]webform 版本冲突

    ASP.NET Web Pages版本问题 调试后浏览器提示: 检测到 ASP.NET Web Pages 的冲突版本: 指定的版本为“1.0.0.0”,而 bin 中的版本为“2.0.0.0”.要继 ...