log4j

一.log4j简介:

log4j官方下载地址:jakarta.apache.org/log4j 

log4j是Apache的一个开源日志组件,可以为我们提供非常强大又便捷的日志记录。

log4j日志有七个等级:all<debug<info<warn<error<fatal<off

二.log4j配置:

不同类型的项目引入log4j的方式是不同的。

但是需要配置的内容是大致一样的(日志级别、日志格式和记录显示/保存位置等)。

1.在Maven项目中

1.1.在maven中引入log4j的依赖

1.2.在src/main/java中创建log4j.properties配置文件

1.3.在java文件中使用log4j进行日志记录

//在Maven项目中的依赖

<dependency>

        <groupId>log4j</groupId>

        <artifactId>log4j</artifactId>

        <version>1.2.17</version>

</dependency>


//log4j.properties配置文件

log4j.rootLogger = INFO,console    //定义输出器等级和名字

log4j.additivity.org.apache = true    //表示不会在父logger中的appender输出,默认true

#console

log4j.appender.console = org.apache.log4j.ConsoleAppender //指定logger的输出位置

log4j.appender.console.Threshold = INFO    //指定日志的最低级别,默认DEBUG

log4j.appender.console.ImmediateFlush = true    //表示所有信息都会被立即输出

log4j.appender.console.Target=System.out     //默认值为System.out

log4j.appender.console.layout=org.apache.log4j.PatternLayout     //指定输出内容及格式 

//输出日志时间点的时间或日期,默认格式为ISO8601

log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%p] %m%n


#在JAVA文件中使用log4j记录日志

public class MainTest(){

    public static void main(String[] args){

        new Test.test();

    }

}

public class Test(){

    final Logger logger = Logger.getLogger(MainTest.class);

    public void test(){

        logger.info("hello world");   

    }

}

2.在普通java/spring项目中

2.1.将log4j的jar包通过build path引入项目

2.2.在src/main/java下创建log4j.properties配置文件

2.3.在JAVA文件中使用log4j进行日志记录

3.在SpringMVC项目中

3.1.在src/main/resources的conf目录下创建log4j.properties文件

3.2.编辑项目的web.xml文件

//编辑项目的web.xml文件 添加以下内容

<context-parm>

        <parm-name>log4jConfigLocation</parm-name>

        <parm-value>classpath:/conf/log4j.properties</parm-value>

</context-parm>

<listener>

        <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>

</listener>

4.在普通的Web项目中

因为普通的项目中没有了Spring提供的listener来加载log4j了,所以需要使用servlet来加载

4.1.在src/main/resources/conf下创建log4j.properties文件

4.2.编辑项目的web.xml文件

//使用servlet来加载log4j

public class Log4jServlet extends HttpServlet {

        private static final long serialVersionUID = 1L;

        public void init(ServletConfig config) throws ServletException{ 

                String perfix = this.getClass().getClassLoader().getResources("/").getPath();

                String path = config.getInitParameter("log4j-path");

                PopertyConfigurator.configure(prefix+path);

        }

        public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException {}

        public void doPost(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException {}

        public void destroy() {}

}


//编辑web.xml文件 添加如下内容

<servlet>

        <servlet-name>log4j</servlet-name>

        <servlet-class>com.xmyself.log4j.Log4jServlet</servlet-class>

        <init-param>

                <param-name>log4j-path</param-name>

                <param-value>conf/log4j.properties</param-value>

        </init-param>

        <load-on-startup>1</load-on-startup>

</servlet>

三.log4j的配置说明

1.logger:日志实例,指的是代码里实例化的log4j(Logger)对象  

log4j.rootLogger = LEVEL,appenderName1,appenderName2...    //定义Logger实例化对象

log4j.additivity.org.apache = false;    //表示不会在父logger的appender里输出,默认true


例:  log4j.logger.com.demo.test = BEBUG,test

