在spring中使用log4j

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

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

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.net.URL;import org.apache.log4j.Logger;
import org.apache.logging.log4j.core.config.ConfigurationSource;
import org.apache.logging.log4j.core.config.Configurator;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;@Configuration
@EnableAspectJAutoProxy
@ComponentScan({"com.markey.messageboard.app.impl","com.markey.messageboard.aop"})
public class SpringConfig {
//  @Bean
//  public static PropertySourcesPlaceholderConfigurer placeholderConfigurer(){
//      PropertySourcesPlaceholderConfigurer placeholderConfigurer = new PropertySourcesPlaceholderConfigurer();
//      return placeholderConfigurer;
//  }@Beanpublic static Logger logger(){String path="/com/log4j.properties";URL url=SpringConfig.class.getResource(path);ConfigurationSource source;try {source = new ConfigurationSource(new FileInputStream(new File(url.getPath())),url);Configurator.initialize(null, source);} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}Logger logger = Logger.getLogger(SpringConfig.class);return logger;}
}
import org.apache.log4j.Logger;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.env.Environment;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import com.markey.messageboard.app.Dosomething;
import com.markey.messageboard.configs.SpringConfig;
import com.markey.messageboard.model.Messageboard;@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = SpringConfig.class)
//@PropertySource("classpath:/test.properties")
//@PropertySource("classpath:/log4j.properties")
public class helloSpring {@AutowiredEnvironment evn;@AutowiredDosomething dosomething;@AutowiredLogger logger;@Value("${god.hello}") String titleString;@Testpublic void testWorld(){
//      System.out.println(evn.containsProperty("god.hello"));
//      Messageboard messageBoard = new Messageboard();
//      messageBoard.setTitle(titleString);
//      System.out.println(dosomething.readWall(messageBoard));
//      dosomething.readWall(messageBoard);logger.error("hello,i am error messages");}}

一、引入log4j软件包

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

mava引用如下:

<!--https://mvnrepository.com/artifact/log4j/log4j --><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency><!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core--><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.7</version></dependency>

二、配置log4j属性

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

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

l  日志级别配置

l  输出目的地配置

l  输出样式配置

1.     日志级别配置

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

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

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

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

###定义根日志级别为info###
###定义com.markey.messageboard日志级别为debug###
###定义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(将日志信息以流格式发送到任意指定的地方)
###配置输出目的地###
log4j.rootLogger=info,stdout,errorfile,infofile
log4j.logger.com.markey.messageboard=DEBUG
log4j.logger.com.markey.messageboard.springtest=info#console config
log4j.appender.stdout=org.apache.log4j.ConsoleAppender#errorfile config
log4j.appender.errorfile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.errorfile.File= c:/logs/app_logs/error.log #infofile config
log4j.appender.infofile=org.apache.log4j.DailyRollingFileAppender
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  指定日志编码
log4j.rootLogger=info,stdout,errorfile,infofile ###格式为[level] ,appender1,appender2,……
log4j.logger.com.markey.messageboard=DEBUG
log4j.logger.com.markey.messageboard.springtest=info#console config
log4j.appender.stdout=org.apache.log4j.ConsoleAppender ###定义一个控制台输出目的地
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%m%n
log4j.appender.stdout.encoding=GB18030#errorfile config
log4j.appender.errorfile=org.apache.log4j.DailyRollingFileAppender ###定义一个每日日志输出目的地
log4j.appender.errorfile.File= c:/logs/app_logs/error.log ###输出文件路径
log4j.appender.errorfile.Threshold=error  ###只有error以上级别的日志才会被输出
log4j.appender.errorfile.DatePattern='.'yyyy-MM-dd ###指定日期格式
log4j.appender.errorfile.Append=true ###指定日志文件以追加方式写入
log4j.appender.errorfile.layout=org.apache.log4j.PatternLayout
log4j.appender.errorfile.layout.ConversionPattern=[%-5p]|%d|%C|%L|%m%n
log4j.appender.errorfile.encoding=GB18030 ###指定日志文件编码#infofile config
log4j.appender.infofile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.infofile.File=c:/logs/app_logs/info.log
log4j.appender.infofile.Threshold=info ###只有error以上级别的日志才会被输出
log4j.appender.infofile.DatePattern='.'yyyy-MM-dd
log4j.appender.infofile.Append=true
log4j.appender.infofile.layout=org.apache.log4j.PatternLayout
log4j.appender.infofile.layout.ConversionPattern=[%-5p]|%d|%C|%L|%m%n
log4j.additivity.infofile=false
log4j.appender.infofile.encoding=GB18030

三、加载log4j配置文件


1、默认加载

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

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

2、手动加载


如果想要使用相对路径加载配置文件,则需要使用到log4j-core中的ConfigurationSource类和Configurator类。
例如我把配置文件放在如下src目录下代码的一级目录com下:

则需要手动进行配置文件的加载,主要逻辑就是:根据相对路劲找到配置文件,使用log4j的配置文件加载器Configurator来加载。
public class SpringConfig {@Beanpublic static PropertySourcesPlaceholderConfigurer placeholderConfigurer(){PropertySourcesPlaceholderConfigurer placeholderConfigurer = new PropertySourcesPlaceholderConfigurer();return placeholderConfigurer;}@Beanpublic static Logger logger(){String path="/com/log4j.properties";//定义配置文件路径URL url=SpringConfig.class.getResource(path);//转化配置文件路径try {ConfigurationSource source = new ConfigurationSource(new FileInputStream(new File(url.getPath())),url);//找到配置文件Configurator.initialize(null, source);//初始化配置} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}Logger logger = Logger.getLogger(SpringConfig.class);return logger;}
}
												

在spring引入log4j相关推荐

