log4j多文件输出问题,会log4j的请进来看看

快跑的蜗牛 发布于 2013/11/12 15:54
阅读 1K+
收藏 1

这是我的log4j配置文件log4j.properties

log4j.rootLogger=info,console,file

log4j.appender.console=org.apache.log4j.ConsoleAppender

log4j.appender.console.layout=org.apache.log4j.SimpleLayout
log4j.appender.console.layout.ConversionPattern=<%d> <%-5p> <%c> - %m(%F:%M:%L)%n

log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.File=/log4j_log/officeEMS_log.log
log4j.appender.file.DatePattern='_'yyyy-MM-dd'.log'
log4j.appender.file.MaxFileSize=2000KB
log4j.appender.file.MaxBackupIndex=20
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=[%-5p][%d{yyyy-MM-dd HH🇲🇲ss}] | %m%n

log4j.additivity.nettyLog1= false
####netty日志
log4j.logger.nettyLog1=info,log1
log4j.appender.log1=org.apache.log4j.DailyRollingFileAppender
log4j.appender.log1.File=/log4j_log/officeEMS_nettyLog.log
log4j.appender.log1.DatePattern='_'yyyy-MM-dd'.log'
log4j.appender.log1.MaxFileSize=2000KB
log4j.appender.log1.MaxBackupIndex=20
log4j.appender.log1.layout=org.apache.log4j.PatternLayout

log4j.appender.log1.layout.ConversionPattern=%d %p [%c] - %m%n

这是在类中的java代码

private static final Log log = LogFactory.getLog(ServerHandler.class);
private static final Log log1 = LogFactory.getLog("nettyLog1");
我希望log.info("")和log1.info("")分别写入不同的日记文件。log是一个全局日志,所有需要记录日志的类中都会引用。log1只会在个别类中引用。

现在的问题是系统只会生成一个全局的日志文件,log1对应的日志文件不生成。不知道为什么,请高手解答?


加载中
0
快跑的蜗牛
快跑的蜗牛

问题已经解决,非常感谢“xdev”的帮助。

web文件有一段这样的配置


<servlet>
    <servlet-name>log4jinit</servlet-name>
    <servlet-class>com.miartech.oems.commons.Log4jInit</servlet-class>
    <init-param>
      <param-name>log4j</param-name>
      <param-value>/WEB-INF/classes/log4j.properties</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
Log4jInit类修改了生成日志文件的路径



public void init(ServletConfig config) throws ServletException {
	        String prefix = config.getServletContext().getRealPath("/");
	        String file = config.getInitParameter("log4j");
	        String filePath = prefix + file;
	        Properties props = new Properties();
	        try {
	            FileInputStream istream = new FileInputStream(filePath);
	            props.load(istream);
	            istream.close();
	            String logFile = prefix + props.getProperty("log4j.appender.file.File");//设置路径
	            props.setProperty("log4j.appender.file.File",logFile);
	          //加上下面两段代码,就可以重置log1生成的日志文件路径
	           // String logFile1 = prefix + props.getProperty("log4j.appender.log1.File");
	           // props.setProperty("log4j.appender.log1.File",logFile1);
	            PropertyConfigurator.configure(props);//装入log4j配置信息
	        } catch (IOException e) {
	            log.error("Could not read configuration file [" + filePath + "].");
	            log.error("Ignoring configuration file [" + filePath + "].");
	            e.printStackTrace();
	        }

	    }
加上
String logFile1 = prefix +props.getProperty("log4j.appender.log1.File");
 props.setProperty("log4j.appender.log1.File",logFile1);
嘿嘿,officeEMS_nettyLog.log文件也生成了


1
xdev
xdev

没注释前


注释后

java代码

public class TestLog {

    public static void main(String[] args) {

        Logger log1 = LoggerFactory.getLogger("nettyLog1");
        log1.info("abcd");
    }

}

0
快跑的蜗牛
快跑的蜗牛
几天还没有人回答,牛人茫茫人海何处寻
0
0071
0071
0071
@快跑的蜗牛 那就写两个log,一个是写入全局的,一个是写入另外单独的日志中。
快跑的蜗牛
快跑的蜗牛
非常感谢你的回答,我现在的问题是:在一个类中有log4j.rootLogger全局日志的情况,还可以再输出一个日志文件。不是单纯的在一个类中输出两个日志文件。
0
xdev
xdev

基本上没有什么错误,修改如下


 log4j.rootLogger=info,console,file

log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=<%d> <%-5p> <%c> - %m(%F:%M:%L)%n

log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.File=officeEMS_log.log
log4j.appender.file.DatePattern='_'yyyy-MM-dd'.log'
#log4j.appender.file.MaxFileSize=2000KB
#log4j.appender.file.MaxBackupIndex=20
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=[%-5p][%d{yyyy-MM-dd HH:mm:ss}] | %m%n

log4j.additivity.nettyLog1= false
####netty日志
log4j.logger.nettyLog1=info,log1
log4j.appender.log1=org.apache.log4j.DailyRollingFileAppender
log4j.appender.log1.File=officeEMS_nettyLog.log
log4j.appender.log1.DatePattern='_'yyyy-MM-dd'.log'
#log4j.appender.log1.MaxFileSize=2000KB
#log4j.appender.log1.MaxBackupIndex=20
log4j.appender.log1.layout=org.apache.log4j.PatternLayout

log4j.appender.log1.layout.ConversionPattern=%d %p [%c] - %m%n

请区分RollingFileAppender和DailyRollingFileAppender区别,建议使用logback

快跑的蜗牛
快跑的蜗牛
非常感谢,不过主要问题还没有解决
0
purely
purely

调整不同类的输出级别,就可以按级别输出到不通的日志文件中

log4j.logger.org.apache.ibatis=INFO

这句就调整级别为INFO,对于这个类,就只会输出在级别为INFO的文件中。

快跑的蜗牛
快跑的蜗牛
现在第二个日志文件就没有生成,现在项目开发完了,不可能做大的调整。而且我这个问题的核心应该是全局日志和非全局日志的输出问题。也非常感谢你的回答!!!
0
快跑的蜗牛
快跑的蜗牛
坐等高手,求解决!
0
xdev
xdev
我上面写的配置,在我机子上面会产生两个文件呀,不知道你所说的主要问题是什么问题。如果你像在officeEMS_nettyLog.log文件里面的内容也写到officeEMS_log.log文件中,需要注释掉log4j.additivity.nettyLog1= false,这样,下级的日志才会出现在上级日志中。
返回顶部
顶部