array(2) { ["docs"]=> array(10) { [0]=> array(10) { ["id"]=> string(3) "428" ["text"]=> string(77) "Visual Studio 2017 单独启动MSDN帮助(Microsoft Help Viewer)的方法" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(8) "DonetRen" ["tagsname"]=> string(55) "Visual Studio 2017|MSDN帮助|C#程序|.NET|Help Viewer" ["tagsid"]=> string(23) "[401,402,403,"300",404]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400964" ["_id"]=> string(3) "428" } [1]=> array(10) { ["id"]=> string(3) "427" ["text"]=> string(42) "npm -v;报错 cannot find module "wrapp"" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "zzty" ["tagsname"]=> string(50) "node.js|npm|cannot find module "wrapp“|node" ["tagsid"]=> string(19) "[398,"239",399,400]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400760" ["_id"]=> string(3) "427" } [2]=> array(10) { ["id"]=> string(3) "426" ["text"]=> string(54) "说说css中pt、px、em、rem都扮演了什么角色" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(12) "zhengqiaoyin" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400640" ["_id"]=> string(3) "426" } [3]=> array(10) { ["id"]=> string(3) "425" ["text"]=> string(83) "深入学习JS执行--创建执行上下文(变量对象,作用域链,this)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "Ry-yuan" ["tagsname"]=> string(33) "Javascript|Javascript执行过程" ["tagsid"]=> string(13) "["169","191"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511399901" ["_id"]=> string(3) "425" } [4]=> array(10) { ["id"]=> string(3) "424" ["text"]=> string(30) "C# 排序技术研究与对比" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "vveiliang" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(8) ".Net Dev" ["catesid"]=> string(5) "[199]" ["createtime"]=> string(10) "1511399150" ["_id"]=> string(3) "424" } [5]=> array(10) { ["id"]=> string(3) "423" ["text"]=> string(72) "【算法】小白的算法笔记:快速排序算法的编码和优化" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "penghuwan" ["tagsname"]=> string(6) "算法" ["tagsid"]=> string(7) "["344"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511398109" ["_id"]=> string(3) "423" } [6]=> array(10) { ["id"]=> string(3) "422" ["text"]=> string(64) "JavaScript数据可视化编程学习(二)Flotr2,雷达图" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "chengxs" ["tagsname"]=> string(28) "数据可视化|前端学习" ["tagsid"]=> string(9) "[396,397]" ["catesname"]=> string(18) "前端基本知识" ["catesid"]=> string(5) "[198]" ["createtime"]=> string(10) "1511397800" ["_id"]=> string(3) "422" } [7]=> array(10) { ["id"]=> string(3) "421" ["text"]=> string(36) "C#表达式目录树(Expression)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "wwym" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(4) ".NET" ["catesid"]=> string(7) "["119"]" ["createtime"]=> string(10) "1511397474" ["_id"]=> string(3) "421" } [8]=> array(10) { ["id"]=> string(3) "420" ["text"]=> string(47) "数据结构 队列_队列实例:事件处理" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "idreamo" ["tagsname"]=> string(40) "C语言|数据结构|队列|事件处理" ["tagsid"]=> string(23) "["246","247","248",395]" ["catesname"]=> string(12) "数据结构" ["catesid"]=> string(7) "["133"]" ["createtime"]=> string(10) "1511397279" ["_id"]=> string(3) "420" } [9]=> array(10) { ["id"]=> string(3) "419" ["text"]=> string(47) "久等了,博客园官方Android客户端发布" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(3) "cmt" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511396549" ["_id"]=> string(3) "419" } } ["count"]=> int(200) } 222 log4j日志输出框架 - 爱码网

什么是log4j框架呢?

log4j是一个日志输出框架,用于输出日志的。比如MyBatis的日志就是通过log4j输出的,主流框架都是log4j输出的,Spring框架

也可以通过log4j输出日志!!

log4j的功能类似于System.out.println(),那为什么要用log4j呢?

因为它提供了强大的日志输出的自定义功能。

1.通过及级别输出日志(调试DEBUG、信息INFO、警告WRAN、错误ERROR、致命错误FATAL)

2.可以指定输入到控制台,输入到文件。

3.可以设置输出的日志格式

 

log4j框架的配置及测试代码

1.导入log4j的jar包

log4j日志输出框架

2.在src下创建一个log4j.propertis文件

注意:文件名必须为log4j.propertis

#log4j的声明,格式为:log4j.rootLogger=输出等级,输出策略名1,输出策略名2,输出策略名3....
##输出日志等级选项
##DEBUG 调试输出日志
##INFO  信息输出日志
##WARN  警告输出日志
##ERROR 错误输出日志
##FATAL 致命错误输出日志
log4j.rootLogger=DEBUG,A1,A2,A3

#A1策略的声明
##指定输出的类型(类全限制名),ConsoleAppender表示控制台输出
##ConsoleAppender 控制台输出
##FileAppender 通过文件输出
##DailyRollingFileAppender 以文件输出,每天产生一个日志文件
##RollingFileAppender 以指定的大小来产生一个日志文件
##WriterAppender 以流的方式输出文件到指定的设备

log4j.appender.A1=org.apache.log4j.ConsoleAppender
##指定该类型的一些属性,layout,值的是使用声明格式输出
##PatternLayout,自定义输出日志的格式
##HTMLLayout ,使用HTML文件输出
##SimpleLayout ,包含日志信息的级别和信息字符串
##TTCCLayout ,包含日志产生的时间、线程、类别等等信息
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
##设置自定义的输出格式规则
log4j.appender.A1.layout.ConversionPattern=%-4r %-5p [%t] %37c %3x - %m%n

#A2策略的声明
log4j.appender.A2=org.apache.log4j.FileAppender
##创建文件路径 log4j.appender.A2.file
=e:/log/lo4j.log log4j.appender.A2.layout=org.apache.log4j.PatternLayout log4j.appender.A2.layout.ConversionPattern=%-4r %-5p [%t] %37c %3x - %m%n #A3策略的声明 log4j.appender.A3=org.apache.log4j.FileAppender log4j.appender.A3.file=e:/log/lo4j.html log4j.appender.A3.layout=org.apache.log4j.HTMLLayout

测试代码:

package cn.sebb;

import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;

public class Log4jTest {
    
    public static void main(String[] args) {
        //获得Logger对象,输出日志,LogManager对象默认获得的配置文件是classpath根目录的log4j.properties文件
        //日志的级别:DEBUG < INFO < WARN < ERROR < FATAL
        //日志输出,根据配置的最低级别输出
        Logger logger=LogManager.getLogger(Log4jTest.class);
        //什么时候写debug,当我们需要通过调试信息分析逻辑时,将调试信息写在DEBUG级别里面
        logger.debug("调试日志");
        //什么时候写info,希望在试运行的时候,输出的调试信息
        logger.info("信息日志");
        //代码可以会出现问题的地方,设置警告日志
        logger.warn("警告日志");
        //报异常的时候,我们使用错误日志
        logger.error("错误日志");
        //特别重要的错误信息
        logger.fatal("致命错误日志");
    }

}

 

相关文章:

  • 2019-11-23
  • 2019-02-12
  • 2017-11-28
  • 2018-06-20
  • 2021-08-11
  • 2021-12-07
  • 2018-09-17
  • 2018-11-24
猜你喜欢
  • 2018-08-16
  • 2019-09-23
  • 2018-03-13
  • 2018-03-22
  • 2018-06-29
  • 2018-11-24
  • 2019-08-30
相关资源
相似解决方案