  1. 用Spring与Log4J进行动态日志配置切换

    利用 Spring 与 Log4J 巧妙地进行动态日志配置切换并立即生效 引言: 在开发与生产环境中,我们有时候需要对日志的配置进行动态切换,要调试.监控和检查系统的运行时信息. 一般有两种方法 1. ...

  2. Spring项目log4j配置

    一.pom引入log4j并解决Spring等三方依赖冲突: 冲突解决可以参考: mvn dependency:tree 解决依赖冲突_奔跑的_迷彩狼的博客-CSDN博客 二.引入log4j配置文件: ...

  3. spring中log4j使用

    在Web应用中一般使用一个专门的Servlet来完成Log4J的配置,并保证在web.xml的配置中,这个Servlet位于其它Servlet之前,以便在Servlet和jsp中调用.下面是这个ser ...

  4. Spring配置log4j

    一.添加log4j依赖包 官网下载地址:http://logging.apache.org/log4j/2.x/download.html maven项目配置 <dependency>&l ...

  5. Spring配置log4j实例

    转自:http://www.vijun.com/web/spring/2012/03/5f84f4d935e5b13f01362de76085013d.html Spring配置log4j实例首先需要 ...

  6. spring集成 log4j + slf4j

    以maven web项目为例, 首先.在pom文件引入相关依赖,如下(spring官网文档有介绍): <dependencies><!-- spring 相关 --><d ...

  7. Spring 与 Log4J 进行动态日志配置切换

    引言:     在开发与生产环境中,我们有时候需要对日志的配置进行动态切换,要调试.监控和检查系统的运行时信息.     一般有两种方法     1.通过 Spring 的 Log4jConfigLi ...

  8. spring的log4j listener(webAppRootKey)

    http://blog.csdn.net/pengchua/article/details/1943461 使用spring中的Log4jConfigListener有如如下好处:    1. 动态的 ...

  9. Spring Boot log4j多环境日志级别的控制

    之前介绍了在<Spring boot中使用log4j>,仅通过log4j.properties对日志级别进行控制,对于需要多环境部署的环境不是很方便,可能我们在开发环境大部分模块需要采用D ...

最新文章

  1. 利用cvMinAreaRect2求取轮廓最小外接矩形
  2. 卷积神经网络鼻祖LeNet网络分析
  3. 临时表temporary table
  4. 迁移.net framework 工程到.net core
  5. 前端demo_【前端3分钟】Script Error产生的原因和解法
  6. linux 文件inode,linux文件系统-inode学习整理
  7. android 语音阅读软件,语音阅读器APP
  8. jsx怎么往js里传参数_JSX语法使用详解——终极版
  9. MongoDB学习:关闭mongod方式
  10. js小例子(标签页)
  11. jQuery.proxy用法
  12. Linux设备驱动——驱动模型
  13. 磁盘blk_update_request: I/O error
  14. 什么是 URL Schema
  15. DSP指纹识别系统硬件设计
  16. html隐藏或显示不出来,win7隐藏文件显示不出来
  17. python的spider程序下载_开源网络爬虫程序(spider)一览
  18. 使用HTML+CSS打造经典登录界面 QQ邮箱 链接官网登录
  19. 超强总结,用心分享丨大数据超神之路(三):Linux必备知识
  20. Mac上最强大的截图软件-xnip

热门文章

  1. c语言生成随机数并进行四则运算
  2. idea中导入数据库步骤
  3. 【§暗贱难防xp主题§】
  4. Android系统模拟鼠标键盘详解
  5. 华为nova5pro能换鸿蒙系统吗,华为nova7se可以升级鸿蒙系统吗
  6. 04_Framebuffer设备驱动
  7. 两种最简单方法取本机IP地址
  8. usbasp 和usbisp
  9. OverTheWire-Narnia
  10. 第十七天---PVST