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. web之表单form

    表单是我们平常编写Web应用常用的工具,表单(<form>)用来收集用户提交的数据,发送到服务器.比如,用户提交用户名和密码,让服务器验证,就要通过表单.表单是一个包含表单元素或控件的区域 ...

  2. Spring Cloud 微服务:Eureka+Zuul+Ribbon+Hystrix+SpringConfig实现流程图

    相信现在已经有很多小伙伴已经或者准备使用springcloud微服务了,接下来为大家搭建一个微服务框架,后期可以自己进行扩展.会提供一个小案例: 服务提供者和服务消费者 ,消费者会调用提供者的服务,新 ...

  3. 史上最完整promise源码手写实现

    史上最完整的promise源码实现,哈哈,之所以用这个标题,是因为开始用的标题<手写promise源码>不被收录 promise自我介绍 promise : "君子一诺千金,承诺 ...

  4. 记一次用pip安装docker-compose报错及解决方法

    Docker-Compose 的安装 方法一 # 下载1.25.0 docker compose sudo curl -L "https://github.com/docker/compos ...

  5. django-配置静态页面-celery/redis/nginx

    celery生成静态页面 celery_tasks/tasks.py # 生成静态首页 from django.template import loader, RequestContext # tem ...

  6. 经肝药酶CYP3A4代谢的药物对比记录

    罗非昔布 罗非昔布,解热镇痛抗炎药,选择性环氧化酶-2(COX-2)抑制药,有研究表明,该类药可增加心脏病发作.卒中或其他严重后果概率,不良反应为,增加心肌梗死和心脏猝死的风险,现已撤市.经肝和肠壁细 ...

  7. Problem F. Wiki with String

    Problem F. Wiki with StringInput file: standard input Time limit: 1 secondOutput file: standard outp ...

  8. 学习Spring-Data-Jpa(十七)---对Web模块的支持

    Spring-Data还提供了Web模块的支持,这要求Web组件Spring-MVC的jar包位于classpath下.通常通过使用@EnableSpringDataWebSupport注解来启用继承 ...

  9. LeetCode 457. Circular Array Loop

    原题链接在这里:https://leetcode.com/problems/circular-array-loop/ 题目: You are given a circular array nums o ...

  10. 持续集成学习9 jenkins执行脚本

    一.配置 1.首先在slave节点上写一脚本 [root@node1 script]# cat /application/script/test.sh #!/bin/bash echo "h ...