        log4j.additivity.com.demo.test = false

2.appender:日志输出器,指定logger的输出位置

log4j.appender.appenderName = className


//className有五种值可以选择,每个都有不同的配置

1.org.apache.log4j.ConsoleAppender    //控制台 

        Threshold=WARN:指定日志信息的最低输出级别,默认DEBUG 

        ImmediateFlush=true:所有消息都会被立即输出,false则不输出,默认值是true

        Target=System.err:默认值是System.out

2.org.apache.log4j.FileAppender   //文件

        Threshold=WARN:指定日志信息的最低输出级别,默认DEBUG

        ImmediateFlush=true:所有消息都会被立即输出,false则不输出,默认true

        Append=false:true消息增加到指定文件中,false将消息覆盖指定文件,默认true

        File=D:/logs/logging.log4j:指定消息输出到logging.log4j文件

3.org.apache.log4j.DailyRollingFileAppender //每天产生一个日志文件    

        Threshold=WARN:指定日志信息的最低输出级别,默认DEBUG

        ImmediateFlush=true:所有消息都会被立即输出,false则不输出,默认true

          Append=false:true消息增加到指定文件中,false将消息覆盖指定文件,默认true

         File=D:/logs/logging.log4j:指定消息输出到logging.log4j文件 

          DatePattern='.'yyyy-MM:每月滚动一次日志文件,即每月产生一个新的日志文件。当前月的日志文件名为logging.log4j,前一个月的日志文件名 ('.'yyyy-MM:每月 / '.'yyyy-ww:每周  /  '.'yyyy-MM-dd:每天  /  '.'yyyy-MM-dd-a:每天两次  / '.'yyyy-MM-dd-HH:每小时 / '.'yyyy-MM-dd-HH-mm:每分钟    )

4.org.apache.log4j.RollingFileAppender    //文件大小到达指定尺寸的时候产生一个新的文件

           Threshold=WARN:指定日志信息的最低输出级别,默认DEBUG                                          ImmediateFlush=true:所有消息都会被立即输出,false则不输出,默认true                            Append=false:true消息增加到指定文件中,false将消息覆盖指定文件,默认true                  File=D:/logs/logging.log4j:指定消息输出到logging.log4j文件 

            MaxFileSize=100KB:后缀可以是KB,MB或者GB。在日志文件到达该大小时,将会自动滚动,即将原来的内容移到logging.log4j.1文件

            MaxBackupIndex=2:指定可以产生的滚动文件的最大数,例如,设为2则可以产生logging.log4j.1,logging.log4j.2两个滚动文件和一个logging.log4j文件

5.org.apache.log4j.WriterAppender    //将日志信息以流格式发送到任意指定的地方

3.layout:指定logger输出内容及格式

log4j.appender.appenderName.layout = calssName     


//layout的className有四种选择

1.org.apache.log4j.HTMLLayout     //以HTML表格形式布局 

        LocationInfo=true:输出java文件名称和行号,默认false

         Title=My Logging: 默认值是Log4J Log Messages

2.org.apache.log4j.PatternLayout     //可以灵活地指定布局模式 

        ConversionPattern=%m%n:设定以怎样的格式显示消息

3.org.apache.log4j.SimpleLayout     //包含日志信息的级别和信息字符串 

4.org.apache.log4j.TTCCLayout     //包含日志产生的时间、线程、类别等信息 

PatternLayout的值

四.log4j全局配置

在配置了全局的log4j之后,整个项目都使用了同一套配置,也就是说所有的日志都在同一个地方,所有的信息都混在一起。

log4j.rootLogger=DEBUG,console,dailyFile,rollingFile,logFile

log4j.additivity.org.apache=true  

#控制台日志输出器

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

log4j.appender.console.Threshold=DEBUG

log4j.appender.console.ImmediateFlush=true   

log4j.appender.console.Target=System.err

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

log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%p] %m%n 

#文件日志输出器

log4j.appender.logFile=org.apache.log4j.FileAppender

log4j.appender.logFile.Threshold=DEBUG

