当前位置: 首页 > news >正文

使用Log4j在系统中配置两个不同的Log输出

转自:http://blog.csdn.net/godroad/archive/2006/02/24/607940.aspx

 

一般的Log的使用,通过配置Log4j的配置文件,就可以生成Log.

在开发中碰到一个对Log要求比较高的需求。要求Log的输出分成两类,一类是普通Log,就是平常操作记录的Log;一类是异常Log,就是在出现异常的时候将异常记录下来。

两类log要在不一样的文件中输出。普通log纪录在三个文件中循环使用。异常Log则是在运行出现异常的时候新建一个文件详细记录异常的内容,一次运行出现的异常信息记录在一个文件中,下次运行出现异常则新建一个文件。

这个需求不能简单的通过写Log4j的配置文件来实现,而需要在代码中调用Log4j的类来实现。

public class LogRun {

  //设定两个Log
 public static Logger normalLogger = Logger.getLogger("normal.logger");
 public static Logger exceptionLogger = Logger.getLogger("exception.logger");
 public static final String PROFILE = "log4j.properties";

  //设定异常log输出的路径
 private static final String PATH = "log/exception/";


 static {
  URL configFileResource = LogRun.class.getResource(PROFILE);
  PropertyConfigurator.configure(configFileResource);
 }
 

  //构造方法,生成一个新的异常Log文件
 public LogRun(){
  try {
   Date date = new Date();
   SimpleDateFormat sf = new SimpleDateFormat("yyyyMMddHHmmss");
   String fileName = PATH + "exception_" + sf.format(date).toString() + ".log";
   FileAppender exceptionAppender = new FileAppender(new SimpleLayout(), fileName);
   exceptionLogger.addAppender(exceptionAppender);
  } catch (Exception e) {
   MessageBox.errorBox(e);
  }
 }
 
}

在代码中,只要初始化:

public static Logger logger = Logger.getLogger(Log.class);

就可以通过

LogRun.normalLogger.debug来记录普通Log。

当第一次出现异常的时候,则需要初始化LogRun方法创建一个异常文件。并且通过LogRun.exceptionLogger.error来记录异常Log。在下次出现异常的时候

则只要调用LogRun.exceptionLogger.error来记录就OK了。

附上配置文件:

log4j.category.normal.logger=DEBUG, normal,stdout
log4j.category.exception.logger=ERROR

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy/MM/dd HH:mm:ss.SSS} %-5p  %m%n

log4j.appender.normal=org.apache.log4j.RollingFileAppender
log4j.appender.normal.File=log/normal.log
log4j.appender.normal.MaxFileSize=100kb
log4j.appender.normal.MaxBackupIndex=4
log4j.appender.normal.layout=org.apache.log4j.PatternLayout
log4j.appender.normal.layout.ConversionPattern=%d{yyyy/MM/dd HH:mm:ss.SSS} %-5p  %m%n

相关文章:

  • 去除List 中所有的null
  • sql 2000 使用视图错误
  • 继承 HttpURLConnection 的自定义子类转换
  • 绿色版手动配置tomcat
  • 解决eclipse 修改替换xml文件,卡死 慢
  • Eclipse更改默认字符集utf-8
  • Web app root system property already set to different value: 'webapp.root'
  • (html转换)StringEscapeUtils类的转义与反转义方法
  • js判断是否存在父页面
  • Eclipse Removing obsolete files from server 问题
  • paoding-rose
  • 判断类中的某个属性 是否是某个类的派生子类
  • mysql 复制表结构语句
  • js java 转 html code
  • eclipse + tomcat 重复加载 多工程 host
  • “Material Design”设计规范在 ComponentOne For WinForm 的全新尝试!
  • 2017 年终总结 —— 在路上
  • Angular6错误 Service: No provider for Renderer2
  • css系列之关于字体的事
  • el-input获取焦点 input输入框为空时高亮 el-input值非法时
  • HTML-表单
  • java2019面试题北京
  • javascript面向对象之创建对象
  • Java多线程(4):使用线程池执行定时任务
  • Js基础知识(一) - 变量
  • React+TypeScript入门
  • sublime配置文件
  • vagrant 添加本地 box 安装 laravel homestead
  • vue+element后台管理系统,从后端获取路由表,并正常渲染
  • 分布式熔断降级平台aegis
  • 关于List、List?、ListObject的区别
  • 聊聊flink的TableFactory
  • 前端
  • 前端每日实战:70# 视频演示如何用纯 CSS 创作一只徘徊的果冻怪兽
  • 前端相关框架总和
  • 原创:新手布局福音!微信小程序使用flex的一些基础样式属性(一)
  • 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署
  • ​VRRP 虚拟路由冗余协议(华为)
  • ​卜东波研究员:高观点下的少儿计算思维
  • ​渐进式Web应用PWA的未来
  • ​软考-高级-信息系统项目管理师教程 第四版【第14章-项目沟通管理-思维导图】​
  • #pragma 指令
  • #Z0458. 树的中心2
  • $jQuery 重写Alert样式方法
  • (4) PIVOT 和 UPIVOT 的使用
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (阿里巴巴 dubbo,有数据库,可执行 )dubbo zookeeper spring demo
  • (附源码)springboot美食分享系统 毕业设计 612231
  • (附源码)ssm高校升本考试管理系统 毕业设计 201631
  • (附源码)计算机毕业设计ssm本地美食推荐平台
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (附源码)计算机毕业设计大学生兼职系统
  • (十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)
  • (四) 虚拟摄像头vivi体验
  • (算法)Travel Information Center