0 0

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个答案 按时间排序 按投票排序

0 0

采纳的答案

可以的:

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是一个强大且灵活的日志工具,通过适当的配置和使用,可以帮助开发者更好地监控、调试和优化他们的应用程序。了解和掌握Log4j的使用,对于任何Java开发者来说都是非常有价值的技能。

    de.jayefem.log4e_free_1.3.3

    `plugins`则意味着该软件支持扩展,用户可以通过安装额外的插件来增强Log4e的功能,例如添加对不同日志存储后端的支持,如数据库、云存储,或者提供额外的日志分析工具。 在实际使用中,Log4e可能提供了以下关键...

    java项目依赖包

    Log4j是一个日志记录框架,用于记录应用程序运行过程中的事件信息。通过配置,开发者可以选择不同级别的日志输出,如DEBUG、INFO、WARN、ERROR等,方便调试和监控系统运行状态。 在提供的压缩包中,"lib"目录通常...

    Java代码测试IP是否为真实IP

    7. **日志记录**:为了调试和监控,可以使用Log4j、SLF4J等日志框架记录程序运行中的信息、警告和错误。 8. **单元测试**:使用JUnit或其他测试框架编写单元测试,确保代码的正确性。对于测试IP是否可达的功能,...

    java爬虫的实例代码+java清除空文件夹的代码

    - **日志记录**:为了便于调试和问题追踪,可以考虑使用Log4j或其他日志框架记录程序运行过程中的信息。 通过学习和理解这两个程序,你可以深入掌握Java的网络请求、HTML解析、文件操作以及目录管理等核心技能。这...

    删除服务器上的img

    - 使用`Logger.getLogger(ClearTempImg.class)`获取一个Logger实例,通过它可以在程序运行时记录各种级别的日志信息。 - 日志级别包括:`debug`、`info`、`warn`、`error`等。 - 在本例中,主要使用了`debug`级别来...

    网上文件管理系统(struts)

    同时,使用日志框架(如Log4j)记录系统运行情况,有助于排查问题。 9. 性能优化:例如,文件列表的显示可能会涉及大量文件,可以采用分页或懒加载技术,以减少一次性加载的负担。另外,对大文件上传,可以考虑切片...

    JavaEnterprise原始企业开发servlet+jsp实现系统用户注册 jar包

    5. **其他依赖库**:可能包含`log4j.jar`用于日志记录,`commons-lang.jar`或`guava.jar`提供通用工具类,`commons-dbcp.jar`和`commons-pool.jar`用于数据库连接池,提高数据库连接的复用和管理。 为了实现用户...

    Spring4.0 jar包

    在日志方面,Spring4.0支持SLF4J(Simple Logging Facade for Java)作为默认的日志抽象层,允许开发者选择任何兼容的底层日志框架,如Log4j或Logback。 最后,Spring4.0的“libs”目录通常包含了Spring框架的核心...

    java实现新闻发布

    - **日志记录**:通过Log4j等工具记录系统运行过程中的信息,便于问题排查。 综上所述,"java实现新闻发布"项目涉及到了Java Web开发的多个方面,包括数据库设计、前后端交互、用户体验以及系统优化等。这个系统...

    javaweb学生信息管理系统-源码.zip

    项目可能会使用try-catch语句处理异常,通过Log4j或其他日志框架记录系统运行日志。 这个"javawebProject-master"文件名表明了项目的主目录,其中可能包含src(源代码)、webapp(Web应用目录)、pom.xml(Maven...

    play!框架学习文档(汉化了一部分)

    - `log4j.properties` 文件用于配置日志记录机制,需要注意的是,这个文件需要用户手动添加。 ### 安装模块 为了扩展 Play! 的功能,可以很方便地安装各种模块: 1. **依赖声明**:在 `dependencies.yml` 文件中...

    read8686.com网站代码

    5. **日志管理**:SpringBoot默认集成了Logback或Log4j2进行日志记录。 【标签】"web SpringBoot"进一步确认了这个项目的核心技术是Web开发和SpringBoot框架。Web开发涵盖了前端和后端,前端通常涉及HTML、CSS和...

    网管教程 从入门到精通软件篇.txt

     在启动引导程序中通过指定配置启用重定向。  范例: bootcfg /redirect com1 115200 bootcfg /redirect useBiosSettings  hkdsk  创建并显示磁盘的状态报告。Chkdsk 命令还可列出并纠正磁盘上的错误。  ...

    common:日常工具类

    8. **日志记录**:日志库如`Log4j`或`SLF4J`用于记录程序运行过程中的信息,方便调试和问题定位。 9. **异常处理**:`Exception`类及其子类用于处理程序运行时可能出现的错误。良好的异常处理可以提高代码的健壮性...

    Project_Uch

    12. **日志记录**:为了跟踪程序运行状态和调试,项目可能会使用Log4j或SLF4J等日志框架。 13. **国际化和本地化**:如果项目需要支持多语言,那么可能涉及到Java的国际化和本地化机制,使用ResourceBundle和...

    MATLAB命令大全.doc

    - `isieee`:判断是否遵循IEEE浮点运算标准。 - `computer`:返回MATLAB运行的计算机类型。 - `nargin`, `nargout`:获取函数输入和输出变量的数量。 - `ctime`, `date`, `etime`, `tic`, `toc`, `cputime`:...

    java代码-软三47号JSP

    - 调试工具和日志记录,如Log4j,帮助定位和修复问题。 9. **版本控制**: - 可能使用Git进行版本控制,便于团队协作和代码管理。 10. **部署与运行**: - 将项目打包成WAR文件,部署到服务器的webapps目录下,...

    UpdateApp:这是我们的bodima应用

    10. **错误处理与日志记录**:为了保证软件的健壮性,开发者通常会添加异常处理机制,并使用Log4j或其他日志框架记录运行时信息,便于调试和问题定位。 综上所述,"UpdateApp"项目涉及了Java基础、构建工具、网络...

Global site tag (gtag.js) - Google Analytics