方法1:非注解的方法
//1. 引入slf4j接口的Logger和LoggerFactory
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class UserService {
//2. 声明一个Logger,这个是static的方式,我比较习惯这么写。
private final static Logger logger = LoggerFactory.getLogger(UserService.class);
public boolean verifyLoginInfo(String userName, String password) {
//3. log it,输出的log信息将会是:"Start to verify User [Justfly]
logger.info("Start to verify User [{}]", userName);
return false;
}
}
方法2:使用注解
@Component("leadMessageService")
public class MessageServiceImpl implements MessageService {
@Autowired
private Producer producerClient;
@Override
public void sendNotifycation(MessageNotifyDTO msg) {
String s = "0";
try {
s = producerClient.sendMessage(msg);
log.info("sendMessage Success to : "+msg.getUserID());
} catch (SendFailedException sfe) {
log.error("messageId " + s + " send Failed, reason is " + sfe.getMessage());
sfe.printStackTrace();
}
}
import lombok.extern.log4j.Log4j;
@Log4j
....
public void stop() {
try {
if(context != null) {
context.stop();
context.close();
context = null;
}
} catch (Exception var2) {
log.error("error while stop spring context:",var2); //方便
}
}
.....
如何使用不同级别的Log
SLF4J把Log分成了Error,Warn,Info,Debug和Trace五个级别。我们可以把这俩个级别分成两组
用户级别
Error、Warn和Info这三个级别的Log会出现在生产环境上,他们必须是运维人员能阅读明白的
Error
影响到程序正常运行、当前请求正常运行的异常情况,例如:
打开配置文件失败
第三方应用网络连接异常
SQLException
不应该出现的情况,例如:
某个Service方法返回的List里面应该有元素的时候缺获得一个空List
做字符转换的时候居然报错说没有GBK字符集
Warn
不应该出现但是不影响程序、当前请求正常运行的异常情况,例如:
有容错机制的时候出现的错误情况
找不到配置文件,但是系统能自动创建配置文件
即将接近临界值的时候,例如:
缓存池占用达到警告线
Info
系统运行信息
Service方法的出入口
主要逻辑中的分步骤
外部接口部分
客户端请求参数和返回给客户端的结果
调用第三方时的调用参数和调用结果
开发级别
Debug和Trace这俩个级别主要是在开发期间使用或者当系统出现问题后开发人员介入调试的时候用的,需要有助于提供详细的信息。
Debug
用于记录程序变量,例如:
多次迭代中的变量
用于替代代码中的注释