假设一个场景,有一个webservive,java开发的。
有很多客户端频繁调用这个webservice服务,webservice方法的参数中有一项为clientId
日志要求是,希望在webservice服务程序对每一个clientId能够单独文件记录日志(clientId 数量不算太多,但是数量和名称不固定)
我目前的实现方式如下:
Appender appender = LogManager.getLoggerRepository().getRootLogger().getAppender("R");
((FileAppender)appender).setFile(DIR+File.seperator+clientId+".txt");
((FileAppender)appender).activateOptions();
log.info("client :" + clientId +" in-------<");
//业务代码 省略
log.info("client :" +clientId+" out------->");
测试了一下多个client并发的情况,日志文件没有按要求记录。问题应该是appender是非线程安全的。
我目前想到的办法是 log4j从缓存读数据写到文件的时候从threadLocal读出文件名(不知道这个能不能实现)。
可是log4j些文件是异步的,咱们的服务线程 和 写文件的线程应该不是同一个线程,所有上面说的方法好像不行啊。
大家有没有遇到这种情况,是怎么处理的。
分享到:
相关推荐
当我们面对特定项目需求,比如需要自定义日志文件名和日志输出格式时,Log4j同样提供了相应的解决方案。 首先,让我们深入理解如何自定义日志文件名。默认情况下,Log4j的日志文件名通常是固定的或者基于时间戳生成...
Springboot 多线程应用源代码,根据线程输出到不同的日志文件, 子线程可以输出日志到父线程日志文件。 动态日志文件路径,文件名 动态输出多个日志文件 适用于复杂日志输出的用例 日志文件为RollingFile
本文将深入探讨如何利用Log4j进行日志输出格式化以及设置日志文件名格式化,以满足公司的标准化需求。 首先,我们来看日志输出格式化。Log4j的核心在于其灵活性,可以通过自定义布局模板来控制日志输出的格式。最...
在“log4j按功能保存日志”的场景中,我们通常会利用Log4j的配置灵活性,将不同功能的日志分别写入不同的文件,以便于后期分析、排查问题和监控系统状态。 1. **Log4j基本概念** - **Logger**: 日志记录器,是Log4...
- 配置Log4j的Layout(布局)以便在日志文件名中包含线程标识,这样每个线程就会有自己的日志文件。 4. **代码实践** - 在`LogTest`工程中,我们可以看到每个子线程实例化自己的Logger,并在初始化时设置...
### 配置Log4j的详细指南:最佳的日志管理工具 #### 一、引言 在软件开发过程中,良好的日志记录对于调试、维护和性能优化等方面具有至关重要的作用。Log4j作为Apache下的一个开源项目,因其高度灵活性、易配置性...
`,指定日志文件名。 3. 设置合适的日志级别,如`slog_set_level(SLOG_LEVEL_DEBUG);`。 4. 在代码中使用相应的日志函数记录信息,例如`void my_function() { slog_info("This is an info message."); }` 5. 在程序...
Log4J是Apache的一个开源项目,用于提供灵活的日志记录功能。通过它,开发者能够控制日志信息的输出级别、输出目的地(控制台、文件等)、格式化方式等。本文将围绕一份示例配置文件来详细介绍Log4J的配置方法。 ##...
### log4j配置详解 #### 一、log4j简介 Log4j 是一个开源的日志记录工具,它允许开发者自定义日志级别并能够输出丰富的日志信息。本篇文章将详细解读 log4j 的基本配置及使用方法,非常适合初学者理解和掌握。 ##...
关于appender,如`log4j.appender.A2=org.apache.log4j.DailyRollingFileAppender`,表示A2是一个每日滚动的日志文件appender,日志文件名是DAOLog,每天生成一个新的文件,并按照'.'yyyy-MM-dd的格式进行日期切分。...
### log4j 使用简介 #### 一、Log4j 概述 Log4j 是一个由 Apache 提供的开源项目,专门用于实现日志记录功能。它为开发者提供了灵活的日志记录方式,允许通过多种不同的格式来记录每一条日志信息,并且能够将这些...
* `org.apache.log4j.TTCCLayout`:包含日志产生的时间、线程、类别等等信息 打印参数 Log4J 采用类似 C 语言中的 printf 函数的打印格式格式化日志信息,常用的打印参数如下: * `%m`:输出代码中指定的消息 * `...
Log4j是Apache的一个开源项目,用于实现日志记录功能。它提供了一种高度灵活的日志记录框架,可以方便地控制日志的输出级别、格式以及目标(如控制台、文件等)。Log4j的主要优势在于其强大的配置能力,可以通过简单...
- `log4j.appender.D.File=logs/error.log`:异常日志文件名。 - `log4j.appender.D.Append=true`:追加模式写入文件。 - `log4j.appender.D.Threshold=ERROR`:只输出ERROR级别以上的日志。 - `log4j.appender....
而log4j作为一款优秀的日志框架,提供了强大的日志记录功能,其配置的灵活性和丰富的格式化选项使其成为众多开发者的选择。本文将详细解析log4j配置中的输出格式化符号,帮助读者更深入地理解和应用log4j。 ### log...
`log4j.properties`是Apache Log4j库中用于配置日志记录行为的核心配置文件。下面将详细解析`log4j.properties`的配置项及其作用,同时提供实例来加深理解。 ### 1. Logger 日志记录的核心是`Logger`,它是Log4j中...
### log4j配置文件详解 #### 一、日志记录器简介与日志级别 **日志记录器**(Logger)作为日志处理系统的核心组件,在log4j中扮演着关键角色。它负责接收应用程序产生的日志信息,并根据配置决定是否记录以及如何...
### Log4j学习资料:Java日志管理必备 在Java开发领域,日志记录是软件维护和调试过程中不可或缺的一部分。Log4j作为Apache旗下的开源项目,因其灵活性和强大的功能,成为了众多开发者首选的日志框架。本文旨在深入...
Log4j是一款广泛使用的Java日志记录框架,它允许开发者灵活地控制日志信息的输出。配置文件是Log4j的核心部分,通过配置文件,我们可以指定日志的输出级别、输出目的地、格式以及滚动策略等。本文将深入解析Log4j...
Log4Cpp是一个流行的C++日志库,它模仿了Java的Log4j框架,提供了灵活的日志输出功能。本篇文章将深入探讨如何利用Log4Cpp有效地将日志输出到文件,实现最佳实践。 首先,理解Log4Cpp的基本结构至关重要。Log4Cpp...