package org.rx.core;

import lombok.Getter;
import lombok.Setter;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.jetbrains.annotations.NotNull; import java.io.StringWriter; import static org.rx.core.Contract.require; @Slf4j
public class LogWriter extends StringWriter {
private org.slf4j.Logger logRef;
@Getter
@Setter
private String prefix; public LogWriter() {
this(log);
} public LogWriter(org.slf4j.Logger log) {
require(log); this.logRef = log;
} @Override
public void write(@NotNull String str) {
super.write(prefix);
super.write(" ");
super.write(str);
} @Override
public void write(String str, int off, int len) {
write(str.substring(off, off + len));
} public LogWriter writeLine() {
super.write(System.lineSeparator());
return this;
} public LogWriter info(Object obj) {
write(String.valueOf(obj));
writeLine();
return this;
} public LogWriter info(String format, Object... args) {
write(String.format(format.replace("{}", "%s"), args));
writeLine();
return this;
} public LogWriter infoAndFlush(Object obj) {
info(obj).flush();
return this;
} public LogWriter infoAndFlush(String format, Object... args) {
info(format, args).flush();
return this;
} public LogWriter error(String msg, Throwable e) {
logRef.error(msg, e);
return this;
} @Override
public void flush() {
super.flush();
StringBuffer buffer = super.getBuffer();
logRef.info(buffer.toString());
buffer.setLength(0);
} @SneakyThrows
@Override
public void close() {
this.flush();
super.close();
}
}

java LogWriter的更多相关文章

  1. Spark案例分析

    一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...

  2. 【JAVA并发编程实战】7、日志服务

    这里是一个应用项目使用生产消费模型的日志类 package cn.study.concurrency; import java.util.concurrent.BlockingQueue; impor ...

  3. java并发编程学习: 守护线程(Daemon Thread)

    在正式理解这个概念前,先把 守护线程 与 守护进程 这二个极其相似的说法区分开,守护进程通常是为了防止某些应用因各种意外原因退出,而在后台独立运行的系统服务或应用程序. 比如:我们开发了一个邮件发送程 ...

  4. [数据库连接池] Java数据库连接池--DBCP浅析.

    前言对于数据库连接池, 想必大家都已经不再陌生, 这里仅仅设计Java中的两个常用数据库连接池: DBCP和C3P0(后续会更新). 一. 为何要使用数据库连接池假设网站一天有很大的访问量,数据库服务 ...

  5. kettle job如何利用java的反射机制获取执行的sql语句

    kettle job中的JavaScript如何获取同一个job中SQL步骤的执行语句并让执行语句记录在日志中呢?首先写日志需要用到job中JavaScript写日志的方法,其次是利用java反射机制 ...

  6. java开发经验分享(一)

    一. 编码 1. 约束自己,规范编码习惯 充足的代码注释.标准缩进的格式.注意命名规范.参考<开发管理规范> "看上去"专业能促进代码质量.越是难看的代码,在它的演化过 ...

  7. JAVA 编程规范

       软件开发技术规范 PTHINK-DEVELOP-JAVA-091010         Java语言编程规范   2009-10-10发布                2009-10-11实施 ...

  8. java并发编程实战:第七章----取消与关闭

    Java没有提供任何机制来安全地终止线程(虽然Thread.stop和suspend方法提供了这样的机制,但由于存在缺陷,因此应该避免使用 中断:一种协作机制,能够使一个线程终止另一个线程的当前工作 ...

  9. Java编程规范[转]

    目录 1       概述.... 5 1.1      目标:.... 5 1.2      原则:.... 5 2       Java编程命名规范.... 5 2.1      包的命名标准.. ...

随机推荐

  1. Bootstarp-源码分析-alert.js v3.x和v4.x的对比

    一些概念 1. 使用 data-api 调用 就是给所有带有data-dismiss="alert"的元素绑定点击事件 v3.x: $(document).on('click.bs ...

  2. Visual Studio禁用IntelliSense

    通过Everything搜索feacp.dll,然后修改其名字或者直接删除之. 重启Visual Studio.

  3. Java + selenium window()接口方法介绍

    在浏览器启动的代码中,有一段关于window接口的调用,这篇文章就是来解释介绍这个接口的.代码如下 driver.manage().window().maxmize(); window接口主要是用来控 ...

  4. 数据结构C语言实现

    顺序表实现 typedef int Position; typedef struct LNode *List; struct LNode { ElementType Data[MAXSIZE]; Po ...

  5. 再往DjVu鼓吹者的头上敲一棒子

    最近在某论坛又看到有人在鼓吹DjVu,甚至声称拿到PDG就转成DjVu,忍不住想再敲打敲打. 早几年前就已经有人举出过实例,证明PDG.TIFF转DjVu会因为有损压缩而产生错别字,似乎时间长了一堆新 ...

  6. luoguP1083 借教室(题解)(我用的线段树)

    luoguP1083 借教室 题目 #include<cstdio> #include<iostream> #include<cmath> #include< ...

  7. python面试题之用列表解析式选出1-100中的奇数

    [i for i in range(100) if i % 2 != 0](其实这里有很多种做法,比如最简单的用切片就可以了 list(range(100))[1::2]都不需要列表解析式本文首发于p ...

  8. 从一个Activity打开另外一个Activity

    public class MainActivity extends Activity { /** Called when the activity is first created. */ @Over ...

  9. System.Net.Mail.SmtpException:不允许使用邮箱名称.

    使用SmtpClient发送邮件的时候,出现了如题错误. 解决方案: 将  SmtpClient.UseDefaultCredentials  属性设置为 true . 官方文档说明: Some SM ...

  10. 将循环结果通过管道 传递给其他命令处理(done |)