-
log4j 是否可以通过条件判断 在程序运行中动态选择日志存储目录5
比如我有两个用户A和B,我需要记录这两个用户的操作信息:add和del。
我希望把A的日志存放到logs/A/**目录下,比如
logs/A/add/add.log
logs/A/add/del.log
我希望把B的日志存放到logs/B/**目录下,比如
logs/B/add/add.log
logs/B/add/del.log
当程序在记录日志时,知道用户是谁。
如何在记录日志时,让程序根据用户来选择日志存放目录?
log4j支持这样的功能吗,能否给出简明的log4j配置。
在此谢谢各位~
2014年5月06日 16:46
1个答案 按时间排序 按投票排序
-
采纳的答案
可以的:
package com.ljn.others; import java.io.IOException; import java.util.HashMap; import java.util.Map; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Level; import org.apache.log4j.Logger; import org.apache.log4j.PatternLayout; import org.apache.log4j.RollingFileAppender; import org.apache.log4j.varia.LevelRangeFilter; /** * @author lijinnan * @date:2014-5-7 */ public class LoggerFactory { private static final String SEPARATOR = "/"; private static final Map<String, Logger> logMap = new HashMap<String, Logger>(); public static Logger getLogger(String baseDir, String userName, String fileName) { if (StringUtils.isEmpty(baseDir) || StringUtils.isEmpty(userName) || StringUtils.isEmpty(fileName)) { throw new IllegalArgumentException("cannot be empty"); } String key = findKey(userName, fileName); Logger logger = logMap.get(key); if (logger == null) try { String logFilePath = baseDir + SEPARATOR + key; logger = Logger.getLogger(key); PatternLayout playout = new PatternLayout(); playout.setConversionPattern("%d{[yyyy-MM-dd HH:mm:ss.SSS]}:[%p] %m%n"); RollingFileAppender fAppender = new RollingFileAppender(playout, logFilePath); fAppender.setMaxFileSize("500MB"); fAppender.setMaxBackupIndex(3); fAppender.setAppend(true); fAppender.setThreshold(Level.INFO); fAppender.setLayout(playout); LevelRangeFilter filterInfo = new LevelRangeFilter(); filterInfo.setLevelMin(Level.INFO); filterInfo.setLevelMax(Level.ERROR); fAppender.addFilter(filterInfo); logger.addAppender(fAppender); logMap.put(key, logger); } catch (IOException e) { logger.error(Thread.currentThread().getName(), e); } return logger; } private static String findKey(String userName, String fileName) { return userName + SEPARATOR + fileName; } } package com.ljn.others; import java.util.Random; import org.apache.log4j.Logger; /** * @author lijinnan */ public class UserService { private static final String BASE_DIR = "d:/odd/log"; public static void main(String[] args) { while(true) { add(); del(); System.out.println("ok"); } } public static void add() { String user = getCurrentUser(); Logger logger = LoggerFactory.getLogger(BASE_DIR, user, "add.log"); logger.info(user + " add"); } public static void del() { String user = getCurrentUser(); Logger logger = LoggerFactory.getLogger(BASE_DIR, user, "del.log"); logger.info(user + " del"); } private static String getCurrentUser() { Random random = new Random(); int i = random.nextInt(10); if (i % 2 == 0) { return "A" ; } return "B"; } }
2014年5月07日 17:47
相关推荐
总之,Log4j是一个强大且灵活的日志工具,通过适当的配置和使用,可以帮助开发者更好地监控、调试和优化他们的应用程序。了解和掌握Log4j的使用,对于任何Java开发者来说都是非常有价值的技能。
`plugins`则意味着该软件支持扩展,用户可以通过安装额外的插件来增强Log4e的功能,例如添加对不同日志存储后端的支持,如数据库、云存储,或者提供额外的日志分析工具。 在实际使用中,Log4e可能提供了以下关键...
Log4j是一个日志记录框架,用于记录应用程序运行过程中的事件信息。通过配置,开发者可以选择不同级别的日志输出,如DEBUG、INFO、WARN、ERROR等,方便调试和监控系统运行状态。 在提供的压缩包中,"lib"目录通常...
7. **日志记录**:为了调试和监控,可以使用Log4j、SLF4J等日志框架记录程序运行中的信息、警告和错误。 8. **单元测试**:使用JUnit或其他测试框架编写单元测试,确保代码的正确性。对于测试IP是否可达的功能,...
- **日志记录**:为了便于调试和问题追踪,可以考虑使用Log4j或其他日志框架记录程序运行过程中的信息。 通过学习和理解这两个程序,你可以深入掌握Java的网络请求、HTML解析、文件操作以及目录管理等核心技能。这...
- 使用`Logger.getLogger(ClearTempImg.class)`获取一个Logger实例,通过它可以在程序运行时记录各种级别的日志信息。 - 日志级别包括:`debug`、`info`、`warn`、`error`等。 - 在本例中,主要使用了`debug`级别来...
同时,使用日志框架(如Log4j)记录系统运行情况,有助于排查问题。 9. 性能优化:例如,文件列表的显示可能会涉及大量文件,可以采用分页或懒加载技术,以减少一次性加载的负担。另外,对大文件上传,可以考虑切片...
5. **其他依赖库**:可能包含`log4j.jar`用于日志记录,`commons-lang.jar`或`guava.jar`提供通用工具类,`commons-dbcp.jar`和`commons-pool.jar`用于数据库连接池,提高数据库连接的复用和管理。 为了实现用户...
在日志方面,Spring4.0支持SLF4J(Simple Logging Facade for Java)作为默认的日志抽象层,允许开发者选择任何兼容的底层日志框架,如Log4j或Logback。 最后,Spring4.0的“libs”目录通常包含了Spring框架的核心...
- **日志记录**:通过Log4j等工具记录系统运行过程中的信息,便于问题排查。 综上所述,"java实现新闻发布"项目涉及到了Java Web开发的多个方面,包括数据库设计、前后端交互、用户体验以及系统优化等。这个系统...
项目可能会使用try-catch语句处理异常,通过Log4j或其他日志框架记录系统运行日志。 这个"javawebProject-master"文件名表明了项目的主目录,其中可能包含src(源代码)、webapp(Web应用目录)、pom.xml(Maven...
- `log4j.properties` 文件用于配置日志记录机制,需要注意的是,这个文件需要用户手动添加。 ### 安装模块 为了扩展 Play! 的功能,可以很方便地安装各种模块: 1. **依赖声明**:在 `dependencies.yml` 文件中...
5. **日志管理**:SpringBoot默认集成了Logback或Log4j2进行日志记录。 【标签】"web SpringBoot"进一步确认了这个项目的核心技术是Web开发和SpringBoot框架。Web开发涵盖了前端和后端,前端通常涉及HTML、CSS和...
在启动引导程序中通过指定配置启用重定向。 范例: bootcfg /redirect com1 115200 bootcfg /redirect useBiosSettings hkdsk 创建并显示磁盘的状态报告。Chkdsk 命令还可列出并纠正磁盘上的错误。 ...
8. **日志记录**:日志库如`Log4j`或`SLF4J`用于记录程序运行过程中的信息,方便调试和问题定位。 9. **异常处理**:`Exception`类及其子类用于处理程序运行时可能出现的错误。良好的异常处理可以提高代码的健壮性...
12. **日志记录**:为了跟踪程序运行状态和调试,项目可能会使用Log4j或SLF4J等日志框架。 13. **国际化和本地化**:如果项目需要支持多语言,那么可能涉及到Java的国际化和本地化机制,使用ResourceBundle和...
- `isieee`:判断是否遵循IEEE浮点运算标准。 - `computer`:返回MATLAB运行的计算机类型。 - `nargin`, `nargout`:获取函数输入和输出变量的数量。 - `ctime`, `date`, `etime`, `tic`, `toc`, `cputime`:...
- 调试工具和日志记录,如Log4j,帮助定位和修复问题。 9. **版本控制**: - 可能使用Git进行版本控制,便于团队协作和代码管理。 10. **部署与运行**: - 将项目打包成WAR文件,部署到服务器的webapps目录下,...
10. **错误处理与日志记录**:为了保证软件的健壮性,开发者通常会添加异常处理机制,并使用Log4j或其他日志框架记录运行时信息,便于调试和问题定位。 综上所述,"UpdateApp"项目涉及了Java基础、构建工具、网络...