0

0

Java中的Logger怎么配置输出到文件_java.util.logging基础用法

P粉602998670

P粉602998670

发布时间:2026-03-17 10:09:28

|

360人浏览过

|

来源于php中文网

原创

JUL默认只输出到控制台,需显式添加FileHandler并确保路径权限、层级继承、Level匹配及Formatter配置正确,否则日志静默丢失。

java中的logger怎么配置输出到文件_java.util.logging基础用法

Logger输出不到文件?默认只打到控制台

Java自带的java.util.logging(JUL)默认只用ConsoleHandler,不写文件——这是最常被忽略的前提。你调了logger.info()却找不到日志文件,不是代码写错了,是根本没配Handler。

实操建议:

立即学习Java免费学习笔记(深入)”;

  • 必须显式创建FileHandleraddHandler()到Logger,JUL不会自动帮你做
  • Logger层级继承:如果给Logger.getLogger("com.example")加了FileHandler,它的子Logger(如"com.example.service")会自动继承,但根Logger("")的Handler不影响自定义Logger,除非你调用setUseParentHandlers(true)
  • 注意权限:Windows下路径含中文或空格、Linux下目录无写权限,会导致java.io.IOException: Permission denied,建议先确保new File("logs/app.log").getParentFile().mkdirs()

FileHandler构造参数怎么选?路径和模式最关键

FileHandler构造函数有多个重载,最容易踩坑的是FileHandler(String pattern, boolean append)这个两参数版本——它不支持自动轮转,且pattern里不能带%u%g占位符(那些只在四参数版本生效)。

实操建议:

立即学习Java免费学习笔记(深入)”;

  • 要轮转日志(比如每天一个文件),必须用四参数构造:new FileHandler("logs/app.%g.log", 1024 * 1024, 5, true),其中%g是索引,5是最大文件数,true表示追加
  • 路径建议用绝对路径或基于System.getProperty("user.dir")拼接,避免相对路径在IDE/打包后失效
  • 如果只想要单文件且不轮转,用两参数版即可,但记得手动确保父目录存在,否则抛IOException

日志格式太简陋?Formatter决定内容可读性

JUL默认用java.util.logging.SimpleFormatter,输出只有时间、级别、类名和消息,没有线程名、方法名、毫秒级时间戳——排查并发问题时基本不够用。

AI改图神器
AI改图神器

AI万能图片编辑器,一键抠图,去水印,智能图片美化,照片转漫画,照片变活转视频,图片无损放大,一键背景虚化,位图智能转矢量图

下载

实操建议:

立即学习Java免费学习笔记(深入)”;

  • 换用java.util.logging.XMLFormatter可得结构化输出,但人类阅读不友好;更常用的是自定义Formatter,继承Formatter重写format(),重点处理record.getMillis()record.getSourceMethodName()等字段
  • 别直接改根Logger的Formatter:Logger.getLogger("").getHandlers()[0].setFormatter(...)会影响所有未单独设置Formatter的Logger,容易误伤
  • 如果用了Log4j或SLF4J桥接,JUL的Formatter配置可能被覆盖,此时应优先查桥接层配置

为什么设置了FileHandler还是没日志?检查Level和Filter

即使Handler加对了、路径也合法,日志仍可能“消失”——大概率是Logger或Handler自身的Level设得太高,或者被Filter拦截了。

实操建议:

立即学习Java免费学习笔记(深入)”;

  • Logger默认Level是INFO,Handler默认Level也是INFO,但如果你调过logger.setLevel(Level.WARNING),那INFO消息就进不了Handler,哪怕Handler Level是ALL
  • Handler的Level独立于Logger:可以设Logger为INFO,只让某个FileHandler响应WARNING以上,用于分离错误日志
  • 检查是否无意中加了handler.setFilter(...),尤其是第三方库(如某些监控SDK)可能偷偷注册Filter

真正麻烦的不是写几行配置,而是JUL的层级继承、Level双控、Handler生命周期这些隐式规则——它们不会报错,只会静默丢日志。动手前先用logger.getHandlers()logger.getLevel()打个断点,比反复猜路径更省时间。

相关文章

java速学教程(入门到精通)
java速学教程(入门到精通)

java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

1071

2023.08.02

java中boolean的用法
java中boolean的用法

在Java中,boolean是一种基本数据类型,它只有两个可能的值:true和false。boolean类型经常用于条件测试,比如进行比较或者检查某个条件是否满足。想了解更多java中boolean的相关内容,可以阅读本专题下面的文章。

367

2023.11.13

java boolean类型
java boolean类型

本专题整合了java中boolean类型相关教程,阅读专题下面的文章了解更多详细内容。

42

2025.11.30

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

889

2023.07.31

python中的format是什么意思
python中的format是什么意思

python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

466

2024.06.27

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

786

2023.08.10

append用法
append用法

append是一个常用的命令行工具,用于将一个文件的内容追加到另一个文件的末尾。想了解更多append用法相关内容,可以阅读本专题下面的文章。

349

2023.10.25

python中append的用法
python中append的用法

在Python中,append()是列表对象的一个方法,用于向列表末尾添加一个元素。想了解更多append的更多内容,可以阅读本专题下面的文章。

1080

2023.11.14

Nginx跨平台安装实操指南:Windows、macOS与Linux环境快速搭建
Nginx跨平台安装实操指南:Windows、macOS与Linux环境快速搭建

本指南详解Nginx在Windows、macOS及Linux系统的安装全流程。涵盖官方包解压、Homebrew一键部署、APT/YUM源配置及Docker容器化方案。无论新手或开发者,均可快速搭建运行环境,掌握跨平台核心指令,为后续配置与调优奠定坚实基础。

10

2026.03.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 4.5万人学习

C# 教程
C# 教程

共94课时 | 11.5万人学习

Java 教程
Java 教程

共578课时 | 83.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号