log4j.appender.logFile.ImmediateFlush=true

log4j.appender.logFile.Append=true

log4j.appender.logFile.File=D:/logs/log.log4j

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

log4j.appender.logFile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%p] %m%n   

#滚动文件日志输出器

log4j.appender.rollingFile=org.apache.log4j.RollingFileAppender

log4j.appender.rollingFile.Threshold=DEBUG

log4j.appender.rollingFile.ImmediateFlush=true

log4j.appender.rollingFile.Append=true

log4j.appender.rollingFile.File=D:/logs/log.log4j    

log4j.appender.rollingFile.MaxFileSize=200KB     

log4j.appender.rollingFile.MaxBackupIndex=50

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

log4j.appender.rollingFile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%p] %m%n  

#定期滚动文件日志输出器

log4j.appender.rollingFile=org.apache.log4j.RollingFileAppender

log4j.appender.rollingFile.Threshold=DEBUG   

log4j.appender.rollingFile.ImmediateFlush=true

log4j.appender.rollingFile.Append=true   

log4j.appender.rollingFile.File=D:/logs/log.log4j

log4j.appender.rollingFile.MaxFileSize=200KB

log4j.appender.rollingFile.MaxBackupIndex=50

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

log4j.appender.rollingFile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%p] %m%n  

五.log4j局部配置

如果想要为不同的包或者类单独的输出日志,那么就需要定义多个局部配置

#定义局部的log4j文件输出器

log4j.logger.com.demo.test=DEBUG,test

log4j.appender.test=org.apache.log4j.FileAppender

log4j.appender.test.File=/log/test.log

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

log4j.appender.test.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%p] %m%n   

//可以让同一个类输出不同类型的日志文件

//可以初始化两个日志对象

private static Log logger1 = LogFactory.getLog("myTest1");

private static Log logger2 = LogFactory.getLog("myTest2"); 


#分别配置量两个log4j实例

log4j.logger.myTest1= DEBUG,test1

log4j.additivity.myTest1=false

log4j.appender.test1=org.apache.log4j.FileAppender    

log4j.appender.test1.File=/log/test1.log

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

log4j.appender.test1.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%p] %m%n  

.

log4j.logger.myTest2=DEBUG,test2

log4j.appender.test2=org.apache.log4j.FileAppender

log4j.appender.test2.File=/log/test2.log

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

log4j.appender.test2.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%p] %m%n    

六.slf4j搭配log4j

1.slf4j简介:

slf4j运用了典型的门面模式思想,和JVM的思想是一样的,即当一个项目中依赖了多个日志框架的时候,slf4j就负责帮我们处理这些日志实现框架的差异。

2.slf4j使用:

2.1.在项目中添加slf4j的依赖

2.2.在项目中添加slf4j和不同日志实现框架的转换(关联)依赖

//slf4j的依赖

<dependency>

        <groupId>org.slf4j</groupId>

        <artifactId>slf4j-api</artifactId>

        <version>1.7.21</version>

</dependency>


//slf4j和log4j的关联jar包

//通过这个jar包,把对slf4j接口的调用转为对log4j的调用

//不同的日志实现框架,这个转换工具不同

//slf4j-log4j12依赖了slf4j和log4j,所以只使用这个依赖就可以满足需求     

<dependency>

        <groupId>org.slf4j</groupId>

        <artifactId>slf4j-log4j12</artifactId>

        <version>1.7.21</version>

</dependency>

//在JAVA类中使用slf4j和log4j的方式

class Test{

        Logger log = LoggerFactory.getLogger(Test.calss);

        public void test(){

                log.info("hello {}",world);    //slf4j中可以使用占位符

        }

}

原文:https://blog.csdn.net/qq_42072311/article/details/80923512

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,658评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,482评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,213评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,395评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,487评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,523评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,525评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,300评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,753评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,048评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,223评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,905评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,541评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,168评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,417评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,094评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,088评论 2 352