一:测试环境与log4j(一)——为什么要使用log4j?一样,这里不再重述

二:老规矩,先来个栗子,然后再聊聊感受

(1)使用配文件的方式,是不是感觉非常的清爽,如果不在程序中读取配置文件就更加的清爽啦!这里为了简便,就是单单使用一个Java类来做实验了。

import org.apache.log4j.*;
/*** Created by godtrue*/
public class UseLog4j {//日志记录器private static Logger LOGGER = LogManager.getLogger(UseLog4j.class);//程序入口——主函数public static void main(String[]args) {//读取使用Java的特性文件编写的配置文件PropertyConfigurator.configure( "D:\\workspace_test\\hello-log4j\\log4j.properties" );//输出日志信息,测试日志级别的作用(配置在配置文件中),仅仅输出大于等于目前有效级别的日志信息LOGGER.debug("[1]-my level is DEBUG Godtrue 说:今天天气很好呀!");LOGGER.info("[2]-my level is INFO");LOGGER.warn("[3]-my level is WARN");LOGGER.error("[4]-my level is ERROR");}
}

(2)下面的配置文件也仅是列举了几个常见的输出目的地的配置方式,如有更多需求可以参看官网文档,其中输出到控制台和达到一定的阈值自动回滚的文件的方式是最长用,要重点了解

