java logutil_Java日志组件1---Jdk自带Logger(java.util.logging.Logger)-程序员宅基地

技术标签: java logutil  

最近在看日志的一些东西,发现利用JDK自带的log也可以简单的实现日志的输出,将日志写入文件的过程记录如下:

1、新建LogUtil.Java( 里面写了几个静态方法,为log设置等级、添加log控制台handler、添加log文件输出handler)

packagecn.darkranger.log.logger;importjava.io.IOException;importjava.text.SimpleDateFormat;importjava.util.Date;importjava.util.logging.ConsoleHandler;importjava.util.logging.FileHandler;importjava.util.logging.Formatter;importjava.util.logging.Level;importjava.util.logging.LogRecord;importjava.util.logging.Logger;/*** JDK自带的Log的工具类(手写,勿喷。。)

*

*@authorDarkRanger

* @date 20160615

**/

public classLogUtil {//正常的日期格式

public static final String DATE_PATTERN_FULL = "yyyy-MM-dd HH:mm:ss";//不带符号的日期格式,用来记录时间戳

public static final String DATE_PATTERN_NOMARK = "yyyyMMddHHmmss";/*** 为log设置等级

*

*@paramlog

*@paramlevel*/

public static voidsetLogLevel(Logger log, Level level) {

log.setLevel(level);

}/*** 为log添加控制台handler

*

*@paramlog

* 要添加handler的log

*@paramlevel

* 控制台的输出等级*/

public static voidaddConsoleHandler(Logger log, Level level) {//控制台输出的handler

ConsoleHandler consoleHandler = newConsoleHandler();//设置控制台输出的等级(如果ConsoleHandler的等级高于或者等于log的level,则按照FileHandler的level输出到控制台,如果低于,则按照Log等级输出)

consoleHandler.setLevel(level);//添加控制台的handler

log.addHandler(consoleHandler);

}/*** 为log添加文件输出Handler

*

*@paramlog

* 要添加文件输出handler的log

*@paramlevel

* log输出等级

*@paramfilePath

* 指定文件全路径*/

public static voidaddFileHandler(Logger log, Level level, String filePath) {

FileHandler fileHandler= null;try{

fileHandler= newFileHandler(filePath);//设置输出文件的等级(如果FileHandler的等级高于或者等于log的level,则按照FileHandler的level输出到文件,如果低于,则按照Log等级输出)

fileHandler.setLevel(level);

fileHandler.setFormatter(newFormatter() {

@OverridepublicString format(LogRecord record) {//设置文件输出格式

return "[ " + getCurrentDateStr(DATE_PATTERN_FULL) + " - Level:"

+ record.getLevel().getName().substring(0, 1) + " ]-" + "[" +record.getSourceClassName()+ " -> " + record.getSourceMethodName() + "()] " + record.getMessage() + "\n";

}

});

}catch(SecurityException e) {

e.printStackTrace();

}catch(IOException e) {

e.printStackTrace();

}//添加输出文件handler

log.addHandler(fileHandler);

}/*** 获取当前时间

*

*@return

*/

public staticString getCurrentDateStr(String pattern) {

Date date= newDate();

SimpleDateFormat sdf= newSimpleDateFormat(pattern);returnsdf.format(date);

}

}

2、新建LogFactory.Java(用于获取全局log,这里的全局log不同于jdk自带log的全局log,jdk自带的全局log需要手动添加ConsoleHandler和FileHandler,这里只全部定义好了,只需要通过LogFactory.getGlobalLog()就可以获取到,使用的过程中会自动添加日志到对应的文件)

packagecn.darkranger.log.logger;importjava.io.File;importjava.util.logging.Level;importjava.util.logging.Logger;/*** Jdk再带Logger的LoggerFactory(纯手写)

*

*@authorDarkRanger

* @date 20160615

**/

public classLogFactory {//全局Log的名称

public static final String LOG_NAME = "Global";//这个文件路径必须存在,不存在会报错,并不会自动创建

public static final String LOG_FOLDER = "E:\\Log\\JDKLog";//log文件路径

private staticString log_filepath;//静态变量globleLog

private staticLogger globalLog;static{//加载类的时候初始化log文件全路径,这里的文件名称是JDKLog_+时间戳+.log     log_filepath = LOG_FOLDER + File.separator + "JDKLog_" +LogUtil.getCurrentDateStr(LogUtil.DATE_PATTERN_NOMARK)+ ".log";//加载类的时候直接初始化globleLog

globalLog =initGlobalLog();

}/*** 初始化全局Logger

*

*@return

*/

public staticLogger initGlobalLog() {//获取Log

Logger log =Logger.getLogger(LOG_NAME);//为log设置全局等级

log.setLevel(Level.ALL);//添加控制台handler

LogUtil.addConsoleHandler(log, Level.INFO);//添加文件输出handler

LogUtil.addFileHandler(log, Level.INFO, log_filepath);//设置不适用父类的handlers,这样不会在控制台重复输出信息

log.setUseParentHandlers(false);returnlog;

}public staticLogger getGlobalLog() {returnglobalLog;

}

}

3、写测试类JDKLogTest.Java

