我想问下,例如我要将error信息写到 1.log文件里面,
要将正常的信息写到2.log文件;里面,,
想问的是
在log4j.properties里如何的作设置,,
还有在使用的时候怎么用的,,
我自己试了好久都不行

解决方案 »

  1.   

    eg:log4j.appender.R.File=$TOMCAT_HOME/webapps/dbweb/logs/log4j.log 
      

  2.   

    发个例子让你看看吧.
    1.log4j的配置文件.# Configuration File for the Logger component in the framework
    # This property file needs to be accessible in the classpath in order for the
    # logger to configure properly# set to false to turn off log4j debug statements
    log4j.debug=true# Turns off logging in log4j
    # log4j.threshold=OFFlog4j.rootLogger=ERROR,stdout
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.MaxFileSize=50000KB
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=%-4r [%d{ISO8601}] [%t] %-5p %c %x - %m%n# Configuration for Web Logger
    #
    log4j.logger.WEB=debug,weblog
    log4j.appender.weblog=org.apache.log4j.DailyRollingFileAppender
    log4j.appender.weblog.File=f:/hubstar-web.log
    log4j.appender.weblog.DatePattern='.'yyyyMM
    log4j.appender.weblog.layout=org.apache.log4j.PatternLayout
    log4j.appender.weblog.layout.ConversionPattern=%-4r [%d{ISO8601}] [%t] %-5p %c %x - %m%n# Configuration for BIZ Logger
    #
    log4j.logger.BIZ=debug,bizlog
    log4j.appender.bizlog=org.apache.log4j.DailyRollingFileAppender
    log4j.appender.bizlog.File=f:/hubstar-biz.log
    log4j.appender.bizlog.DatePattern='.'yyyyMM
    log4j.appender.bizlog.layout=org.apache.log4j.PatternLayout
    log4j.appender.bizlog.layout.ConversionPattern=%-4r [%d{ISO8601}] [%t] %-5p %c %x - %m%n# Configuration for PERSISTENCE Logger
    #
    log4j.logger.PERSISTENCE=debug,persistlog
    log4j.appender.persistlog=org.apache.log4j.DailyRollingFileAppender
    log4j.appender.persistlog.File=f:/hubstar-persist.log
    log4j.appender.persistlog.DatePattern='.'yyyyMM
    log4j.appender.persistlog.layout=org.apache.log4j.PatternLayout
    log4j.appender.persistlog.layout.ConversionPattern=[%d{ISO8601}] [%t] %-5p %c %x- %m%n# Configuration for Auditor Logger
    #
    log4j.logger.AUDITOR=debug,auditorlog
    log4j.appender.auditorlog=org.apache.log4j.DailyRollingFileAppender
    log4j.appender.auditorlog.File=f:/hubstar-audit.log
    log4j.appender.auditorlog.DatePattern='.'yyyyMM
    log4j.appender.auditorlog.layout=org.apache.log4j.PatternLayout
    log4j.appender.auditorlog.layout.ConversionPattern=[%d{ISO8601}] [%t] %-5p %c - %m%nlog4j.logger.ALERT=debug,alertloglog4j.appender.alertlog=org.apache.log4j.RollingFileAppender
    log4j.appender.alertlog.File=f:/hubstar-alert.log
    log4j.appender.alertlog.DatePattern='.'yyyyMM
    log4j.appender.alertlog.layout=org.apache.log4j.PatternLayout
    log4j.appender.alertlog.layout.ConversionPattern=[%d{ISO8601}] - %m%n
      

  3.   

    2.log4j的类.package com.ufinity.mealsordering.common;public interface ILogger {
        public abstract String getLoggerType();    public abstract boolean debug(String userId, String  method, String message);    public abstract boolean debug(String userId, String  method, String message, Throwable throwable);    public abstract boolean info(String userId, String  method, String message);    public abstract boolean info(String userId, String  method, String message, Throwable throwable);    public abstract boolean warn(String userId, String  method, String message);    public abstract boolean warn(String userId, String  method, String message, Throwable throwable);    public abstract boolean error(String userId, String  method, String message);    public abstract boolean error(String userId, String  method, String message, Throwable throwable);    public abstract boolean fatal(String userId, String  method, String message);    public abstract boolean fatal(String userId, String  method, String message, Throwable throwable);}
    -------------------------------------------------------------------------------------------------------------------------
    package com.ufinity.mealsordering.common;import java.text.MessageFormat;import org.apache.log4j.Level;
    import org.apache.log4j.Logger;public class LoggerImpl implements ILogger{
        private Logger  _logger = null;    private String _loggerType = null;    public LoggerImpl(String type, Logger _logger) {
            this._loggerType = type;
            this._logger = _logger;
        }    private static MessageFormat _formatter = new MessageFormat("<< {0} >> [{1}] [{2}]: {3}");
        
        public static String format(String type, String userid, String method,
                String message) {
            return _formatter.format(new Object[] { type, method, userid, message });
        }
        
        public String getLoggerType()
        {
            return _loggerType;
        }    public boolean debug(String userId, String method, String message)
        {
            return debug(userId, method, message, null);
        }    public boolean debug(String userId, String method, String message, Throwable throwable)
        {
            if(_logger.isDebugEnabled())
            {
                if(throwable != null)
                    _logger.debug(format(_loggerType, userId, method, message), throwable);
                else
                    _logger.debug(format(_loggerType, userId, method, message));
                return true;
            } else
            {
                return false;
            }
        }    public boolean info(String userId, String method, String message)
        {
            return info(userId, method, message, null);
        }    public boolean info(String userId, String method, String message, Throwable throwable)
        {
            if(_logger.isInfoEnabled())
            {
                if(throwable != null)
                    _logger.info(format(_loggerType, userId, method, message), throwable);
                else
                    _logger.info(format(_loggerType, userId, method, message));
                return true;
            } else
            {
                return false;
            }
        }    public boolean warn(String userId, String method, String message)
        {
            return warn(userId, method, message, null);
        }    public boolean warn(String userId, String method, String message, Throwable throwable)
        {
            if(_logger.isEnabledFor(Level.WARN))
            {
                if(throwable != null)
                    _logger.warn(format(_loggerType, userId, method, message), throwable);
                else
                    _logger.warn(format(_loggerType, userId, method, message));
                return true;
            } else
            {
                return false;
            }
        }    public boolean error(String userId, String method, String message)
        {
            return error(userId, method, message, null);
        }    public boolean error(String userId, String method, String message, Throwable throwable)
        {
            if(_logger.isEnabledFor(Level.ERROR))
            {
                if(throwable != null)
                    _logger.error(format(_loggerType, userId, method, message), throwable);
                else
                    _logger.error(format(_loggerType, userId, method, message));
                return true;
            } else
            {
                return false;
            }
        }    public boolean fatal(String userId, String method, String message)
        {
            return fatal(userId, method, message, null);
        }    public boolean fatal(String userId, String method, String message, Throwable throwable)
        {
            if(_logger.isEnabledFor(Level.FATAL))
            {
                if(throwable != null)
                    _logger.fatal(format(_loggerType, userId, method, message), throwable);
                else
                    _logger.fatal(format(_loggerType, userId, method, message));
                return true;
            } else
            {
                return false;
            }
        }    }
    --------------------------------------------------------------------------------------------------------------
    使用方式:public List queryAllGlobalSettings() {
    String userId = "";
    String method = "queryAllGlobalSettings";
    List globalSettings = null;
    try {
    String hql = "FROM GlobalSetting AS g";
    globalSettings  = this.find(hql);
    this.info(userId, method, Constant.LOG_QUERY_SUCCESS);
    } catch (HibernateException e) {
    error(userId, method, "hibernate exception", e); //-----log4j使用方式
    throw e;
    }
    return globalSettings;
    }
      

  4.   

    设定2个Logger A,B,
    A的级别设置为INFO,B的级别设置为ERROR
    A的Layout设置为1.log
    B的Layout设置为2.log
    这样可以的吧我不知道回答的是不是你要求的,
      

  5.   

    记录到一个文件中可行啊 只要把正常信息和错误的分离就ok了
    ps 分开真不杂好办
      

  6.   

    如果你的意思是必须是一个Logger来解决的话,
    那我觉得比较麻烦,可以自己写日志类。
    但是我认为没有那个必要,
      

  7.   

    nanjg你好,能一起探讨下吗?
    我给你发过信息
      

  8.   

    找到了一个分开录入的你参考下
    log4j.properties 配置如下log4j.appender.MF=org.apache.log4j.MultiFileAppender
    log4j.appender.MF.maxBackupIndex=100000
    log4j.appender.MF.maxFileSize=1MB
    log4j.appender.MF.layout=org.apache.log4j.PatternLayout
    log4j.appender.MF.layout.ConversionPattern=[%-5p] %d: %m%n
    log4j.appender.MF.dir=${catalina.home}/logs/myLoglog4j.rootLogger=warn, MFlog4j.logger.myLog=debug 
       1. public class MultiFileAppender extends AppenderSkeleton {  
       2.     private final Map<String, RollingFileAppender> appenders = new HashMap<String, RollingFileAppender>();  
       3.     private final ReadWriteLock R_W_LOCK = new ReentrantReadWriteLock();  
       4.     private final Layout layout = new PatternLayout("%d: %m%n");  
       5.     private String dir = "/logs";  
       6.     private int maxBackupIndex = 0;  
       7.     private String maxFileSize = "1MB";  
       8.   
       9.     public void setDir(String dir) {  
      10.         this.dir = dir;  
      11.     }  
      12.   
      13.     public void append(LoggingEvent event) {  
      14.         Level l = event.getLevel();  
      15.         String key = l.toString();  
      16.         RollingFileAppender appender;  
      17.         R_W_LOCK.readLock().lock();  
      18.         try {  
      19.             appender = appenders.get(key);  
      20.         } finally {  
      21.             R_W_LOCK.readLock().unlock();  
      22.         }  
      23.         if (appender == null) {  
      24.             R_W_LOCK.writeLock().lock();  
      25.             try {  
      26.                 appender = appenders.get(key);  
      27.                 if (appender == null) {  
      28.                     try {  
      29.                         appender = new RollingFileAppender(layout, new File(dir, key.toLowerCase() + ".log").getPath());  
      30.                         appender.setMaxFileSize(this.maxFileSize);  
      31.                         appender.setMaxBackupIndex(this.maxBackupIndex);  
      32.                         appenders.put(key, appender);  
      33.                     } catch (IOException e) {  
      34.                         throw new RuntimeException(e);  
      35.                     }  
      36.                 }  
      37.             } finally {  
      38.                 R_W_LOCK.writeLock().unlock();  
      39.             }  
      40.         }  
      41.         appender.append(event);  
      42.     }  
      43.   
      44.     public void setMaxBackupIndex(int maxBackups) {  
      45.         this.maxBackupIndex = maxBackups;  
      46.     }  
      47.   
      48.     public void setMaxFileSize(String maxFileSize) {  
      49.         this.maxFileSize = maxFileSize;  
      50.     }  
      51.   
      52.     public void close() {  
      53.         R_W_LOCK.readLock().lock();  
      54.         try {  
      55.             for (Iterator<RollingFileAppender> it = appenders.values().iterator(); it.hasNext();)  
      56.                 it.next().close();  
      57.         } finally {  
      58.             R_W_LOCK.readLock().unlock();  
      59.         }  
      60.     }  
      61.   
      62.     public boolean requiresLayout() {  
      63.         return false;  
      64.     }  
      65. }  
      

  9.   

    在配置文件中对不同的类和级别进行不同的APPENDER设置就可以了吧.
    具体的楼上几位都写了.呵呵
      

  10.   

    MultiFileAppender类的这些代码有自己去写的把,,不是log4j里面就有的把?兄弟
      

  11.   

    log4j.rootLogger=info, MF
    ................
    这样我知道配置了要写info级的日志的输出文件,,
    我还可以在资源文件里面接着
    log4j.rootLogger=error, ER
    吗?
      

  12.   

    呵呵,,谢谢你,兄弟,终于看懂了,,
    你的意思是,,
    log.info("ddf");
    以后就可以,写到info的日志里面
    要是
    log.error("大多数上");
    就可以写到error里面了,对吧
      

  13.   

    这样配置后 会在2个log文件中分别的得到对应级别的log
    你的理解是对的