package com.ming.util;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date; /**
* 文本记录日志
*
* @author Ming
* @update 2016-11-30 17:13:00 (1,使用子线程写入文本日志;2,添加异常日志记录)
*
*/
public class LogUtil { private static String log_path = getBasePath();// 日志保存路径
private static String log_name = "yxt_log";// 日志文件名(前部分)
private static boolean console_out = true;// 日志是否输出到控制台
/*
* yyyy-MM: 每个月更新一个log日志 yyyy-ww: 每个星期更新一个log日志 yyyy-MM-dd: 每天更新一个log日志
* yyyy-MM-dd-a: 每天的午夜和正午更新一个log日志 yyyy-MM-dd-HH: 每小时更新一个log日志
* yyyy-MM-dd-HH-mm: 每分钟更新一个log日志
*/
private static String update_hz = "yyyy-MM";// 更新日志的频率,每月更新一次
private static long max_log_size = 1024 * 1024 * 10;// 单个日志文件最大大小 10M public static void debug(String msg) {
runWrite(msg, log_path, log_name + "_debug");
} public static void info(String msg) {
runWrite(msg, log_path, log_name + "_info");
} public static void error(String msg) {
runWrite(msg, log_path, log_name + "_error");
} public static void exception(Exception e) {
String errorMessage = e.getMessage() + "";
StackTraceElement[] eArray = e.getCause().getStackTrace();
for (int i = 0; i < eArray.length; i++) {
String className = e.getCause().getStackTrace()[i].getClassName();
String MethodName = e.getCause().getStackTrace()[i].getMethodName();
int LineNumber = e.getCause().getStackTrace()[i].getLineNumber();
errorMessage = errorMessage + "\n\t---" + className + "." + MethodName + ",\tline:" + LineNumber;
}
logResult(errorMessage, log_path, log_name + "_exception");
} /**
* 日志根目录
*
* @return
*/
public static String getBasePath() {
String s = Thread.currentThread().getContextClassLoader().getResource("").getPath();
s = s.substring(0, s.indexOf("WEB-INF")) + "log" + File.separator;
return s;
} /**
* 写日志
*
* @param sWord
* 要写入日志里的文本内容
*/
public static void logResult(String sWord) {
runWrite(sWord, log_path, log_name);
} public static void logResult(String sWord, String logPath, String logName) {
FileWriter writer = null;
try {
File dir = new File(logPath);
if (!dir.exists()) {
dir.mkdirs();
}
String dt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date());
File f = new File(logPath + logName + "_" + new SimpleDateFormat(update_hz).format(new Date()) + ".txt");
if (!f.exists()) {
f.createNewFile();
sWord = "AllMing 日志\r\n" + "[" + dt + "]\t" + sWord;
} else {
long logSize = f.length();
// 文件大小超过10M,备份
if (logSize >= max_log_size) {
String backLogName = logPath + logName
+ new SimpleDateFormat("_yyyy-MM-dd.HHmmss.SSS").format(new Date()) + ".txt";
f.renameTo(new File(backLogName));
}
}
writer = new FileWriter(f, true);
writer.write("[" + dt + "]\t" + sWord + "\r\n");
if (console_out) {
System.out.println("[" + dt + "]\t" + sWord);
}
} catch (Exception e) {
System.out.println("记录日志异常:" + e.toString());
e.printStackTrace();
} finally {
if (writer != null) {
try {
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
} public static void runWrite(final String sWord,final String logPath,final String logName) {
new Thread() {
public void run() {
logResult(sWord, logPath, logName);
}
}.start();;
} public static void main(String[] args) {
for (int i = 0; i <1000; i++) {
error(""+i);
}
}
}

JAVA日志工具类的更多相关文章

  1. Android开发调试日志工具类[支持保存到SD卡]

    直接上代码: package com.example.callstatus; import java.io.File; import java.io.FileWriter; import java.i ...

  2. Log 日志工具类 保存到文件 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  3. java日期工具类DateUtil-续一

    上篇文章中,我为大家分享了下DateUtil第一版源码,但就如同文章中所说,我发现了还存在不完善的地方,所以我又做了优化和扩展. 更新日志: 1.修正当字符串日期风格为MM-dd或yyyy-MM时,若 ...

  4. Android utils 之 日志工具类

    工具类 在开发的过程中,我们时常会对代码执行特定的处理,而这部分处理在代码中可能多次用到,为了代码的统一性.规范性等,通过建工具类的方式统一处理.接下来我会罗列各种工具类. 日志工具类 在utils文 ...

  5. Java Properties工具类详解

    1.Java Properties工具类位于java.util.Properties,该工具类的使用极其简单方便.首先该类是继承自 Hashtable<Object,Object> 这就奠 ...

  6. Java json工具类,jackson工具类,ObjectMapper工具类

    Java json工具类,jackson工具类,ObjectMapper工具类 >>>>>>>>>>>>>>> ...

  7. Java日期工具类,Java时间工具类,Java时间格式化

    Java日期工具类,Java时间工具类,Java时间格式化 >>>>>>>>>>>>>>>>>&g ...

  8. Java日志工具之Log4J

    Log4J与java.util.logging.Logger的使用方式出奇的相似,因此如果先看这篇文章<Java日志工具之java.util.logging.Logger>在来用Log4J ...

  9. Java并发工具类 - CountDownLatch

    Java并发工具类 - CountDownLatch 1.简介 CountDownLatch是Java1.5之后引入的Java并发工具类,放在java.util.concurrent包下面 http: ...

随机推荐

  1. xcode 手动管理内存 的相关知识点总结

    一.XCode4.2以后支持自动释放内存ARC xcode自4.2以后就支持自动释放内存了,但有时我们还是想手动管理内存,这如何处理呢. 很简单,想要取消自动释放,只要在  Build Setting ...

  2. p2.BTC-数据结构

    hash pointers:哈希指针,除了保存值的地址,还要存这整个区块的内容的hash值.这样就既能访问到值,还能确定访问的值有没有被篡改. 一 Blockchain Block chain is ...

  3. vmware虚拟机克隆后网卡修改

    在使用vmware虚拟机时,有时候需要通过一个虚拟机克隆出批量的虚拟机,在克隆后,会发现网卡信息发生了变化,以这里为例,源主机网卡名称为eth0.eth1,在克隆后变成了eth2.eth3,这时候,如 ...

  4. LFS7.10——构造临时Linux系统

    参考:LFS编译——准备Host系统 前言 在准备好Host环境后,接下来构造一个临时Linux系统.该系统包含****构建所需要的工具.构造临时Linux系统分两步: 构建一个宿主系统无关的新工具链 ...

  5. IP和网络互联

    IP和网络互联 IP网络互连机制: IP地址分类方法及原因: CIDR地址(无分类地址): IP分组首部格式: 数据分片方法: IP分组传输思路:

  6. DNS BIND配置 配置基本缓存服务器 DNS正向解析 DNS反向解析

    一. 缓存服务器配置 1.DNS:BIND    Berkeley Internet Name Domain    版本bind97: RPM服务器端包的名字  安装bind-libs    bind ...

  7. 小程序框架之视图层 View~获取界面节点信息

    获取界面上的节点信息 WXML节点信息 节点信息查询 API 可以用于获取节点属性.样式.在界面上的位置等信息. 最常见的用法是使用这个接口来查询某个节点的当前位置,以及界面的滚动位置. 示例代码: ...

  8. 题解 洛谷P1457 【城堡 The Castle】

    这道题,看似很烦,无从下手,但其实只要用位运算和联通快就能水过了呀. 首先,输入:似乎大意是把一个数拆成二进数的相加,分别表示\((i,j)\)东南西北是否有墙.\(1\)表示西,\(2\)表示北,\ ...

  9. 2.spring的主要模块作用

    spring中大约包含20过个模块, 主要包括以下几部分: 1. Core Container Core Container(核心容器)包含Core,Beans,Context和Expression ...

  10. 语义(Semantics)

    流计算语义(Semantics)的定义 每一条记录被流计算系统处理了几次 有三种语义: 1.At most once 一条记录要么被处理一次,要么没有被处理 2.At least once 一条记录可 ...