通用的日志记录器(java)

线程安全的java日志记录器


  1 import java.io.BufferedWriter;
2 import java.io.File;
3 import java.io.FileWriter;
4 import java.io.IOException;
5 import java.text.SimpleDateFormat;
6 import java.util.Date;
7 import java.util.concurrent.atomic.AtomicReference;
8
9
10
11 /**
12 *
13 * @author zhangshuang
14 *
15 */
16 public class SyncFile {
17 private static String FILENAME ="";
18
19 private static String FILEDIR="";
20
21 private static final AtomicReference<SyncFile> instance = new AtomicReference<SyncFile>();
22
23 private String currentDate = SyncFile.getCurrentDate();
24
25 private File file = null;
26
27 private FileWriter fw = null;
28
29 private BufferedWriter bw = null;
30
31 private SyncFile(String dir, String name) {
32 SyncFile.FILEDIR = dir;
33 SyncFile.FILENAME = name ;
34 while(dir.endsWith("/")) {
35 dir = dir.substring(0, dir.length() - 1);
36 }
37 mkDir(dir);
38 String filePath = dir + "/" + name + "." + currentDate ;
39 file = new File(filePath);
40 try {
41 if(!file . exists()) {
42 file.createNewFile();
43 }
44 fw = new FileWriter(file, true);
45 bw = new BufferedWriter(fw);
46 } catch (Exception e) {
47 e.printStackTrace();
48 }
49
50 }
51
52 public static SyncFile getInstance(String dir, String name) {
53 if( instance .get() == null ) {
54 instance .compareAndSet(null, new SyncFile(dir, name));
55 }
56 return instance.get();
57 }
58
59 public static SyncFile getInstance() {
60 if( instance .get() == null ) {
61 instance.compareAndSet(null, new SyncFile(FILEDIR, FILENAME));
62 }
63 return instance.get();
64 }
65
66 public synchronized void write (String line) {
67 openBuffer() ;
68
69 line = line.endsWith("\n") ? line : line + "\n";
70 try {
71 if(line != null && line.trim() != ""){
72 bw.write(line);
73 bw.flush();
74 }
75 } catch (IOException e) {
76 e.printStackTrace();
77 }
78 }
79
80 private static void mkDir( String dir) {
81 File file = new File(dir);
82 mkDir(file);
83 }
84
85 /**
86 * <p>递归创建不存在的目录
87 * @param file
88 */
89 private static void mkDir(File file){
90 if(file.getParentFile().exists()){
91 file.mkdir();
92 }else{
93 mkDir(file.getParentFile());
94 file.mkdir();
95 }
96 }
97
98 public static String getCurrentDate() {
99 return new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss").format(new Date());
100 }
101
102 private void openBuffer() {
103
104 if(!currentDate.equals(SyncFile.getCurrentDate()) || fw == null ||bw == null) {
105 if (!currentDate.equals(SyncFile.getCurrentDate())){
106 currentDate = SyncFile.getCurrentDate();
107 file = new File(FILEDIR + "/" + FILENAME + "." + currentDate);
108 }
109 close ();
110 try {
111 fw = new FileWriter(file , true);
112 bw = new BufferedWriter(fw);
113 } catch (IOException e) {
114 e.printStackTrace();
115 }
116 }
117
118 }
119
120 public void close() {
121 try {
122 if (bw != null) {
123 bw.close();
124 bw = null;
125 }
126
127 if (fw != null) {
128 fw.close();
129 fw = null;
130 }
131 } catch (IOException e) {
132 e.printStackTrace();
133 }
134 }
135
136 public static void main(String[] args) {
137 // String a = "/data/logs/////";
138 // while (a.endsWith("/")) {
139 // a = a.substring(0 , a.length()-1);
140 // System.out.println(a);
141 // }
142 // System.out.println("ok" + a);
143 mkDir("c:/2");
144 }
145
146
147 }

通用的日志记录器(java),码迷,mamicode.com

时间: 2024-08-06 03:19:15

