java - Web 应用程序上下文中日志实用程序 (log4j) 中 Appender 的工作

标签 java servlets logging log4j

当日志结果打印到单个文件时,appender 如何在 Web 应用程序中工作?

引用 servlet 的工作方式,每个请求都由不同的 servlet 线程提供服务,并且在 Web 应用程序中,有大量并行发生的请求。

当 servlet 的多个实例想要记录到同一个文件时,如何处理日志记录?

这个问题是否像共享资源中的临界区问题一样处理?

由于涉及的操作是写入并且资源是单个日志文件,因此它不会减慢网络应用程序以服务请求吗?

最佳答案

这取决于日志框架。在 log4j 中,AppenderSkeleton.doAppend 方法是同步的,一次只允许一个线程记录一条日志语句。好消息是,除非您每秒记录数千条消息(如果是,那么您可能做错了事情或使用了错误的框架),否则这不是问题。

请记住,实际写入文件可能不一定立即发生,因为很可能存在一个缓冲区,使关键部分的周转相当快。

您提到的场景并不是需要同步的唯一情况。例如,在记录语句时,可以配置多个附加程序。日志系统必须确保在单个日志事件中不会添加/删除任何附加程序,以避免出现同一个事件被一个附加程序记录而不会被另一个附加程序记录的情况。

关于java - Web 应用程序上下文中日志实用程序 (log4j) 中 Appender 的工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22525654/

相关文章:

java - 尝试创建字符串

java - 大 O 符号和带循环的递归

java - 如何为多个 servlet 修改 web.xml

tomcat - 如何在 servlet web.xml 中设置 Tomcat 的版本?

tomcat - 如何配置 Tomcat 以通过系统日志记录所有内容?

注释和静态 block 的java处理顺序

java - spring security 在重定向到 logout.jsp 时给出错误

java - 检查 MySQL 中的重复插入

java - 无法在我的 Web 应用程序中创建 log4j 日志文件

c# - 在哪里可以找到有关为 Microsoft 扩展日志记录配置日志记录设置的文档?