###
# 在代码中配置log4j环境的方式,我们已经见识过了,是不是感觉比较麻烦,我们试试使用配置文件的方式是否使您的应用程序更加的灵活。
# Log4j支持两种配置文件格式,一种是XML格式的文件,一种是Java特性的文件(键=值)。
# 下面我们先试试使用Java特性文件做为配置文件的方式
#
# 以下的设置参数,前文已经讲过是怎么回事的,这里就不再重复了
#
######
# 设置根记录器的配置,其语法为:log4j.rootLogger = [ level ] , appenderName1, appenderName2, …appenderNameN
# level用于设置日志记录的优先级,有系统自定义的8中类型,也可以自定义,官方建议只是用这四种 ERROR>WARN>INFO>DEBUG
# appenderNameN用于设置日志的输出地,可以设置多个,可以自定义名称
###
log4j.rootLogger = debug,stdout,D,E,F###
# 设置日志记录的输出地,其语法为:
#     log4j.appender.appenderName = fully.qualified.name.of.appender.class
#   log4j.appender.appenderName.option1 = value1
#   …
#  log4j.appender.appenderName.optionN = valueN
# fully.qualified.name.of.appender.class:指日志输出目的类的全路径类名,有好许多预定义,下面介绍四个常用的
# optionN/valueN :分别是指对应的输出目的地属性和设置的属性值
#
# 如果对应的属性,仍然是对象级别的话,可以通过继续 . 的形式来设置对应的属性
#
######
# 输出信息到控制台,其可选的配置有如下几个:
# 1)Threshold:设置日志信息输出的级别
# 2)ImmediateFlush:设置日志信息是否被立即输出,默认为TRUE,立即输出
# 3)Target:设置日志信息输出的目标流,有两种值System.out和System.err ,默认值System.out(err为红色,out为黑色)
# 4)layout:设置日志信息输出的样式
# 5)Encoding:设置文件的编码格式,默认和系统平台的编码格式保持一致
###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.Encoding = Utf-8
log4j.appender.stdout.Threshold = INFO
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%d{yyyy-MM-dd HH:mm:ss:SSS}] [%-5p] [method:%l]%n%m%n%n###
# 输出信息到文件,其常用的可选的配置有如下几个:
# 1)Threshold:设置日志信息输出的级别
# 2)ImmediateFlush:设置日志信息是否被立即输出,默认为TRUE,立即输出
# 3)File:设置日志信息输出全路径,比如:E://logs/FileAppender.log
# 4)layout:设置日志信息输出的样式
# 5)Encoding:设置文件的编码格式,默认和系统平台的编码格式保持一致
# 6)Append:设置是否将日志消息追加到指定的文件中,默认值true,将消息追加到指定文件中,false指将消息覆盖指定的文件内容
###
log4j.appender.D = org.apache.log4j.FileAppender
log4j.appender.D.File = E://logs/FileAppender.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:SSS}] [%-5p] [method:%l]%n%m%n%n###
# 输出信息到文件,但是这个文件是可控的,可以配置多久产生一个新的日志信息文件,其常用的可选的配置有如下几个:
# 1)Threshold:设置日志信息输出的级别
# 2)ImmediateFlush:设置日志信息是否被立即输出,默认为TRUE,立即输出
# 3)File:设置日志信息输出全路径,比如:E://logs/DailyRollingFileAppender.log
# 4)layout:设置日志信息输出的样式
# 5)Encoding:设置文件的编码格式,默认和系统平台的编码格式保持一致
# 6)Append:设置是否将日志消息追加到指定的文件中,默认值true,将消息追加到指定文件中,false指将消息覆盖指定的文件内容
# 7)DatePattern:设置文件回滚的时间样式
#              '.'yyyy-MM 每月
#              '.'yyyy-ww 每周
#              '.'yyyy-MM-dd 每天
#              '.'yyyy-MM-dd-a 每天两次
#              '.'yyyy-MM-dd-HH 每小时
#              '.'yyyy-MM-dd-HH-mm 每分钟
###
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File =E://logs/DailyRollingFileAppender.log
log4j.appender.E.Append = true
log4j.appender.E.Threshold = WARN
log4j.appender.E.DatePattern = '.'yyyy-MM-dd-HH-mm
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = [%d{yyyy-MM-dd HH:mm:ss:SSS}] [%-5p] [method:%l]%n%m%n%n###
# 输出信息到文件,但是这个文件是可控的,当文件的大小达到某个阈值的时候,日志文件会自动回滚,其常用的可选的配置有如下几个:
# 1)Threshold:设置日志信息输出的级别
# 2)ImmediateFlush:设置日志信息是否被立即输出,默认为TRUE,立即输出
# 3)File:设置日志信息输出全路径,比如:E://logs/RollingFileAppender.log
# 4)layout:设置日志信息输出的样式
# 5)Encoding:设置文件的编码格式,默认和系统平台的编码格式保持一致
# 6)Append:设置是否将日志消息追加到指定的文件中,默认值true,将消息追加到指定文件中,false指将消息覆盖指定的文件内容
# 7)MaxFileSize:设置当文件达到此阈值的时候自动回滚,单位可以是KB,MB,GB,默认单位是KB
# 8)MaxBackupIndex:设置保存备份回滚日志的最大个数
###
log4j.appender.F = org.apache.log4j.RollingFileAppender
log4j.appender.F.File =E://logs/RollingFileAppender.log
log4j.appender.F.Append = true
log4j.appender.F.Threshold = INFO
log4j.appender.F.MaxFileSize = 1
log4j.appender.F.MaxBackupIndex = 5
log4j.appender.F.layout = org.apache.log4j.PatternLayout
log4j.appender.F.layout.ConversionPattern = [%d{yyyy-MM-dd HH:mm:ss:SSS}] [%-5p] [method:%l]%n%m%n%n

三:感受

1)使用配置文件来控制日志的输出,相当的灵活方便,对于业务程序本身的耦合性也变得最低了,这也是在实际的工作中常常使用的一种方式

2)我这里为了方便演示和研究配置文件怎么配置的,就没有加入其它框架了,也没有采用建一个JavaWeb项目通过配置文件的方式来控制了,实际工作中应该如此的

3)这里的关注点是配置文件怎么配置,我在注释中做了足够多的说明,如果看过前面的博文,对于这些东西相对一定很容易理解,毕竟日志框架就是干这些事情的

4)这里列举的配置方式并不完整,毕竟还有许多的日志输出目的地不在其内,不过他们是常用的

5)每一个还是要好好的试验一下,理解起来才更深刻的,否则下次项目出问题了,项目负责人让你解决,你都不知道到哪里找日志文件来分析的

