log4j 一直有个问题无法满足我,有可能我还不知道怎么去使用它。

就是他会把项目中所有的日志信息都记到一个文件里面,而业务系统往往需要根据某个业务流程查看日志分析。

public class BusinessLogUtil {
public enum Level {
ERROR(40, "ERROR"),
WARN(30, "WARN"),
INFO(20, "INFO"),
DEBUG(10, "DEBUG"),
TRACE(0, "TRACE"); private int levelInt;
private String levelStr; private Level(int i, String s) {
this.levelInt = i;
this.levelStr = s;
} public int toInt() {
return this.levelInt;
} @Override
public String toString() {
return this.levelStr;
}
} /**
* 得到记录日志所有的文件:行号
*
* @return
*/
private static String getLineInfo() {
StackTraceElement ste = new Throwable().getStackTrace()[3];
return MessageFormat.format("[{0}:{1}]", ste.getClassName(), ste.getLineNumber());
} /**
* 记录日志信息
*
* @param businessName
* @param content
*/
private void write(String businessName, Level logLevel, String content) {
String logKey = businessName;
if (logKey.contains("_")) {
logKey = logKey.split("_")[0];
}
boolean isContinue = true; //TODO 此处根据 businessName 去数据库里面看这个业务日志有没有要求开启
if (!isContinue) {
//如果Elb_Settings 没开启开关,则不记录日志
return;
}
FileOutputStream out = null;
BufferedOutputStream Buff = null;
try {
Date currentDate = new Date();
String logRoot = System.getProperty("catalina.home");
if (StringUtil.isNullOrEmpty(logRoot)) {
logRoot = "";
}
String fileName = logRoot + "/logs/" + businessName + "_" + logLevel.levelStr.toLowerCase() + "." + com.iron.fast.util.DateUtil.toFormatString("yyyy-MM-dd", currentDate) + ".log";
out = new FileOutputStream(fileName, true);
Buff = new BufferedOutputStream(out);
String msg = MessageFormat.format("{0} {1} {2} - {3}\r\n", DateUtil.toFormatString("yyyy-MM-dd HH:mm:ss", currentDate), logLevel.levelStr, getLineInfo(), content);
Buff.write(msg.getBytes("utf-8"));
Buff.flush();
Buff.close();
} catch (Exception var15) {
var15.printStackTrace();
} finally {
try {
Buff.close();
out.close();
} catch (Exception var14) {
var14.printStackTrace();
}
}
} /**
* 业务日志
*
* @param businessName
* @param content
*/
public void info(String businessName, String content) {
write(businessName, Level.INFO, content);
} /**
* 警告日志,同时也会记录到 info 中
*
* @param businessName
* @param content
*/
public void warn(String businessName, String content) {
write(businessName, Level.WARN, content);
write(businessName, Level.WARN, content);
} /**
* 错误日志,同时也会记录到 info 中,warn 中不记
*
* @param businessName
* @param content
*/
public void error(String businessName, String content) {
write(businessName, Level.ERROR, content);
write(businessName, Level.ERROR, content);
}
}

