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. IEPNGFix 解决IE6支持PNG透明问题

    IE6本身是支持索引色透明度(PNG8)格式,但不支持真彩色透明度(PNG24)格式. 使用IE PNG Fix 2.0可以完美解决IE6支持PNG透明问题,而且支持背景定位和重复属性. IE PNG ...

  2. gridview 自动序号 合计

    第一种方式,直接在Aspx页面GridView模板列中.这种的缺点是到第二页分页时又重新开始了. <asp:TemplateField HeaderText="序号" Ins ...

  3. 转oracle 学习 - 表空间

    Oracle 数据库的表空间和 Oracle 数据库数据文件 关于 Oracle 数据库的表空间. 很多 Oracle 初学者弄不明白表空间的概念和意义,他们只知道给数据库建表的时候需要到表空间这个东 ...

  4. 系列文章--从零开始学习ASP.NET MVC 1.0

    从零开始学习ASP.NET MVC 1.0 (一) 开天辟地入门篇 从零开始学习 ASP.NET MVC 1.0 (二) 识别URL的Routing组件 从零开始学习 ASP.NET MVC 1.0 ...

  5. JS实现表单多文件上传样式美化支持选中文件后删除相关项

    http://www.youdaili.net/javascript/5903.html

  6. postman的Testing examples(测试脚本示例)

    测试代码会在发送request并且接收到responses后执行. 1.设置环境变量 postman.setEnvironmentVariable("key", "val ...

  7. GitHub10岁之际HanLP自然语言处理包用户量跃居榜首

    在本周,GitHub终于度过了属于它自己的十周岁生日.这个在2008年由3个来自旧金山的年轻人创建的基于Git的代码托管网站,先后超越了元老级的SourceForge和背景强大的Google Code ...

  8. 十二、jdk工具之jcmd介绍(堆转储、堆分析、获取系统信息、查看堆外内存)

    目录 一.jdk工具之jps(JVM Process Status Tools)命令使用 二.jdk命令之javah命令(C Header and Stub File Generator) 三.jdk ...

  9. 小甲鱼-013元组tuple:上了枷锁的列表

    1.创建和访问一个元组 1.1创建元组 元组的标志性符号是 , tuple1 = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10) #定义单个元素的元组,要加 , tuple2 = (1 ...

  10. 上Google Adsense个人的一点体验

    最近我想开通一个Google Adsense帐号,因为以前注册过一个Google帐号,所以我以为两个是可以共通的,因为很久没上Google帐号,我记不太清密码了,所以我先是登录了Google,登上去了 ...