packagecn.darkranger.log.logger;importjava.io.File;importjava.util.logging.Level;importjava.util.logging.Logger;importorg.junit.Test;/*** JDK自带的Log 测试

*

*@authorDarkRanger

**/

public classJDKLogTest {//自定义的全局log(个人一般用这个记录)

private static Logger log =LogFactory.getGlobalLog();//Jdk1.7以后自带的全局log(后面我添加了FileHandler,用于写入文件日志)

private static Logger sysLog =Logger.getGlobal();static{

//由于jdk自带的全局log没有写入文件的功能,我这里手动添加了文件handler

LogUtil.addFileHandler(sysLog, Level.INFO, LogFactory.LOG_FOLDER+ File.separator + "sys.log");

}

@Testpublic voidtest01() {//级别从上往下依次降低

log.severe("severe--> this is severe!");

log.warning("warning--> this is warning!");

log.info("info--> this is info!");

log.config("config--> this is config!");

log.fine("fine--> this is fine!");

log.finer("finer--> this is finer!");

log.finest("finest--> this is finest!");

}

@Testpublic voidtest02() {

log.info("info--> this is test02 log");

}

@Testpublic voidtest03() {

sysLog.info("test03 info!");

}

@Testpublic voidtest04() {

sysLog.info("test04 info!");

}

}

测试结果:

控制台输出:

六月 15, 2016 3:26:37 下午 cn.darkranger.log.logger.JDKLogTest test01

严重: severe--> this is severe!

六月 15, 2016 3:26:37 下午 cn.darkranger.log.logger.JDKLogTest test01

警告: warning--> this is warning!

六月 15, 2016 3:26:37 下午 cn.darkranger.log.logger.JDKLogTest test01

信息: info--> this is info!

六月 15, 2016 3:26:37 下午 cn.darkranger.log.logger.JDKLogTest test02

信息: info--> this is test02 log

六月 15, 2016 3:26:37 下午 cn.darkranger.log.logger.JDKLogTest test03

信息: test03 info!

六月 15, 2016 3:26:37 下午 cn.darkranger.log.logger.JDKLogTest test04

信息: test04 info!

文件输出:

E:\Log\JDKLog\JDKLog_20160615152637.log(自定义全局log的日志文件)

[ 2016-06-15 15:26:37 - Level:S ]-[cn.darkranger.log.logger.JDKLogTest -> test01()] severe--> this is severe![2016-06-15 15:26:37 - Level:W ]-[cn.darkranger.log.logger.JDKLogTest -> test01()] warning--> this is warning![2016-06-15 15:26:37 - Level:I ]-[cn.darkranger.log.logger.JDKLogTest -> test01()] info--> this is info![2016-06-15 15:26:37 - Level:I ]-[cn.darkranger.log.logger.JDKLogTest -> test02()] info--> this is test02 log

E:\Log\JDKLog\sys.log(系统自带log全局log的日志文件)

[ 2016-06-15 15:26:37 - Level:I ]-[cn.darkranger.log.logger.JDKLogTest -> test03()] test03 info![2016-06-15 15:26:37 - Level:I ]-[cn.darkranger.log.logger.JDKLogTest -> test04()] test04 info!

83023323a7b022b34737bb7df3ecff59.gif

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_39571749/article/details/114120407

智能推荐

视线估计/视线追踪/视线检测(Gaze Estimation)研究以及车辆应用(DMS or OMS)-程序员宅基地

文章浏览阅读622次。最近在研究驾驶员监控系统(DMS or DSM),目前针对眼睛、嘴巴、头姿特征的算法已经很成熟了,而最新的研究方向是利用人眼视线进行判断,应用场景可能如下:1、头部转动,但是视线仍在道路前方;2、头部虽然朝向道路,但视线已经脱离了道路,向其他地方看去;3、偏向于娱乐方面的话,实际应用有蔚来的NOMI,当驾驶员看向NOMI的时候,NOMI会自动看向驾驶员,视线检测在未来的扩展性会很强。_视线追踪

Android自定义配置_android 自定义配置参数-程序员宅基地

文章浏览阅读511次。Android自定义配置文章目录Android自定义配置屏幕不休眠开机显示自定义静态LOGO系统中文显示隐藏状态栏电量开机不显示No SIM card 提示隐藏状态栏和三大按键1. 默认配置文件2. 加载配置文件隐藏搜索栏1. 在布局文件中删除2. 在launcher中去掉关闭系统休眠Launcher图标清空直接隐藏清空布局默认开启以太网添加全局变量Settings.Global字符串定义默认值数据库加载使用开启默认配置测试备注屏幕不休眠# 获取屏幕休眠时间adb shell settings ge_android 自定义配置参数

RAID 介绍(含有硬件RAID卡)-程序员宅基地

文章浏览阅读1.6k次,点赞2次,收藏7次。其中,--level=5指定RAID级别为5,--raid-devices=3指定使用3块磁盘驱动器,后面的/dev/sdb、/dev/sdc、/dev/sdd是要组成RAID 5阵列的磁盘驱动器设备名称。数据保护和冗余:RAID卡支持不同的RAID级别,如RAID 0、RAID 1、RAID 5等,提供数据冗余和容错能力,以保护数据免受磁盘故障的影响。硬件加速:由于RAID卡具有自己的处理器和内存,它可以在硬件级别上执行RAID操作,减轻了主机CPU和内存的负担,从而提供更高的效率和吞吐量。_raid卡

