JAVA日志--JUL

日志级别OFF(关闭)-->SEVERE(严重)-->WARNING(警告)-->INFO(信息)-->CONFIG(配置)-->FINE(详细)-->FINER(较详细)-->FINEST(非常详细)-->ALL(打开)

日志级别从左到右一次递减,系统默认配置是INFO级别,表示INFO级别以上的才可以输出。OFF和ALL代表日志的开关,仅作为关闭和打开的作用存在,不是真正的日志级别。即设置为OFF的话,则不输出,设置为ALL的话则输出SEVERE到FINEST的所有级别日志。

日志创建过程:

使用Logger类创建日志对象,LoggerManager通过加载配置文件,最后通过Logger输出

一、不通过配置文件配置(默认JUL配置文件)

首先通过Logger.getLogger(name)创建日志记录器,使用默认的JUL配置信息(不使用自定义配置文件)即使用顶级父元素RootLogger的相关配置

ConsoleHandler和FileHandler分别为控制台输出和文件输出控制器

public void testLog() throws Exception{
		//创建日志记录器
		Logger logger = Logger.getLogger("forTest.JULTest");
		
		//关闭系统默认配置
		logger.setUseParentHandlers(false);
		
		
		//自定义日志配置级别
		//创建consoleHandler:控制台输出
		ConsoleHandler consoleHandler = new ConsoleHandler();
		
		//创建简单格式转换对象
		SimpleFormatter simpleFormatter = new SimpleFormatter();
		
		//进行关联
		consoleHandler.setFormatter(simpleFormatter);
		logger.addHandler(consoleHandler);
		
		//配置日志级别
		logger.setLevel(Level.ALL);
		consoleHandler.setLevel(Level.ALL);
		
		//创建fileHandler:log文件输出
		FileHandler fileHandler = new FileHandler("jul.log");
		
		fileHandler.setFormatter(simpleFormatter);
		logger.addHandler(fileHandler);
		
		//日志输出
		logger.severe("severe");
		logger.warning("warning");
		logger.info("info");
		logger.config("config");
		logger.fine("fine");
		logger.finer("finer");
		logger.finest("finest");
		
	}

输出结果:

四月 14, 2020 1:04:02 下午 forTest.JULTest testLog
严重: severe
四月 14, 2020 1:04:02 下午 forTest.JULTest testLog
警告: warning
四月 14, 2020 1:04:02 下午 forTest.JULTest testLog
信息: info
四月 14, 2020 1:04:02 下午 forTest.JULTest testLog
配置: config
四月 14, 2020 1:04:02 下午 forTest.JULTest testLog
详细: fine
四月 14, 2020 1:04:02 下午 forTest.JULTest testLog
较详细: finer
四月 14, 2020 1:04:02 下午 forTest.JULTest testLog
非常详细: finest

二、通过配置文件配置

步骤:创建配置文件-->读取配置文件(流)-->LogManager加载配置文件-->创建日志记录器对象logger-->logger输出日志

在项目中创建配置文件:logging.properties

配置如下:

# RootLogger 顶级父元素指定的默认处理器为:ConsoleHandler和FileHandler
handlers = java.util.logging.ConsoleHandler,java.util.logging.FileHandler

# RootLogger 顶级父元素默认的日志级别
.level = CONFIG

# 自定义Logger,可以指定到某个方法
forTest.testLog.Handlers = java.util.logging.ConsoleHandler
forTest.testLog.level = INFO
#关闭默认配置
#forTest.testLog.useParentHandlers = false




# 向日志文件输出 handler对象
# 指定文件路径 H://test/forTest/\%u.log
java.util.logging.FileHandler.pattern = H://test/forTest/\%u.log
# 指定日志文件内容大小
java.util.logging.FileHandler.limit = 50000
# 指定日志文件数量
java.util.logging.FileHandler.count = 1
# 指定 handler 对象日志消息格式对象 SimpleFormatter 或者 XMLFormatter
java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter
# 指定以追加的方式添加日志内容
java.util.logging.FileHandler.append = true

# 向控制台输出 handler 对象
# 指定 handler 对象的日志级别
java.util.logging.ConsoleHandler.level = ALL
# 指定 handler 对象的日志消息格式对象
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
# 指定 handler 对象的字符集
#java.util.logging.ConsoleHandler.encoding = UTF-8

# 指定日志消息格式
java.util.logging.SimpleFormatter.format = %4$s: %5$s [%1$tc]%n

通过查看format源码可以看到相应的格式示例:

其中这里使用的就是第一个示例%4$s: %5$s [%1$tc]%n,有兴趣的可以自己去了解下

* <p>Some example formats:<br>
     * <ul>
     * <li> {@code java.util.logging.SimpleFormatter.format="%4$s: %5$s [%1$tc]%n"}
     *     <p>This prints 1 line with the log level ({@code 4$}),
     *     the log message ({@code 5$}) and the timestamp ({@code 1$}) in
     *     a square bracket.
     *     <pre>
     *     WARNING: warning message [Tue Mar 22 13:11:31 PDT 2011]
     *     </pre></li>
     * <li> {@code java.util.logging.SimpleFormatter.format="%1$tc %2$s%n%4$s: %5$s%6$s%n"}
     *     <p>This prints 2 lines where the first line includes
     *     the timestamp ({@code 1$}) and the source ({@code 2$});
     *     the second line includes the log level ({@code 4$}) and
     *     the log message ({@code 5$}) followed with the throwable
     *     and its backtrace ({@code 6$}), if any:
     *     <pre>
     *     Tue Mar 22 13:11:31 PDT 2011 MyClass fatal
     *     SEVERE: several message with an exception
     *     java.lang.IllegalArgumentException: invalid argument
     *             at MyClass.mash(MyClass.java:9)
     *             at MyClass.crunch(MyClass.java:6)
     *             at MyClass.main(MyClass.java:3)
     *     </pre></li>
     * <li> {@code java.util.logging.SimpleFormatter.format="%1$tb %1$td, %1$tY %1$tl:%1$tM:%1$tS %1$Tp %2$s%n%4$s: %5$s%n"}
     *      <p>This prints 2 lines similar to the example above
     *         with a different date/time formatting and does not print
     *         the throwable and its backtrace:
     *     <pre>
     *     Mar 22, 2011 1:11:31 PM MyClass fatal
     *     SEVERE: several message with an exception
     *     </pre></li>
     * </ul>

 

程序代码:

首先通过类加载器获取配置文件流,然后创建logManager对象,通过logManager加载,接着创建日志记录器。详细的配置信息都会通过logManager加载到。

public void testLogProperties() throws Exception{
		
		//读取配置文件,通过类加载器
		InputStream ins = JULTest.class.getClassLoader().getResourceAsStream("logging.properties");
		
		//创建logManager
		LogManager logManager = LogManager.getLogManager();
		
		//通过LogManager加载配置文件
		logManager.readConfiguration(ins);
		
		//创建日志记录器
		Logger logger = Logger.getLogger("forTest");
		
		//日志输出
		logger.severe("severe 严重");
		logger.warning("warning 警告");
		logger.info("info 信息");
		logger.config("config 配置");
		logger.fine("fine");
		logger.finer("finer");
		logger.finest("finest");	
		
	}

输出结果:

严重: severe 严重 [星期二 四月 14 13:23:42 CST 2020]
警告: warning 警告 [星期二 四月 14 13:23:42 CST 2020]
信息: info 信息 [星期二 四月 14 13:23:42 CST 2020]
配置: config 配置 [星期二 四月 14 13:23:42 CST 2020]

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值