`
wangzi6hao
  • 浏览: 212560 次
  • 性别: Icon_minigender_1
  • 来自: sdf
社区版块
存档分类
最新评论

Log4j深入研究 Log4j为单个类写单个日志文件 Log4j为包写文件

阅读更多

本人因要写个很大的日志文件,而且格式等还能自定义.效率还有要求.后来看到了log4j的配置以及性能,就想用log4j来生成单独类的日志文件.因为 自己懒,不想再造轮子,也怕自己技术不够好,对大日志文件写的效率太烂.利用现有技术来实现是最好不过了.于是做了一系列的测试以后得到以下配置.有些地 方可能还不如人意.请大家多多包涵了.
第一种

package com.webgame.msg.manage;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;

import org.apache.log4j.Logger;

public class SendMsgStartup extends HttpServlet {
private final Logger logger = Logger.getLogger(SendMsgStartup.class);

public void init(ServletConfig servletConfig) throws ServletException {
try {
super.init(servletConfig);
logger.info("第一个info测试,测试加载的哪个文件");
Logger logger1 = Logger.getLogger(SendMsgStartup.class);
for (int i = 0; i < 10; i++) {
logger1
.debug(" debugdebugdebugdebugdebugdebugdebugdebugdebugdebugdebugdebugdebugdebugdebugdebugdebugdebugdebug ");
logger1
.error(" errorerrorerrorerrorerrorerrorerrorerrorerrorerrorerrorerrorerrorerrorerrorerrorerrorerrorerror ");
logger1
.info(" infoinfoinfoinfoinfoinfoinfoinfoinfoinfoinfoinfoinfoinfoinfoinfoinfoinfoinfoinfoinfoinfoinfoinfo ");
}
} catch (Exception e) {
e.printStackTrace();
}
}

}

 log4j配置文件:

log4j.rootLogger=DEBUG,CONSOLE,FILE
#优先级从高到低分别是ERROR、WARN、INFO、DEBUG
#这里推荐选择二种,分别为ERROR:仅仅只记录错误名和位置;DEBUG:记录所有错误的详细信息
#在生产配置下,请关闭应用于控制台CONSOLE选项,仅启用FILE及可
log4j.addivity.org.apache=true

# 应用于控制台
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Threshold=DEBUG
log4j.appender.CONSOLE.Target=System.out
log4j.appender.CONSOLE.Encoding=GBK
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d(line-%L)- %m%n

#应用于文件
log4j.appender.FILE=org.apache.log4j.RollingFileAppender
log4j.appender.FILE.File=D:\\webGame\\game.log
log4j.appender.FILE.MaxFileSize=1MB
log4j.appender.FILE.MaxBackupIndex=100
log4j.appender.FILE.Encoding=GBK
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.ConversionPattern=%d [%t] %-5p %c(line-%L) %-4r %x - %m%n

#这里为子日志文件配置

log4j.logger.com.webgame.msg.manage.SendMsgStartup=DEBUG,CONSOLE1,FILE1

log4j.addivity.org.apache=false

#
log4j.additivity.com.webgame.msg.manage.SendMsgStartup=false 这里如果设置为true,刚会把相关的日志文件,也写入到主日志文件里.


log4j.additivity.com.webgame.msg.manage.SendMsgStartup=false

# 应用于控制台 

log4j.appender.CONSOLE1=org.apache.log4j.ConsoleAppender

log4j.appender.CONSOLE1.Threshold=DEBUG

log4j.appender.CONSOLE1.Target=System.out

log4j.appender.CONSOLE1.Encoding=GBK

log4j.appender.CONSOLE1.layout=org.apache.log4j.PatternLayout

log4j.appender.CONSOLE1.layout.ConversionPattern=%d(line-%L)- %m%n

#应用于文件

log4j.appender.FILE1=org.apache.log4j.RollingFileAppender

log4j.appender.FILE1.Threshold=DEBUG

log4j.appender.FILE1.File=D:\\webGame\\blcs.msg.log

log4j.appender.FILE1.MaxFileSize=10MB

log4j.appender.FILE1.MaxBackupIndex=100

log4j.appender.FILE1.Encoding=GBK

log4j.appender.FILE1.layout=org.apache.log4j.PatternLayout

log4j.appender.FILE1.layout.ConversionPattern=%d [%t] %-5p %c(line-%L) %-4r %x - %m%n

 在红色的地方,就是配置说明,相关的配置会单独的写到blcs.msg.log 里.而不会写入到主日志文件里.
经过以上配置,SendMsgStartup 类里的所有日志信息都会写到一个文件里.

+++++++第一种++++++++++++++第一种++++++++++++++第一种++++++++++++++第一种+++++++

 


针对于第一种文件的配置,很郁闷的是,这个类里所有的日志都会写到blcs.msg.log 里.而实际上,可能一个些类我不想写到一个文件里.于是我改了一下配置.
+++++++第二种++++++++++++第二种++++++++++++第二种++++++++++++第二种+++++

 

 

package com.webgame.msg.manage;

import java.net.URL;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;

import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;

import com.webgame.test.TestLog4j;

public class SendMsgStartup extends HttpServlet {
private final Logger logger = Logger.getLogger(SendMsgStartup.class);

public void init(ServletConfig servletConfig) throws ServletException {
try {
super.init(servletConfig);
logger.info("第一个info测试,测试加载的哪个文件");
String BLCX_XML_CONFIG_FILEPATH = TestLog4j.class.getResource("/")
+ "xml/games/blcx.log4j.properties";//与第一种不同的地方
URL url = new URL(BLCX_XML_CONFIG_FILEPATH);
PropertyConfigurator.configure(url);
Logger logger1 = Logger.getLogger(SendMsgStartup.class);
for (int i = 0; i < 10; i++) {
logger1
.debug(" debugdebugdebugdebugdebugdebugdebugdebugdebugdebugdebugdebugdebugdebugdebugdebugdebugdebugdebug ");
logger1
.error(" errorerrorerrorerrorerrorerrorerrorerrorerrorerrorerrorerrorerrorerrorerrorerrorerrorerrorerror ");
logger1
.info(" infoinfoinfoinfoinfoinfoinfoinfoinfoinfoinfoinfoinfoinfoinfoinfoinfoinfoinfoinfoinfoinfoinfoinfo ");
}
logger.info("第一个info测试结束,测试加载的哪个文件");

} catch (Exception e) {
e.printStackTrace();
}
}

}
 

独立出配置文件:blcx.log4j.properties

#log4j.rootLogger=DEBUG,CONSOLE,FILE
#优先级从高到低分别是ERROR、WARN、INFO、DEBUG
#这里推荐选择二种,分别为ERROR:仅仅只记录错误名和位置;DEBUG:记录所有错误的详细信息
#在生产配置下,请关闭应用于控制台CONSOLE选项,仅启用FILE及可
log4j.logger.com.webgame.msg.manage.SendMsgStartup=DEBUG,CONSOLE1,FILE1
log4j.addivity.org.apache=false
log4j.additivity.com.webgame.msg.manage.SendMsgStartup=false
# 应用于控制台
log4j.appender.CONSOLE1=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE1.Threshold=DEBUG
log4j.appender.CONSOLE1.Target=System.out
log4j.appender.CONSOLE1.Encoding=GBK
log4j.appender.CONSOLE1.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE1.layout.ConversionPattern=%d(line-%L)- %m%n

#应用于文件
log4j.appender.FILE1=org.apache.log4j.RollingFileAppender
log4j.appender.FILE1.Threshold=DEBUG
log4j.appender.FILE1.File=D:\\webGame\\blcs.msg.log
log4j.appender.FILE1.MaxFileSize=10MB
log4j.appender.FILE1.MaxBackupIndex=100
log4j.appender.FILE1.Encoding=GBK
log4j.appender.FILE1.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE1.layout.ConversionPattern=%d [%t] %-5p %c(line-%L) %-4r %x - %m%n

 +++++++第二种++++++++++++第二种++++++++++++第二种++++++++++++第二种+++++
类文件改成以下:

package com.webgame.msg.manage;

import java.net.URL;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;

import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;

import com.webgame.test.TestLog4j;

public class SendMsgStartup extends HttpServlet {
private final Logger logger = Logger.getLogger(SendMsgStartup.class);

public void init(ServletConfig servletConfig) throws ServletException {
try {
super.init(servletConfig);
logger.info("第一个info测试,测试加载的哪个文件");
String BLCX_XML_CONFIG_FILEPATH = TestLog4j.class.getResource("/")
+ "xml/games/blcx.log4j.properties";
URL url = new URL(BLCX_XML_CONFIG_FILEPATH);
PropertyConfigurator.configure(url);
Logger logger1 = Logger.getLogger(SendMsgStartup.class);
for (int i = 0; i < 10; i++) {
logger1
.debug(" debugdebugdebugdebugdebugdebugdebugdebugdebugdebugdebugdebugdebugdebugdebugdebugdebugdebugdebug ");
logger1
.error(" errorerrorerrorerrorerrorerrorerrorerrorerrorerrorerrorerrorerrorerrorerrorerrorerrorerrorerror ");
logger1
.info(" infoinfoinfoinfoinfoinfoinfoinfoinfoinfoinfoinfoinfoinfoinfoinfoinfoinfoinfoinfoinfoinfoinfoinfo ");
}
logger.info("第一个info测试结束,测试加载的哪个文件");

} catch (Exception e) {
e.printStackTrace();
}
}

}

 +++++++第二种++++++++++++第二种++++++++++++第二种++++++++++++第二种+++++
虽然做到了,logger.info("第一个info测试,测试加载的哪个文件");是打印在主日志文件里.
但是经过 PropertyConfigurator.configure(url); 后
包含logger.info("第一个info测试结束,测试加载的哪个文件");文件都打印在blcs.msg.log 文件里,很郁闷.
应该有更好的加载方法,不是从全局来加载的,不过已经完成了大部分的问题,这一个问题就放着了.因为对大功能已经不影响了.

分享到:
评论

相关推荐

    log4j日志文件

    例如,`log4j.appender.mylog=org.apache.log4j.FileAppender`表示日志将写入文件。 - **Layout**:日志输出格式,如HTML、Simple、TTCC或PatternLayout。PatternLayout允许自定义输出格式,如`%m`输出消息,`%p`...

    Log4j日志包

    log4j.rootLogger=debug,CONSOLE,testfile,A1,MAIL ################### # Console Appender ################### log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender log4j.appender.CONSOLE.Target=...

    log4j删除前N天日志

    本话题将深入探讨如何使用Log4j中的DailyRollingFileAppender配置来自动删除前N天的日志,以便保持日志文件的大小和数量在可控范围内。 首先,DailyRollingFileAppender是Log4j中的一个Appender实现,它按照日期...

    log4j2配置文件,按照文件大小划分日志,保存日期天数内的日志等

    log4j2配置文件,按照文件大小划分日志,保存日期天数内的日志,指纹日志命名规则,日志输出等级等功能

    tomcat下用Log4j 按文件大小,生成catalina.out日志文件

    在Tomcat中配置Log4j,可以实现按照文件大小生成日志文件,如`catalina.out`,从而避免单个日志文件过大导致的管理不便。 首先,我们需要理解Log4j的工作原理。Log4j主要包括三个核心组件:Logger(日志器)、...

    Log4J_全能配置文件.pdf

    - `log4j.appender.ROLLING_FILE.MaxFileSize=10KB`:设置单个文件的最大大小为10KB。 - `log4j.appender.ROLLING_FILE.MaxBackupIndex=1`:设置备份文件的最大数量为1个。 - `log4j.appender.ROLLING_FILE.layout=...

    log4j.zip 项目日志

    《深入理解Log4j:构建高效日志管理体系》 在软件开发中,日志系统扮演着至关重要的角色,它能够帮助开发者追踪程序运行状态、定位错误、排查问题以及进行性能分析。Log4j,作为Java领域中最流行的日志框架之一,因...

    AndroidStudio 使用log4j记录日志,按照大小定期滚动日志Demo

    本文将详细介绍如何在Android Studio中使用log4j库来记录日志,并实现按照日志文件大小自动滚动的功能,以及如何进行日志内容的格式化输出。 首先,log4j是一款广泛使用的日志记录框架,它提供了灵活的日志配置和...

    log4j 日志配置

    这篇博客文章“log4j日志配置”很可能是关于如何配置Log4j以满足特定的日志需求,特别是涉及到`DailyRollingFileAppender`,这是一个将日志输出到按日期滚动的文件中的类。 `DailyRollingFileAppender`是Log4j的一...

    log4j记录Debug日志

    10. **日志切割与归档**:Log4j可以配置自动滚动日志文件,比如按日期或大小切割,防止单个日志文件过大,同时支持归档旧的日志文件。 在使用Log4j记录Debug日志时,确保项目中引入了相应的Log4j库,并正确配置了`...

    log4j日志详细讲解

    首先,要在项目中启用Log4j,需要创建一个名为`log4j.properties`的配置文件,将其放在`classes`目录下。这个文件用于定义Log4j的行为,包括日志的级别、输出目的地、格式等。 1. **配置根Logger** 根Logger是Log4...

    Log4j的相关jar包和配置文件

    本资料主要包含了Log4j的相关jar包和配置文件,下面我们将详细讨论Log4j的关键概念、配置以及其在实际项目中的应用。 1. **Log4j组件** - **Logger**: 日志的核心组件,负责生成日志事件。开发人员通过创建Logger...

    Log4j生成日志保存

    2. **日志文件管理**: 可以配置Log4j定期滚动日志文件,避免单个文件过大。同时,也可以设定日志文件的最大数量,以防止磁盘空间耗尽。 3. **性能考虑**: 在Android设备上,频繁的日志记录会影响性能。因此,需要...

    log4j中的dtd文件

    在Log4j的上下文中,`log4j.dtd`是Log4j配置文件(通常命名为`log4j.properties`或`log4j.xml`)的DTD,它定义了配置文件中可以使用的元素、属性及其结构,确保配置文件的合法性。 在Log4j的配置文件中,我们可以...

    Log4j配置文件详细说明

    - `File`:将日志写入文件,如`log4j.appender.File=org.apache.log4j.DailyRollingFileAppender`,`log4j.appender.File.File=logs/app.log`定义了文件名和路径。 - `RollingFileAppender`:按日期或大小滚动日志...

    深入学习log4j

    log4j提供日志文件滚动和归档功能,比如`DailyRollingFileAppender`可以按照日期切割日志,避免单个日志文件过大。 8. **与其他框架集成** log4j与其他许多Java框架如Spring、Struts等具有良好集成,可以在这些...

    日志记录Log4j配置介绍

    Log4j是Apache组织推出的一个开源的日志框架,用于简化Java应用中的日志记录工作。Log4j提供了灵活的日志记录机制,允许开发者根据需求调整日志信息的级别、格式以及输出方式等。 ##### 1.1 日志级别 在Log4j中,...

    WAS上log4j日志不能输出(ibatis)sql语句解决办法[借鉴].pdf

    WAS 上 log4j 日志不能...解决 WAS 上 log4j 日志不能输出(ibatis)sql 语句的问题需要改变 WAS 的默认 LogFactory 实现类,使其使用 log4j 框架下的 LogFactory 实现类,并且需要正确配置 log4j.properties 文件。

    log4j 工具类 多个日志文件

    **日志工具在IT开发中的重要性** 在IT行业中,日志记录是系统维护和问题排查的关键工具。它能够帮助开发者追踪...通过理解和熟练使用Log4j,开发者可以更有效地管理和利用日志,为系统的稳定性和可靠性提供有力支持。

    log4j日志包

    **Log4j日志包**是Java开发中广泛使用的日志记录工具,它为应用程序提供了灵活的日志记录功能。在Java编程中,日志是非常重要的一部分,它可以帮助开发者追踪程序运行状态,定位错误,以及进行性能分析。Log4j是由...

Global site tag (gtag.js) - Google Analytics