-
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的FileAppender本身就有这样的机制,如:log4j.appender.logfile.File=${WORKDIR}/logs/app.log 其中“${...
log4j按功能保存日志
NULL 博文链接:https://1017401036.iteye.com/blog/2332210
tomcat6.0 配log4j日志的必须文件及配置过程 tomcat6-------lib | |--------tomcat-juli-adapters.jar | |--------log4j.jar | |--------log4j.properites | |----bin |--------tomcat-juli.jar 最后把log4...
使用log4j2实现日志数据脱敏
示范如何在android工程中使用log4j记录日志
log4j日志管理log4j日志管理log4j日志管理log4j日志管理log4j日志管理
Log4j有三个主要的组件:Loggers,Appenders和Layouts,这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出。综合使用这三个组件可以轻松的记录信息的类型和级别,并可以在运行时控制日志输出的样式和...
log4j 日志服务器 一个系统可能有多个子系统组成,这些子系统都有自己的日志,并且运行在不同的操作系统和主机上,收集这些日志对运营人员来说也比较困难。 因此决定在平台中采用日志服务器来做到集中日志管理,平台...
Log4j日志配置说明,Log4j日志配置说明Log4j日志配置说明,Log4j日志配置说明
Log4j比较全面的配置 log4j.rootLogger=DEBUG,CONSOLE,A1,im log4j.addivity.org.apache=true # 应用于控制台 log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender log4j.appender.Threshold=DEBUG log4j....
参照了几个网上大神配置,部分教程的描述有误,最终调试完成,可以实现kettle日志输出,测试版本...需要替换的文件为,Kettle的程序目录下data-integration-6.0\plugins\kettle5-log4j-plugin中有一个log4j.xml文件。
文件中内容包括模块中某个类单独输出到一个日志文件中、模块中某个package单独输出到一个日志文件中、同一模块不同package输出到一个日志文件中三种情况下log4j.properties配置项配置事例、Java类中代码如何一致编写...
log4j2配置文件,按照文件大小划分日志,保存日期天数内的日志,指纹日志命名规则,日志输出等级等功能
tomcat下的log4j日志配置,给tomcat配置log4j有好几种方法,我知道的有: 一、tomcat级别的统一日志管理 二、每个webapp分别配置log4j
本文档提供log4j配置相对路径三种方法:log4j.properties文件配置、xml文件配置和通过servlet初始化方式来配置,希望对大家有所帮助
每天生成一个log4j日志文件,如果只需要将最近一段时间内的日志文件保留,以前或更早的文件不用保留。例如只保留最近一周的日志,日志文件保留3天等等这些。。。通过这个jar包就可以实现。 log4j.properties文件在...
演示了java记录通过log4j2记录日志到mysql数据库中
设置log4j的根目录,值为 日志等级(DEBUG,INFO,WARN,ERROR,FATAL) , 输出目标名称 log4j.rootLogger=DEBUG,A1 设置输出方式,常用的有: ConsoleAppender 在控制器中输出信息 RollingFileApperder 在文件中输出...
根据不同配置的loggers将不同级别的log输入到控制台或文件,类似于java中经常用到的System.out.println,但是log4j封装后的loggers组件能够输出更丰富的信息,包括时间,线程,log所在程序的行数等。log的级别从低到...