推荐一个日志工具类

任何系统都少不了日志记录,方便了解系统运行情况,也为了方便排查问题。我们通常会在需要记录日志的类中定义一个Logger,如下代码:

1
private Logger logger = Logger.getLogger(NodeService.class);

但是在每个类中都这样定义一个Logger,工作量比较大,很繁琐。而且如果你用的Log4j,你后续想改成其他的日志实现,可能logger的定义都需要改,这就是一个很大的工作量了。
所以为了少写代码,也为了维护方便,有必要定义一个日志工具类。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Created by Administrator on 2017/5/23.
*/
public final class LoggerUtils {
/**
* 是否开启Debug
*/
public static boolean isDebug = org.slf4j.LoggerFactory.getLogger(LoggerUtils.class).isDebugEnabled();

/**
* Debug 输出
* @param clazz 目标.Class
* @param message 输出信息
*/
public static void debug(Class<? extends Object> clazz ,String message){
if(!isDebug)return ;
Logger logger = LoggerFactory.getLogger(clazz);
logger.debug(message);
}

/**
* Debug 输出
* @param clazz 目标.Class
* @param fmtString 输出信息key
* @param values 输出信息value
*/
public static void fmtDebug(Class<? extends Object> clazz,String fmtString,Object...values){
fmtDebug(clazz,null,fmtString,values);
}

/**
* Debug 输出
* @param clazz 目标.Class
* @param fmtString 输出信息key
* @param values 输出信息value
*/
public static void fmtDebug(Class<? extends Object> clazz,Exception e,String fmtString,Object...values){
if(!isDebug)return ;
if(StringUtils.isBlank(fmtString)){
return ;
}

Logger logger = LoggerFactory.getLogger(clazz);
if (e != null) {
if (values != null) {
logger.debug(fmtString,values,e);
return;
}
logger.debug(fmtString,e);
}
else {
if (values != null) {
logger.debug(fmtString,values);
return;
}
logger.debug(fmtString);
}
}
/**
* Error 输出
* @param clazz 目标.Class
* @param message 输出信息
* @param e 异常类
*/
public static void error(Class<? extends Object> clazz ,String message,Exception e){
Logger logger = LoggerFactory.getLogger(clazz);
if(null == e){
logger.error(message);
return ;
}
logger.error(message, e);
}
/**
* Error 输出
* @param clazz 目标.Class
* @param message 输出信息
*/
public static void error(Class<? extends Object> clazz ,String message){
error(clazz, message, null);
}
/**
* 异常填充值输出
* @param clazz 目标.Class
* @param fmtString 输出信息key
* @param e 异常类
* @param values 输出信息value
*/
public static void fmtError(Class<? extends Object> clazz,Exception e,String fmtString,Object...values){
if(StringUtils.isBlank(fmtString)){
return ;
}
Logger logger = LoggerFactory.getLogger(clazz);
if (e != null) {
if (values != null) {
logger.error(fmtString,values,e);
return;
}
logger.error(fmtString,e);
}
else {
if (values != null) {
logger.error(fmtString,values);
return;
}
logger.error(fmtString);
}
}
/**
* 异常填充值输出
* @param clazz 目标.Class
* @param fmtString 输出信息key
* @param values 输出信息value
*/
public static void fmtError(Class<? extends Object> clazz,
String fmtString, Object...values) {
if(StringUtils.isBlank(fmtString)){
return ;
}
fmtError(clazz, null,fmtString,values);
}


/**
* Error 输出
* @param clazz 目标.Class
* @param message 输出信息
* @param e 异常类
*/
public static void info(Class<? extends Object> clazz ,String message,Exception e){
Logger logger = LoggerFactory.getLogger(clazz);
if(null == e){
logger.info(message);
return ;
}
logger.info(message, e);
}
/**
* Error 输出
* @param clazz 目标.Class
* @param message 输出信息
*/
public static void info(Class<? extends Object> clazz ,String message){
info(clazz, message, null);
}
/**
* 异常填充值输出
* @param clazz 目标.Class
* @param fmtString 输出信息key
* @param e 异常类
* @param values 输出信息value
*/
public static void fmtInfo(Class<? extends Object> clazz,Exception e,String fmtString,Object...values){
if(StringUtils.isBlank(fmtString)){
return ;
}

Logger logger = LoggerFactory.getLogger(clazz);
if (values != null) {
if (e != null) {
logger.info(fmtString,values,e);
return;
}
logger.info(fmtString,values);
}
else {
if (e != null) {
logger.info(fmtString,e);
return;
}
logger.info(fmtString);
}
}
/**
* 异常填充值输出
* @param clazz 目标.Class
* @param fmtString 输出信息key
* @param values 输出信息value
*/
public static void fmtInfo(Class<? extends Object> clazz,
String fmtString, Object...values) {
if(StringUtils.isBlank(fmtString)){
return ;
}
fmtInfo(clazz, null,fmtString,values);
}
}

这里使用的log4j,配置文件如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
log4j.rootLogger=info,stdout,ROLLING_FILE

# SqlMap logging configuration...
log4j.logger.com.ibatis=ERROR
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=ERROR
log4j.logger.com.ibatis.common.jdbc.ScriptRunner=ERROR
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=ERROR
log4j.logger.java.sql.Connection=ERROR
log4j.logger.org.apache=ERROR
log4j.logger.org.springframework=info

# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d [%-5p] %c %x - %m%n
#log4j.appender.stdout.Encoding=GBK

# RollingFile output...
log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender
log4j.appender.ROLLING_FILE.File=/usr/log/snatchRolling.log
log4j.appender.ROLLING_FILE.Append=true
log4j.appender.ROLLING_FILE.MaxFileSize=100MB
log4j.appender.ROLLING_FILE.MaxBackupIndex=10
log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.ROLLING_FILE.layout.ConversionPattern=%d [%-5p] %c %x - %m%n

使用就很简单了,在需要记录日志的类中使用LoggerUtils.info/debug/error即可,同时该日志工具类也是支持格式化的。即LoggerUtils中的fmtXXX方法.

1
2
3
4
5
6
7
8
9
10
LoggerUtils.info(LoggerUtils.class,"hello");
LoggerUtils.info(LoggerUtils.class,"hello",new NullPointerException("null"));
LoggerUtils.fmtInfo(LoggerUtils.class,"hello {}","world");
LoggerUtils.error(LoggerUtils.class,"hello");
LoggerUtils.error(LoggerUtils.class,"hello",new NullPointerException("null1"));
try {
int i= 1 / 0;
} catch (Exception e) {
LoggerUtils.fmtError(LoggerUtils.class,e,"error {},22",122);
}

Donny wechat
欢迎关注我的个人公众号
打赏,是超越赞的一种表达。
Show comments from Gitment