log4j(六)——log4j.properties简单配置样例说明相关推荐

  1. log4j(七)——log4j.xml简单配置样例说明

    一:测试环境与log4j(一)--为什么要使用log4j?一样,这里不再重述 二:老规矩,先来个栗子,然后再聊聊感受 (1)这里栗子有一点特别呀!给出了包名唉!想必有用,是的,配置文件中要特别说明一下 ...

  2. 【Flask框架】一. Flask框架初体验(配置环境 + 简单demo样例)

    文章目录 一. Flask框架初体验(配置环境 + 简单demo样例) 虚拟环境 新建项目 将Pycharm改为FLASK_DEBUG模式 修改FLASK_DEBUG模式的步骤 配置文件 简单用法 U ...

  3. JBoss 系列九十六:JBoss MSC - 简介及一个简单演示样例

    什么是 JBoss MSC JBoss MSC 即 JBoss Modular Service Container,是第三代 JBoss 产品 JBoss 7和WildFfly的内核,JBoss MS ...

  4. HP C7000刀片服务器北电GbE2c刀片背板网络交换机配置样例

    HP C7000刀片服务器使用的GbE2c刀片背板网络交换机和传统的华为.思科等交换机配置方式很不一样,配置起来比较复杂,本文是作为虚拟化环境中的典型应用的一个配置样例 . 一.环境介绍 本例HP C ...

  5. leveldb简单使用样例

    个人随笔 (Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu) 下面附几个leveldb的简单使用样例,包含写数据.查数据.遍历数据,仅供参考. 写数据 #i ...

  6. Prism安装、MVVM基础概念及一个简单的样例

    一:Prism的下载和安装 1:在http://compositewpf.codeplex.com/上下载最新的包. 下载完毕后,运行之,选择解压目录解压之.解压完毕的根目录下有chm帮助文档. 2: ...

  7. 百度地图 Android SDK - 检索功能使用的简单演示样例

    百度地图 SDK 不仅为广大开发人员提供了炫酷的地图展示效果.丰富的覆盖物图层,更为广大开发人员提供了多种 LBS 检索的能力. 通过这些接口,开发人员能够轻松的訪问百度的 LBS 数据,丰富自己的移 ...

  8. Neo4j简单的样例

    系统环境: Ubuntu 04.10 x64 一:安装 下载最新版:neo4j-community-2.2.3-unix.tar.gz  解压 cd neo4j-community-2.2.3/bin ...

  9. Yii学习笔记之二(使用gii生成一个简单的样例)

    1. 数据库准备 (1) 首先我们建一数据库 yii2test 并建立一张表例如以下: DROP TABLE IF EXISTS `posts`; CREATE TABLE `posts` (`pos ...

最新文章

  1. 使用version遇到的那些坑
  2. Android ViewGroup等容器控件的使用
  3. 计算机组成原理考研重点
  4. 树莓派python编程自学-一些缩短树莓派学习曲线的书籍、课程和网站
  5. 学什么就业前景好的专业_新能源汽车专业学什么?其就业前景如何?
  6. jzoj6805-NOIP2020.9.26模拟speike【扫描线】
  7. Java描述设计模式(06):建造者模式
  8. jsonobject转map对象_解析JSON中JSONObject的高级使用
  9. php5.2 array,详解php 5.2.x 数组操作实例
  10. Flink Parallelism
  11. shrio 权限管理filterChainDefinitions过滤器配置(转)
  12. linux之我常用的20条命令(之一)
  13. 安装IIS服务 找不到staxmem.dll文件的解决方法
  14. 激光雷达(LiDAR)| 第一节:点云处理库与软件介绍
  15. 说出至少4种vue当中的指令和它的用法?
  16. 验证电话号码,支持手机座机可加国家代码和区号,座机支持分机
  17. C语言文件操作函数总结——超详细
  18. 2.2比特币(BTC)中的数据结构
  19. Lua(一)——Lua介绍
  20. 建立空间计量模型时对数据进行LM检验的Stata代码

热门文章

  1. 迷你图标集大集合:5000+ 30套免费的图标
  2. 当执行打印预览window.close无效
  3. 轻量又高效,Apache Shiro 你值得拥有!
  4. Redis的session管理和Memcached的session管理不同
  5. Callable接口
  6. 序列化的高阶认识-serialVersionUID的作用
  7. 初步认识Volatile-什么叫缓存一致性呢?
  8. 使用RSA算法生成令牌
  9. Hive的安装-Hive的交互方式
  10. ReactJS入门之JSX语法