java autoflush_使用java.util.logging Autoflush在调试期间刷新流处理程序

我一直试图在谷歌上查找这个答案一段时间,并认为我只是来这里寻找答案.

在生产过程中,这个设置工作正常,因为它打印到stdout和stderr,我将其分开并解析以供以后使用,但在开发期间,我们希望看到这些日志记录操作在它们发生时打印,即每个日志记录.我认为java将此称为自动刷新.我似乎无法找到我可以更改我具有的流处理程序对象的缓冲区大小,以解决此问题.

我有一些选择如下:

>在Formatter中将日志打印到stdout

>在每次调用方法后刷新处理程序(可能使用groovy注释)

>在调试期间启用控制台处理程序

我使用java.util.logging来处理我的应用程序完成的所有日志记录,我们使用以下代码创建一个根记录器:

public Logger buildLogger()

{

Logger log = Logger.getLogger("") //TODO update when JDK updatesLogger.getGlobal() is what we would like to use here

log.setLevel(Level.WARNING)

log.setUseParentHandlers(false); //Turn off any Parent Handlers

Handler[] handlers = log.getHandlers();

for(Handler handler : handlers) {

log.removeHandler(handler);

}

log.addHandler(soh); //Add stdOut Handler

log.addHandler(seh); //Add stdErr Handler

return log;

}

处理程序在这里

public StreamHandler buildsoh()

{

def soh = new StreamHandler(System.out, formatter)

soh.setLevel(Level.ALL); //Default StdOut Setting

return soh;

}

public StreamHandler buildseh()

{

def seh = new StreamHandler(System.err, formatter)

seh.setLevel(Level.SEVERE); //Default StdErr Setting

return seh;

}

格式化程序在这里:

public class MyLogFormatter extends Formatter {

@Override

public String format(LogRecord record) {

StringBuffer log = new StringBuffer()

log.append("[${record.getLevel()}]")

log.append(new Date(record.getMillis()).format("yyyy-MM-dd HH:mm:ss"))

log.append(" ")

log.append("[").append(record.getSourceClassName() ?: record.getLoggerName())

log.append(" ")

log.append(record.getSourceMethodName() ?: " - ").append("]")

log.append(": ");

log.append(record.getMessage());

log.append(System.getProperty("line.separator"));

return log.toString();

}

}

非常感谢你!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值