我最近一直在尝试使用logback,并且一直在Eclipse内部直接运行示例。当我这样做时,我注意到-
即使在我的静态main(String[] args)
方法结束之后(从Java驱动程序类内部),应用程序仍在运行。
最终,我确定Logback正在管理自己的线程,这些线程即使在我的主应用程序退出后仍保持活动状态。我四处搜寻一些解决方案,发现这是从Java内部显式关闭Logback的一种方式:
ILoggerFactory factory = LoggerFactory.getILoggerFactory();
if(factory instanceof LoggerContext) {
LoggerContext ctx = (LoggerContext)factory;
ctx.stop();
}
这真的是彻底关闭登录的唯一方法吗? 我从未遇到过一个日志记录系统(JUL,JCL,log4j等),该系统使您显式关闭它以正常退出应用程序…
提前致谢!
更新 :这是logback.xml
:
<configuration debug="true" scan="true" scanPeriod="5 minutes">
<appender name="logManager-consoleAppender" class="ch.qos.logback.core.ConsoleAppender">
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>TRACE</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>NEUTRAL</onMismatch>
</filter>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>DEBUG</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<appender name="logManager-smtpAppender" class="ch.qos.logback.classic.net.SMTPAppender">
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>WARN</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>NEUTRAL</onMismatch>
</filter>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<smtpHost>my.smtp.host</smtpHost>
<to>john.smith@example.com</to>
<from>no-reply@example.com</from>
<username>my_user</username>
<password>my_password</password>
<subject>%logger{20} - %m</subject>
<layout class="ch.qos.logback.classic.html.HTMLLayout"/>
<cyclicBufferTracker class="ch.qos.logback.core.spi.CyclicBufferTracker">
<bufferSize>5</bufferSize>
</cyclicBufferTracker>
</appender>
<root level="ALL">
<appender-ref ref="logManager-consoleAppender" />
<appender-ref ref="logManager-smtpAppender" />
</root>
</configuration>
使用logback-1.0.13和JDK 1.6u34。
该问题可能是由于登录错误所致。在SMTPAppender中将异步发送设置为true可以避免该错误(实际上并未对其进行修复)。我在jira中添加了一个新问题来描述该问题。
我终于在我的程序中实现了Thread.interrupt()而不是Thread.stop()。然而,我不确定我做得好不好。 我有一个类,它扩展了Thread并声明了几个方法。每个方法都抛出InterruptedException(每个方法都执行I/O密集型操作,其中一些需要几分钟才能完成,因此我没有使用线程安全标志,因为该标志直到操作完成后才会被检查)。我还在这些方法的几个地方添加了以下代码来抛出
问题内容: 一个没有stopServer功能的RMI服务器,可以正常工作。 每当被调用异常中的stopServer()抛出时 这是堆栈跟踪 即使我使用清理服务对象,情况也一样 有人可以提出一种干净的方法来停止服务器,这还会释放端口以供重用。 问题答案: 您需要存储结果并取消导出结果。目前,您正在尝试取消导出存根。
所有的, 现在,我试图避免的是下面的连接语句代码,其中我将代码包装在goroutine中的错误处理中(类似于以下内容): 相反,如果存在连接问题,我宁愿将整个过程短路,然后立即以错误退出goroutine,我也不愿意担心如何构造代码。我也许可以进一步包装_send_ack并将通道作为函数参数发送--但是如果程序是高度分层的,这就变得不确定了。例如,我可能有一个由几个函数组成的goroutine,每
我是Android Studio的新手,所以我面临一些问题。我正在寻找一种如何干净地项目的方法。 在Eclipse中,我会做<代码>项目-
问题内容: 我已经使用以下命令从Docker文件构建了一个Docker映像。 当我尝试使用同一命令重建它时,它正在使用构建缓存,例如: 缓存显示已安装Aerospike。但是,我在从该图像生成的容器中找不到它,因此我想在不使用缓存的情况下重建该图像。如何强制Docker在没有缓存的情况下重建干净的映像? 问题答案: 有一个选项: 在较旧的Docker版本中,您需要通过,但情况不再如此。
我有一个应用程序,从Kafka获取消息,并调用目标系统来更新遗留的Oracle DB。 我想启用一个场景,如果目标系统关闭,将消息留在Kafka总线上,并且在给定的时间段内不处理它们。我在考虑一些基于Hystrix的断路器解决方案,但我找不到任何机制来告诉Spring Cloud Stream“停止”事件监听。我能想到的另一种选择是,如果断路器断开,将这些信息传输到错误/重新处理主题,但这听起来像