通用的日志记录器(java)的相关文章

通用的日志记录器(PHP)

一个通用的日志记录器 1 <?php 2 class Log4p{ 3 4 const LOG_PATH = "/data/logs/mobact2rd/drawcard"; 5 6 static function writeLog($str, $filename='debug', $fileCutByDate = true, $dirCutByDate = true) { 7 if (empty($str)) return; 8 $dir = ''; 9 10 if ( $di

how tomcat works读书笔记 七 日志记录器

大家能够松一口气了,这个组件比較简单,这一节和前面几节想比,也简单的多. Logger接口 Tomcat中的日志记录器都必须实现org.apache.catalina.Logger接口. package org.apache.catalina; import java.beans.PropertyChangeListener; public interface Logger { public static final int FATAL = Integer.MIN_VALUE; public s

how tomcat works 七 日志记录器

大家可以松一口气了,这个组件比较简单,这一节和前面几节想比,也简单的多. Logger接口 Tomcat中的日志记录器都必须实现org.apache.catalina.Logger接口. package org.apache.catalina; import java.beans.PropertyChangeListener; public interface Logger { public static final int FATAL = Integer.MIN_VALUE; public s

【PHP系列】PHP推荐标准之PSR-3,日志记录器接口

上节聊完了PHP官方的相关代码规范,下面给大家带来了PHP系列的PHP推荐标准的另外两个,PSR-3,PSR-4. 首先,我们先来了解下PSR-3是怎么回事. PHP-FIG发布的第三个推荐规范与前两个不同,不是一系列的指导方针,而是一个接口,规定PHP日志记录器组件可以实现的方法. 基础 The LoggerInterface exposes eight methods to write logs to the eight RFC 5424levels (debug, info, notice

万里长征第二步——django个人博客(第二步 ——日志记录器)

定义日志记录器 可以在setting.py里设置日志记录器 # 自定义日志输出信息 LOGGING = { 'version': 1, 'disable_existing_loggers': True, 'formatters': { 'standard': { 'format': '%(asctime)s [%(threadName)s:%(thread)d] [%(name)s:%(lineno)d] [%(module)s:%(funcName)s] [%(levelname)s]- %(

tomcat源码阅读之日志记录器(Logger)

UML图: 1.Logger接口中定义了日志的级别:FATAL.ERROR.WARNING.INFORMATION.DEBUG,通过接口函数getVerbosity获取日志级别,setVerbosity设置日志级别: 2.接口中提供一组重载的log方法来记录日志,在LoggerBase实现类中除了log(String msg)方法没有实现外,其他重载的log方法均实现为调用这个方法来实现日志的记录: 3.在LoggerBase类中,默认的日志级别是ERROR:带日志级别参数的log方法在记录日志

通用日志记录(java)

使用AOP记录操作日志信息 添加一个统一处理日志AOP /** * 统一日志处理Handler * @author Mingchenchen * */ public class LogAopHandler { @Autowired private AuditLogDao auditLogDao; /** * controller层面记录操作日志 * 注意此处是aop:around的 因为需要得到请求前的参数以及请求后接口返回的结果 * @throws Throwable */ public Ob

AES加密解密通用版Object-C / C# / JAVA

1.无向量 128位 /// <summary> /// AES加密(无向量) /// </summary> /// <param name="plainBytes">被加密的明文</param> /// <param name="key">密钥</param> /// <returns>密文</returns> public static string AESEncry

Java程序日志:java.util.logging.Logger类

一.Logger 的级别 比log4j的级别详细,全部定义在java.util.logging.Level里面.各级别按降序排列如下:SEVERE(最高值)WARNINGINFOCONFIGFINEFINERFINEST(最低值)此外,还有一个级别 OFF,可用来关闭日志记录,使用级别 ALL 启用所有消息的日志记录.logger默认的级别是INFO,比INFO更低的日志将不显示(但也会写入文件). 注意:高等级的Logger不会显示(或写入)低等级的记录.低等级的Logger会显示(或写入)高