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. vmstat 内存信息

    vmstat - Report virtual memory statistics 报告虚拟内存统计信息. 展示的信息可以用做系统资源监控. 语法格式: vmstat [options] [delay ...

  2. meibu ddns update command

    http://main.meibu.com/ip/login.asp?name=[USERNAME]&pwd=[PASSWORD]

  3. Python并发编程-GIL全局解释器锁

    Python并发编程-GIL全局解释器锁 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.GIL全局解释器锁概述 CPython 在解释器进程级别有一把锁,叫做GIL,即全局解释 ...

  4. 虚拟机网络设置(NAT模式)

    虚拟机网络设置(NAT模式) linux 1. 设置虚拟机网络 1.1. NAT子网设置 1.2. 网卡配置文件设置 1.3. 重启网络服务 1.4. 配置端口转发 2. 配置网络共享 预期想要搭建本 ...

  5. [POJ2083] Fracal

    Description A fractal is an object or quantity that displays self-similarity, in a somewhat technica ...

  6. ActiveMQ-启动服务异常

    如果报这种异常: Caused by: java.io.IOException: Failed to bind to server socket: tcp://0.0.0.0:61616?maximu ...

  7. 独角兽估值30亿美金,我们聊聊RPA是什么

    https://www.jianshu.com/p/397ecd238ffc 缩短法定工作时间,已成国际劳动立法趋势,全球政府都曾面对这样的议题,过往企业IT也在思考这件事,开发出更好的软件系统帮助员 ...

  8. LeetCode 742. Closest Leaf in a Binary Tree

    原题链接在这里:https://leetcode.com/problems/closest-leaf-in-a-binary-tree/ 题目: Given a binary tree where e ...

  9. rust cargo 一些方便的三方cargo 子命令扩展

    内容来自cargo 的github wiki,记录下,方便使用 可选的列表 cargo-audit - Audit Cargo.lock for crates with security vulner ...

  10. Html结构标准

    < ! doctype html> 声明文档类型 <html> 根标签 <head> 头标签 <title></title> 标题标签 &l ...