文章9 | 阅读 3678 | 点赞0
在lombok v0.10
中添加了各种@Log
变体。 lombok 0.10
中的添加此功能,使用@Log
对任何类进行注释,以使lombok
生成的logger
字段对代码进行注释操作。
你把@Log的变体放在你的类上,但是对于不同的日志体系可以对号入座:
@CommonsLog
private static final org.apache.commons.logging.Log log =
org.apache.commons.logging.LogFactory.getLog(LogExample.class);
@Flogger
private static final com.google.common.flogger.FluentLogger log =
com.google.common.flogger.FluentLogger.forEnclosingClass();
@JBossLog
private static final org.jboss.logging.Logger log =
org.jboss.logging.Logger.getLogger(LogExample.class);
@Log
private static final java.util.logging.Logger log = java.util.logging.Logger.getLogger(LogExample.class.getName());
@Log4j
private static final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(LogExample.class);
@Log4j2
private static final org.apache.logging.log4j.Logger log =
org.apache.logging.log4j.LogManager.getLogger(LogExample.class);
@Slf4j
private static final org.slf4j.Logger log =
org.slf4j.LoggerFactory.getLogger(LogExample.class);
@XSlf4j
private static final org.slf4j.ext.XLogger log = org.slf4j.ext.XLoggerFactory.getXLogger(LogExample.class);
以上便是lombok为我们提供的日志模块,我常用的会有以下几种:@Log
,@Slf4j
和@CommonsLog
在进行测试之前需要引用两个依赖,分别是slf4j
的依赖和Apache的commons-logging
:
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.25</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
下面我们简单实现代码:
@Log
public class LogExample {
public static void main(String[] args) {
log.severe("this is @Log testing.");
}
}
@Slf4j
class Slf4jExample {
public static void main(String[] args) {
log.info("this is @Slf4j testing.");
}
}
@CommonsLog
class CommonsLogExample{
public static void main(String[] args) {
log.info("this is @CommonsLog testing.");
}
}
以上的代码编译之后为:
public class LogExample {
private static final Logger log = Logger.getLogger(LogExample.class.getName());
public static void main(String[] args) {
log.severe("this is @Log testing.");
}
}
class Slf4jExample {
private static final Logger log = LoggerFactory.getLogger(Slf4jExample.class);
public static void main(String[] args) {
log.info("this is @Slf4j testing.");
}
}
class CommonsLogExample {
private static final Log log = LogFactory.getLog(CommonsLogExample.class);
public static void main(String[] args) {
log.info("this is @CommonsLog testing.");
}
}
使用不同的注解,lonbok将为我们选择不同的日志框架,但是前提一定要添加此日志框架的依赖。
@Retention(RetentionPolicy.SOURCE)
@Target(ElementType.TYPE)
public @interface Log {
// 指定Logger在上下文的名称,默认名称是:类的全包名。
String topic() default "";
}
// 默认名称是:类的全包名,e.g. com.gitee.jdkong.lombok.log.LogExample
@Log(topic = "qwe")
public class LogExample {
public static void main(String[] args) {
System.out.println(log.getName());
log.severe("this is @Log testing.");
}
}
// 输出内容
qwe
一月 08, 2019 1:10:23 下午 com.gitee.jdkong.lombok.log.LogExample main
严重: this is @Log testing.
public class LogExample {
private static final Logger log = Logger.getLogger("qwe");
//默认:private static final Logger log = Logger.getLogger(LogExample.class.getName());
public LogExample() {}
public static void main(String[] args) {
System.out.println(log.getName());
log.severe("this is @Log testing.");
}
}
# 生成的logger 的 fieldname 默认为“log”,你可以使用此设置将其更改为其他名称,比如:testLog。
# 那么你在代码中使用时,就要使用 testLog.info(""); 之类的。
lombok.log.fieldName = an identifier (default: log).
# 使用的 field 是否是静态的调用,默认静态调用的。
lombok.log.fieldIsStatic = [true | false] (default: true)
# 是否启用@Log注解。(以下类似)
lombok.log.flagUsage = [warning | error] (default: not set)
lombok.log.apacheCommons.flagUsage = [warning | error] (default: not set)
lombok.log.flogger.flagUsage = [warning | error] (default: not set)
lombok.log.jbosslog.flagUsage = [warning | error] (default: not set)
lombok.log.javaUtilLogging.flagUsage = [warning | error] (default: not set)
lombok.log.log4j.flagUsage = [warning | error] (default: not set)
lombok.log.log4j2.flagUsage = [warning | error] (default: not set)
lombok.log.slf4j.flagUsage = [warning | error] (default: not set)
lombok.log.xslf4j.flagUsage = [warning | error] (default: not set)
测试lombok.log.fieldIsStatic
全局配置
config.stopBubbling = true
clear lombok.log.fieldIsStatic
lombok.log.fieldIsStatic = false
@Log
public class LogExample {
private void testFieldIsNotStatic() {
log.severe("this is @Slf4j testing.");
}
// 由于取消了 log 的静态属性,所以在main方法中不能直接调用
public static void main(String[] args) {
LogExample example = new LogExample();
example.testFieldIsNotStatic();
}
}
// 编译后:
public class LogExample {
private final Logger log = Logger.getLogger(LogExample.class.getName());
public LogExample() {}
private void testFieldIsNotStatic() {
this.log.severe("this is @Slf4j testing.");
}
public static void main(String[] args) {
LogExample example = new LogExample();
example.testFieldIsNotStatic();
}
}
这样我们就可以使用非静态的Log对象来帮我们操作日志了。
测试 lombok.log.fieldName
全局配置
# 全局配置
config.stopBubbling = true
clear lombok.log.fieldName
lombok.log.fieldName = testLog
上面指定了日志对象的变量名,所以
@Log
public class LogExample {
public static void main(String[] args) {
testLog.severe("this is @Log testing.");
}
}
// 编译后:
public class LogExample {
private static final Logger testLog = Logger.getLogger(LogExample.class.getName());
public LogExample() { }
public static void main(String[] args) {
testLog.severe("this is @Log testing.");
}
}
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/weixin_41540822/article/details/86606632
内容来源于网络,如有侵权,请联系作者删除!