log4j怎么保存异常到一个文件啊在property里写如下### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n### log file ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File =D:/logs/error.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = ERROR 
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n### set log levels - for more verbose logging change 'info' to 'debug' ###log4j.rootLogger=warn,stdout,D我在struts 写个出异常的public class ManageAction extends BaseAction {
public ActionForward actionExecute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
try
{

        int a=(3/0);
}catch(Exception e)
{
e.printStackTrace();
}
return mapping.findForward("manageLoginFir");
}
}
出了异常为什么不保存到D:/logs/error.log? 还需要另外配置吗,谢谢

解决方案 »

  1.   

    给你个例子:
    # For JBoss: Avoid to setup Log4J outside $JBOSS_HOME/server/default/deploy/log4j.xml!
    # For all other servers: Comment out the Log4J listener in web.xml to activate Log4J.
    log4j.rootLogger=INFO, stdout, logfilelog4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%nlog4j.appender.logfile=org.apache.log4j.RollingFileAppender
    log4j.appender.logfile.File=D:/logs/error.log
    log4j.appender.logfile.MaxFileSize=512KB
    # Keep three backup files.
    log4j.appender.logfile.MaxBackupIndex=3
    # Pattern to output: date priority [category] - message
    log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
    log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n
      

  2.   

    public static final Logger logger = Logger.getLogger("error");
    try
            {
                
                    int a=(3/0);
            }catch(Exception e)
            {
             
    logger.warn(e.printStackTrace());
            }
            return mapping.findForward("manageLoginFir");
        }
      

  3.   

    保证你可以在D:/logs/error.log下看到日志
      

  4.   


    log4j.rootCategory=INFO, consoleLog, fileLoglog4j.appender.consoleLog=org.apache.log4j.ConsoleAppender
    log4j.appender.consoleLog.Target = System.out
    log4j.appender.consoleLog.layout = org.apache.log4j.PatternLayout
    log4j.appender.consoleLog.layout.ConversionPattern=STBSYSAP %d{yyyy-MM-dd HH:mm:ss,SSS} %p %C{1} %m%nlog4j.appender.fileLog=org.apache.log4j.DailyRollingFileAppender
    log4j.appender.fileLog.File = C:/error/error.log
    log4j.appender.fileLog.layout = org.apache.log4j.PatternLayout
    log4j.appender.fileLog.layout.ConversionPattern=STBSYSAP %d{yyyy-MM-dd HH:mm:ss,SSS} %p %C{1} %m%n
      

  5.   


    不是自动的吗,还有必要自己写logger.warn(e.printStackTrace());?
      

  6.   


    我把log4j.appender.D.Threshold = debug的时候,它就会自动在log里面记录一些系统信息,不用手动去写,但是异常就记录不了
      

  7.   

    你腰自己写log语句, 要不然它怎么知道该写什么, 不该写什么.
    logger.debug("some info");
    logger.info("some info");
    logger.warn("some info");
    logger.error("some info");
    基本就这几种用法.