- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用 log4j AsyncAppender
。我编写了自己的附加程序来自定义记录器,如下所示。
public class MyAppender extends AppenderSkeleton {
@Override
public void close() {
}
@Override
public boolean requiresLayout() {
return false;
}
@Override
protected void append(LoggingEvent event) {
//Here am doing some logic which will connect database and fetch some records.
// This process might take few seconds
}
}
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">
<!-- Appenders -->
<appender name="stdout" class="com.sample.MyAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d %p [%c] - %m%n"/>
</layout>
</appender>
<appender name="ASYNC" class="org.apache.log4j.AsyncAppender">
<param name="BufferSize" value="500"/>
<appender-ref ref="stdout"/>
</appender>
<root>
<level value="INFO" />
<appender-ref ref="ASYNC" />
</root>
</log4j:configuration>
现在一切正常。我的 MyAppender
我将触发 Select
查询并从表中获取一些详细信息,并使用 java 邮件 API 发送这些详细信息。由于我使用 AsyncAppender
,它不会阻塞父线程,并且 MyAppender 逻辑是使用单独的线程异步执行的。我的问题是,如果父线程在 MyAppender
逻辑完成之前完成其执行,那么即使父线程完成其执行,是否可以保证 MyAppender
中的逻辑将完成?
我的应用程序将部署在 Tomcat 上。
谢谢!
最佳答案
这很好,AsyncAppender
有自己的线程来处理这种情况。您的附加程序不必在生成消息的线程完成之前完成。一旦你的appender收到消息,它就完全在另一个线程中。此时,附加程序不知道也不关心父级。有人可能会说,这个用例就是 AsyncAppender
类存在的原因。
如果你愿意,可以check it out for yourself .
您可以自己测试这一点的一种方法是让 AsyncAppender 在记录某些内容之前 hibernate 很长时间(例如 10 秒)。将某些内容记录到父线程中的附加程序并观察它转到附加程序。您应该看到您的父线程“结束”(我怀疑在 Tomcat 中这实际上只是意味着它被回收回池中)并且附加程序仍然应该执行其工作。
关于java - 通过扩展AppenderSkeleton来编写自己的appender?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19450604/
我正在尝试将一个扩展org.apache.log4j.AppenderSkeleton的类从旧版本的log4j迁移到log4j 2。我正在阅读该类的JavaDoc,我读到了, Appenders co
我最近在我的项目中链接了 log4cpp,并尝试创建一个这样的类: class ConsoleAppenderSkeleton : public log4cpp::AppenderSkeleton {
我用 log4net 创建了自己的 Appender, public class TextBoxAppender : AppenderSkeleton { ...(constructor
我创建连接到 Web 服务的自定义 Appender(使用 AppenderSkeleton)...在这个 Appender 中,我需要将一些自定义属性(如 Url、Browser、User 等)发送
我有一个带有 JTextPane 的 swing gui,用于从底层应用程序输出日志。我的问题是,在初始化 gui 并记录第一个日志条目后,滚动条将“禁用”,直到我触发操作。下一个日志条目后,水平滚动
我是一名优秀的程序员,十分优秀!