仿log4j 写 log 代码的更多相关文章

  1. PHP实现写LOG日志的代码

    这篇文章给大家介绍的内容是关于PHP实现写LOG日志的代码,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. public function write_log(){ //设置目录时间 ...

  2. Java 写 Log

    . 一个最基本的例子 使用Logging框架写Log基本上就三个步骤 引入loggerg类和logger工厂类 声明logger 记录日志 下面看一个例子 //1. 引入slf4j接口的Logger和 ...

  3. 关于Quartz.NET作业调度框架的一点小小的封装,实现伪AOP写LOG功能

    Quartz.NET是一个非常强大的作业调度框架,适用于各种定时执行的业务处理等,类似于WINDOWS自带的任务计划程序,其中运用Cron表达式来实现各种定时触发条件是我认为最为惊喜的地方. Quar ...

  4. 基于.Net Framework 4.0 Web API开发(3):ASP.NET Web APIs 异常的统一处理Attribute 和统一写Log 的Attribute的实现

    概述:  ASP.NET Web API 的好用使用过的都知道,没有复杂的配置文件,一个简单的ApiController加上需要的Action就能工作.但是项目,总有异常发生,本节就来谈谈API的异常 ...

  5. golang仿AS3写的ByteArray

    用golang写了个仿AS3写的ByteArray,稍微有点差别,demo能成功运行,还未进行其他测试 主要参考的是golang自带库里的Buffer,结合了binary 来看看demo: packa ...

  6. Lombok : 让你写 Java代码像C#一样爽

    前言 我曾经是一名 .Net 开发,如今的我是一名 Java 开发者.在我享受着 Java 成熟的生态时,我常常怀念 c# 简洁的语法:自动属性.类型推断.自动初始化器 .... 鱼,我所欲也,熊掌亦 ...

  7. 朱晔的互联网架构实践心得S2E2:写业务代码最容易掉的10种坑

    我承认,本文的标题有一点标题党,特别是写业务代码,大家因为没有足够重视一些细节最容易调的坑(侧重Java,当然,本文说的这些点很多是不限制于语言的). 1.客户端的使用 我们在使用Redis.Elas ...

  8. 在wxml中直接写js代码(wxs)

    我们在h5开发中,很多时候要在html中写到js代码,这个很容易实现.但是在微信小程序开发中,是不能直接在wxml中写js代码的,因此就有了wxs.在wxml中用wxs代码,有以下几种方式(在小程序文 ...

  9. 使用Vim写LaTeX代码(Vim+Vimtex+Skim)

    最近在写博客的时候发现对数学公式的支持并不好,于是就想寻找一个解决方案.我本身是一个爱折腾的人,有时尽管有现成的解决方案我有事也不愿意去用.于是多方查找资料,想寻求一个自定义的解决方案,最终把自己的目 ...

随机推荐

  1. linux查看磁盘分区

    df  查看磁盘分区使用状况 用法:df [选项]... [文件]... Show information about the file system on which each FILE resid ...

  2. springboot socketio

    pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="htt ...

  3. 关于base64编码Encode和Decode编码的几种方式

    关于base64编码Encode和Decode编码的几种方式 Base64是一种能将任意Binary资料用64种字元组合成字串的方法,而这个Binary资料和字串资料彼此之间是可以互相转换的,十分方便 ...

  4. Codeforces I. Vessels(跳转标记)

    题目描述: Vessels time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...

  5. Spring源码窥探之:扩展原理BeanFactoryPostProcessor

    BeanPostPorcessor是在bean创建对象初始化前后进行拦截工作,而BeanFactoryPostProcessor是Bean工厂的后置处理器,在Bean定义加载完成之后,Bean实例初始 ...

  6. linux中的alias命令详解

    功能说明:设置指令的别名.语 法:alias[别名]=[指令名称]参 数 :若不加任何参数,则列出目前所有的别名设置.举    例 :ermao@lost-desktop:~$ alias       ...

  7. 爬虫 - 请求库之requests

    介绍 使用requests可以模拟浏览器的请求,比起python内置的urllib模块,requests模块的api更加便捷(本质就是封装了urllib3) 注意:requests库发送请求将网页内容 ...

  8. 内部cms系统测试

    转载至51testing:http://www.51testing.com/html/34/n-4463534.html 内部系统的功能以及如何测试 前文有提到,我定义的内部系统,是一个由目前主流语言 ...

  9. Highcharts error #16: www.highcharts.com/errors/16 js 单例

    一.问题项目某一个页面用的highcharts用来显示一张图表,第一次刷新正常,第二次就出来这个错.1二.解决问题过程在网上找了很多同样是这个错误的解决方案. 第一:加载了highstock.js然后 ...

  10. vue之大文件分段上传、断点续传

    需求: 支持大文件批量上传(20G)和下载,同时需要保证上传期间用户电脑不出现卡死等体验: 内网百兆网络上传速度为12MB/S 服务器内存占用低 支持文件夹上传,文件夹中的文件数量达到1万个以上,且包 ...