java.util.log学习

今天学习java.util.logging类包方便以后查看。
这里以一个例子说明:
import java.util.logging.ConsoleHandler;
import java.util.logging.FileHandler;
import java.util.logging.Formatter;
import java.util.logging.Handler;
import java.util.logging.Level;
import java.util.logging.LogManager;
import java.util.logging.Logger;
import java.util.logging.LoggingMXBean;
import java.util.logging.MemoryHandler;
import java.util.logging.SimpleFormatter;
import java.util.logging.SocketHandler;

public class LoggingProgramSetPubSubpro {
public static void main(String[] args) throws Exception
{
LogManager lm = LogManager.getLogManager();
Logger logger = Logger.getLogger("loggingTest");
Logger logger1 = Logger.getLogger("loggingTest.b");
lm.addLogger(logger);
lm.addLogger(logger1);


logger.setLevel(Level.INFO);//这个设定最重要


Handler consoleHandler = new ConsoleHandler();//控制台handler
consoleHandler.setLevel(Level.ALL);
Formatter ft1 = new YAYFormatter();//定义自己的formatter
consoleHandler.setFormatter(ft1);
logger.addHandler(consoleHandler);


Handler fh = new FileHandler("c:\\java%g.log");//文件handler
logger.addHandler(fh);//一个logger可以有多个handler
Formatter ft = new SimpleFormatter();//FileHandler默认的Formatter是XMLFormatter
fh.setFormatter(ft);
fh.setLevel(Level.OFF);

Handler handler = new SocketHandler("localhost", 8099); //网络handler
handler.setFormatter(new SimpleFormatter());
logger.addHandler(handler);

Handler meh = new MemoryHandler(fh,1,Level.WARNING);//内存handler,当目标target的level等级超过Level.WARNING时向target push记录
logger.addHandler(meh);

logger.severe("嚴重訊息");
logger.warning("警示訊息");
logger.info("一般訊息");
logger.config("設定方面的訊息");
logger.fine("細微的訊息");
logger.finer("更細微的訊息");
logger.finest("最細微的訊息");


LoggingMXBean mx = LogManager.getLoggingMXBean();
logger.info("loggingTest的level是:"+mx.getLoggerLevel("loggingTest"));
logger.info("loggingTest的父 logger 名称是:"+mx.getParentLoggerName("loggingTest.b"));
logger.info(mx.getLoggerNames().size()+"" );
consoleHandler.close();
fh.close();
meh.close();
handler.close();
}

}

定义自己的formmater

import java.util.logging.Formatter;
import java.util.logging.LogRecord;

public class YAYFormatter extends Formatter {

@Override
public String format(LogRecord logRecord) {

return "LogRecord info: " + logRecord.getSourceClassName() +//就是哪个类里面用的了你
"\n" +"Level\t|\tLoggerName\t|\tMessage\t|\n" +
logRecord.getLevel() + //是SEVERE还是WARNING还是别的
"\t|\t" +
logRecord.getLoggerName() +//这个logger发布者
"\t|\t" +
logRecord.getMessage() + //消息内容
"\t|\n\n";
}

}

读取sockethandler的服务端
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

import javax.net.ServerSocketFactory;

public class LogServer {
private static final int PORT_NUM = 8099;
public static void main(String args[]) {
ServerSocketFactory serverSocketFactory =
ServerSocketFactory.getDefault();
ServerSocket serverSocket = null;
try {
serverSocket =
serverSocketFactory.createServerSocket(PORT_NUM);
} catch (IOException ignored) {
System.err.println("无法创建服务");
System.exit(-1);
}
System.out.printf("LogServer 运行端口: %s%n", PORT_NUM);
while (true)

{
Socket socket = null;
try {
socket = serverSocket.accept();
InputStream is = socket.getInputStream();
BufferedReader br = new BufferedReader(
new InputStreamReader(is, "GBK"));
String line = null;
while ((line = br.readLine()) != null
) {
System.out.println(line);
}
} catch (IOException exception) {
// 处理下在个请求.
} finally {
if (socket != null) {
try {
socket.close();
} catch (IOException ignored) {
}
}
}
}
}
}

Handler 对象从 Logger 中获取日志信息,并将这些信息导出。例如,它可将这些信息写入控制台或文件中,也可以将这些信息发送到网络日志服务中,或将其转发到操作系统日志中。
[img]http://dl.iteye.com/upload/attachment/359941/af2402e9-bba4-31d0-8303-33fa2cf49b90.png[/img]

java类库提供了以上几种handler实现


[img]http://dl.iteye.com/upload/attachment/359941/af2402e9-bba4-31d0-8303-33fa2cf49b90.png[/img]
上图是java.util.logging的uml
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值