xml文件中特殊字符的转义_xml特殊字符转义-程序员宅基地

文章浏览阅读5.3k次。前言在做项目的过程中,将项目中的数据库由原来链接我本地的数据库改为链接服务器的数据库,但是发现修改之后项目启动一直失败,经过查看日志才发现,原来数据库密码解析有问题。因为数据库的密码包含特殊符号,所以解析失败了。解决方案一:使用CDATA例如:<if test="startTime != null" > and l.CREATE_TIME >= #{start..._xml特殊字符转义

从数据仓库到数据结构:数据架构的演变之路-程序员宅基地

文章浏览阅读2.1k次。数据治理(DG):Experian数据质量报告表明,全球78%的组织受到数据治理不善的困扰,这导致人们对数据和从数据获得的洞察力产生不信任。数据治理告诉我们,在数据生命周期的任何时候,数据消费者都应该知道数据的位置、格式、使用关系以及与数据相关的任何其他相关信息,以避免数据债务。使数据成为可共享的资产:使数据成为可共享的资产强调我们将数据视为一种有价值的资源,可以在不同的系统之间共享和访问。从传统的数据仓库到现代的数据网格和数据结构方法,这些架构解决了特定的挑战,带来了新的机遇。

Java版工程行业管理系统源码-专业的工程管理软件- 工程项目各模块及其功能点清单-程序员宅基地

文章浏览阅读955次,点赞15次,收藏11次。二、企业通过数字化转型,不仅有利于优化业务流程、提升经营管理能力和风险控制能力,还可强有力地促进企业体制机制的全面创新。四、在企业里建立一个管过程、提效率、降风险、控成本的工程项目管理环境,科学化、规范化是至关重要的。1、项目列表:实现对项目列表的增删改查操作,包括查看各项目的立项人、创建时间、2、项目计划管理:项目计划查看和管理模块,可执行增删改查操作,包括查看甘特图。3、收支报表:项目收支报表,包含总体收支、项目收支和收支统计模块。1、项目汇总:项目汇总信息查看,包括进度、计划时间等信息。

随便推点

网易云音乐移动端项目实战(分解上),2024年最新学it主要学什么-程序员宅基地

文章浏览阅读537次,点赞9次,收藏11次。/获取歌单的详情api 下的index.js//获取轮播图API/*0: pc1: android2: iphone3: ipad*///获取推荐歌单默认十条数据//获取歌单的详情router 下的index.jspath: ‘/’,},},routes})views下的listview.vue。

Intellij IDEA--生成UML类图的方法_intellij idea生成java uml-程序员宅基地

文章浏览阅读3.1k次。本文介绍Idea如何生成UML类图。_intellij idea生成java uml

idea识别不到maven下载的jar_idea maven有jar包却不能识别-程序员宅基地

文章浏览阅读963次。Maven初级问题_idea maven有jar包却不能识别

珞珈一号数据预处理完整流程及一些总结_arcgis滤波器在哪里-程序员宅基地

文章浏览阅读7.2k次,点赞18次,收藏65次。珞珈一号的噪声噪点什么的都非常多,想要去噪声个人总结出了很多方法:1.arcgis滤波器(空间分析工具——邻域分析——滤波器:低通滤波)2.envi低通滤波(同上面的工具,特点是可以平滑图像减少噪声同时会减少细节)3.利用自然间断点分级法来进行灯光分级(级别越多越好,分的越细,阈值也就更加精确),分级后从中选择适合的灯光值作为阈值以去除噪声4.老方法(不变目标区域法):选择同年同月份的npp影像,默认npp影像上DN值为0的地方在珞珈一号DN值也为0,以此作为掩膜去剔除噪声…(方法很多,仅供参考)_arcgis滤波器在哪里

NBT封面:水稻NRT1.1B基因调控根系微生物组参与氮利用(作者解读)-程序员宅基地

文章浏览阅读3.3k次,点赞2次,收藏11次。https://www.nature.com/nbt/volumes/37/issues/6Nature Biotechnology杂志2019年6月5日(37卷第6期),中科院遗传发..._nrt1.1b is associated with root microbiota composition and nitrogen use in f

java控制台内容覆盖_Java代码自动生成注释,运行后在控制台输入文件路径就可以将该路径下的文件都加上注释,不会覆盖已有的注释...-程序员宅基地

文章浏览阅读67次。Java代码自动生成注释,运行后在控制台输入文件路径就可以将该路径下的文件都加上注释,不会覆盖已有的注释代码片段:/*** 此类文件作用于为大量类文件* 加上类注释,方法注释* 加注释时不会覆盖已有注释* @author lKF44520* @date 2011-07-20*/public class RemarkHelper {public static void main(String[]..._修改javadoc注释怎么覆盖代码已有的注释

推荐文章

热门文章

相关标签