if (LOG.isDebugEnabled()) {LOG.debug("Logging some stuff = " + stuff);
}
我想摆脱isXXXEnabled,这就是我找到Logback和SLF4J的方式 。
登录和SLF4J
与SLF4J结合使用的Logback提供了出色的API和快速强大的日志记录框架实现。 从log4j切换到Logback的原因不是本文的主题,它们已经在logback网站上进行了详细描述。 很快,您会发现Logback和SL4FJ有什么用:
- 跳过isXXXEnabled的简单快速方法:
LOG.debug("Logging some stuff = {}", stuff);
- 自动重载配置文件
- 强大的日志过滤器
- 将属性文件加载到配置xml中
- 条件配置
借助SLF4J迁移工具,从log4j api迁移到SLF4J的速度非常快。 我已经决定将所有项目都切换到Logback,几个月后,我不得不说我对这个决定感到非常满意。
为了在您的项目中使用Logback,请添加以下依赖项:
<dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.6.4</version>
</dependency><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.0.1</version>
</dependency><dependency><groupId>org.slf4j</groupId><artifactId>jcl-over-slf4j</artifactId><version>1.6.4</version>
</dependency>
使用Logback设置错误通知
在具有正确日志记录的应用程序中,应将每个级别为ERROR的条目记录为应解决的问题。
当然,最常见的记录错误的方法是使用堆栈跟踪将异常记录到日志文件中,但是如果您在多台主机上有大量应用程序,则检查错误可能很耗时。 聪明的方法是将它们登录到数据库中,这可以通过DBAppender实现。 我发现在电子邮件中发送所有异常以立即修复它们最有帮助。
为了将Logback设置为发送异常邮件,我们需要添加Java Mail依赖项:
<dependency><groupId>javax.mail</groupId><artifactId>mail</artifactId><version>1.4</version>
</dependency>
并在logback.xml中定义SMTPAppender的配置:
<?xml version="1.0" encoding="UTF-8"?>
<configuration><!-- some application specific configuration here --><appender name="sheriff" class="ch.qos.logback.classic.net.SMTPAppender"><smtpHost>localhost</SMTPHost><from>sheriff@mycompany.com</From><to>john@mycompany.com</To><subject>Something went wrong</Subject><layout class="ch.qos.logback.classic.html.HTMLLayout"/><filter class="ch.qos.logback.classic.filter.ThresholdFilter"><level>ERROR</level></filter></appender><root level="ERROR"><appender-ref ref="sheriff" /></root>
</configuration>
由于将ThresholdFilter的级别设置为ERROR,我们可以确保即使更改了根级别,也只能发送错误邮件。
现在,您应该会收到类似于以下内容的电子邮件:
在开发环境中跳过错误通知
可能您将不需要接收来自开发环境的那些邮件,并且由于有logback配置中的条件,您可以轻松地跳过它们。
为了使用条件,您需要向Janino添加依赖项:
<dependency><groupId>janino</groupId><artifactId>janino</artifactId><version>2.5.10</version>
</dependency>
下一步是了解您的环境。 在Logback配置中,您可以访问系统属性,logback属性或特殊变量(例如HOSTNAME和CONTEXT_NAME)以及它们来确定您的环境。 在我的应用程序中, 我使用Spring配置文件 ,因此我的ROOT记录器配置为:
<root level="ERROR"><if condition='"${spring.profiles.active}" == "production"'><appender-ref ref="sheriff" /></if>
</root>
log4j用户的常用词汇
如果您决定坚持使用log4j,则可以使用SMTPAppender 。
由于log4j-over-slf4j库,Log4j可以与SLF4J一起使用。
结论
使用Logback发送邮件不是通知错误的唯一方法。 可以使用Jabber附加程序 ,甚至可以编写将通过SMS网关发送错误的附加程序。 由你决定。
您在项目中使用了哪些错误通知解决方案?
参考: Software Development Journey博客上的JCG合作伙伴 Maciej Walkowiak提供了带有Logback的应用程序错误通知 。
翻译自: https://www.javacodegeeks.com/2012/07/logback-application-errors-notification.html