现在我们有一个服务端的程序,后续的功能需求是要求在程序运行过程中动态更改log4j的日志级别、文件名、文件路径等信
息,原先是DOMConfigurator.configureAndWatch 这个方法加载了log4j配置文件,如果用动态加载应该用log4j中的哪个类来进行设值?
设置完成以后再运行DOMConfigurator.configureAndWatch就可以了吗?

解决方案 »

  1.   

        /**
         * 写运行日志
         * 
         * @param level 日志级别
         * @param message 日志信息
         * @param throwable 异常信息
         */
        public static void runLog(IfRun level, String message, Throwable throwable)
        {
            try
            {
                setMDC(IfRun.LOG_TYPE_RUN);
                switch (level.getLevel())
                {
                    case IfRun.DEBUG:                    if (runLog.getRepository().isDisabled(AppLevel.DEBUG_INT))
                        {
                            return;
                        }
                        if (AppLevel.DEBUG.isGreaterOrEqual(runLog.getEffectiveLevel()))
                        {
                            runLog.log(FQCN, AppLevel.DEBUG, message, throwable);
                        }
                        break;
                    case IfRun.INFO:
                        if (runLog.getRepository().isDisabled(AppLevel.INFO_INT))
                        {
                            return;
                        }
                        if (AppLevel.INFO.isGreaterOrEqual(runLog.getEffectiveLevel()))
                        {
                            runLog.log(FQCN, AppLevel.INFO, message, throwable);
                        }
                        
                        break;
                    case IfRun.NOTICE:
                        if (runLog.getRepository().isDisabled(AppLevel.NOTICE_INT))
                        {
                            return;
                        }
                        if (AppLevel.NOTICE.isGreaterOrEqual(runLog.getEffectiveLevel()))
                        {
                            runLog.log(FQCN, AppLevel.NOTICE, message, throwable);
                        }
                        break;
                    case IfRun.WARN:
                        if (runLog.getRepository().isDisabled(AppLevel.WARN_INT))
                        {
                            return;
                        }
                        if (AppLevel.WARNING.isGreaterOrEqual(runLog.getEffectiveLevel()))
                        {
                            runLog.log(FQCN, AppLevel.WARNING, message, throwable);
                        }
                        
                        break;
                    case IfRun.ERROR:
                        if (runLog.getRepository().isDisabled(AppLevel.ERROR_INT))
                        {
                            return;
                        }
                        if (AppLevel.ERROR.isGreaterOrEqual(runLog.getEffectiveLevel()))
                        {
                            runLog.log(FQCN, AppLevel.ERROR, message, throwable);
                        }
                        
                        break;
                    case IfRun.CRITICAL:
                        if (runLog.getRepository()
                                .isDisabled(AppLevel.CRITICAL_INT))
                        {
                            return;
                        }
                        if (AppLevel.CRITICAL.isGreaterOrEqual(runLog.getEffectiveLevel()))
                        {
                            runLog.log(FQCN, AppLevel.CRITICAL, message, throwable);
                        }
                        break;
                    case IfRun.ALERT:
                        if (runLog.getRepository().isDisabled(AppLevel.ALERT_INT))
                        {
                            return;
                        }
                        if (AppLevel.ALERT.isGreaterOrEqual(runLog.getEffectiveLevel()))
                        {
                            runLog.log(FQCN, AppLevel.ALERT, message, throwable);
                        }
                        break;
                    case IfRun.EMERGENCY:
                        if (runLog.getRepository()
                                .isDisabled(AppLevel.EMERGENCY_INT))
                        {
                            return;
                        }
                        if (AppLevel.EMERGENCY.isGreaterOrEqual(runLog.getEffectiveLevel()))
                        {
                            runLog.log(FQCN, AppLevel.EMERGENCY, message, throwable);
                        }
                        break;
                    default:
                        break;
                }
            }
            finally
            {
                resetMDC();
            }
        }
      

  2.   

    如果要实现动态写入日志需要自己去写,在程序启动时加载log4j.xml.
      

  3.   

    对据我所知log4j可在服务启动的时候加载而日志信息的话,可以自己在程序中添加private static Log log = LogFactory.getLog(类名.class);log.info(“”);
    log.error("","");
    log.debug("");
      

  4.   

    配置log4j.properties如下
    log4j.rootLogger=ERROR, common
    log4j.logger.cn.sh.cares=ERROR, framework
    log4j.logger.ecmr.quality.am=DEBUG, am
    log4j.logger.org.hibernate=ERROR,hibernate
    log4j.logger.org.springframework=ERROR,springlog4j.appender.common=org.apache.log4j.ConsoleAppender
    #log4j.appender.common=org.apache.log4j.DailyRollingFileAppender
    #log4j.appender.common.File=am/common.log
    log4j.appender.common.layout=org.apache.log4j.PatternLayout
    log4j.appender.common.layout.ConversionPattern==%d %-5p [%c] - %m%nlog4j.appender.framework=org.apache.log4j.DailyRollingFileAppender
    log4j.appender.framework.File=am/framework.log
    log4j.appender.framework.layout=org.apache.log4j.PatternLayout
    log4j.appender.framework.layout.ConversionPattern==%d %-5p [%c] - %m%nlog4j.appender.am=org.apache.log4j.DailyRollingFileAppender
    log4j.appender.am.File=am/am.log
    log4j.appender.am.layout=org.apache.log4j.PatternLayout
    log4j.appender.am.layout.ConversionPattern==%d %-5p [%c] - %m%nlog4j.appender.hibernate=org.apache.log4j.DailyRollingFileAppender
    log4j.appender.hibernate.File=am/hibernate.log
    log4j.appender.hibernate.layout=org.apache.log4j.PatternLayout
    log4j.appender.hibernate.layout.ConversionPattern==%d %-5p [%c] - %m%nlog4j.appender.spring=org.apache.log4j.DailyRollingFileAppender
    log4j.appender.spring.File=am/spring.log
    log4j.appender.spring.layout=org.apache.log4j.PatternLayout
    log4j.appender.spring.layout.ConversionPattern==%d %-5p [%c] - %m%n