首页主机资讯Linux下Java日志如何配置

Linux下Java日志如何配置

时间2026-01-20 11:27:04发布访客分类主机资讯浏览835
导读:Linux下Java日志配置全流程 一 选择日志框架与放置配置 常见方案与适用场景 SLF4J + Logback:SLF4J为门面,Logback为默认高性能实现,配置简单、功能完备,适合大多数项目。 Log4j 2:性能与功能强,支...

Linux下Java日志配置全流程

一 选择日志框架与放置配置

  • 常见方案与适用场景
    • SLF4J + Logback:SLF4J为门面,Logback为默认高性能实现,配置简单、功能完备,适合大多数项目。
    • Log4j 2:性能与功能强,支持异步、过滤器等,适合复杂或高吞吐场景。
    • JUL(java.util.logging):JDK自带,轻量,适合对外部依赖敏感的环境。
  • 配置文件放置与加载
    • 将配置文件放在classpath 根目录(如 Maven/Gradle 工程的src/main/resources)。
    • 常见命名:logback.xmllog4j2.xmllogging.properties(JUL)。应用启动时会自动加载同名配置。

二 常用框架最小可用配置示例

  • SLF4J + Logback(推荐)
    • Maven依赖
      <
          dependency>
          
        <
          groupId>
          org.slf4j<
          /groupId>
          
        <
          artifactId>
          slf4j-api<
          /artifactId>
          
        <
          version>
          1.7.36<
          /version>
          
      <
          /dependency>
          
      <
          dependency>
          
        <
          groupId>
          ch.qos.logback<
          /groupId>
          
        <
          artifactId>
          logback-classic<
          /artifactId>
          
        <
          version>
          1.2.13<
          /version>
          
      <
          /dependency>
          
      
    • src/main/resources/logback.xml
      <
          configuration>
          
        <
          appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
          
          <
          encoder>
          
            <
          pattern>
      %d{
      yyyy-MM-dd HH:mm:ss}
       %-5level [%thread] %logger{
      36}
           - %msg%n<
          /pattern>
          
          <
          /encoder>
          
        <
          /appender>
          
      
        <
          appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
          
          <
          file>
          logs/app.log<
          /file>
          
          <
          rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
          
            <
          fileNamePattern>
      logs/app.%d{
      yyyy-MM-dd}
          .log<
          /fileNamePattern>
          
            <
          maxHistory>
          30<
          /maxHistory>
          
          <
          /rollingPolicy>
          
          <
          encoder>
          
            <
          pattern>
      %d{
      yyyy-MM-dd HH:mm:ss}
       %-5level [%thread] %logger{
      36}
           - %msg%n<
          /pattern>
          
          <
          /encoder>
          
        <
          /appender>
          
      
        <
          root level="INFO">
          
          <
          appender-ref ref="CONSOLE"/>
          
          <
          appender-ref ref="FILE"/>
          
        <
          /root>
          
      <
          /configuration>
          
      
  • Log4j 2
    • Maven依赖
      <
          dependency>
          
        <
          groupId>
          org.apache.logging.log4j<
          /groupId>
          
        <
          artifactId>
          log4j-core<
          /artifactId>
          
        <
          version>
          2.20.0<
          /version>
          
      <
          /dependency>
          
      <
          dependency>
          
        <
          groupId>
          org.apache.logging.log4j<
          /groupId>
          
        <
          artifactId>
          log4j-api<
          /artifactId>
          
        <
          version>
          2.20.0<
          /version>
          
      <
          /dependency>
          
      
    • src/main/resources/log4j2.xml
      <
          ?xml version="1.0" encoding="UTF-8"?>
          
      <
          Configuration status="WARN">
          
        <
          Appenders>
          
          <
          Console name="Console" target="SYSTEM_OUT">
          
            <
      PatternLayout pattern="%d{
      yyyy-MM-dd HH:mm:ss}
       %-5p %c{
      1}
          :%L - %msg%n"/>
          
          <
          /Console>
          
          <
          File name="File" fileName="logs/app.log">
          
            <
      PatternLayout pattern="%d{
      yyyy-MM-dd HH:mm:ss}
       %-5p %c{
      1}
          :%L - %msg%n"/>
          
          <
          /File>
          
        <
          /Appenders>
          
        <
          Loggers>
          
          <
          Root level="INFO">
          
            <
          AppenderRef ref="Console"/>
          
            <
          AppenderRef ref="File"/>
          
          <
          /Root>
          
        <
          /Loggers>
          
      <
          /Configuration>
      
      
  • JUL(java.util.logging)
    • 配置 src/main/resources/logging.properties
      handlers= java.util.logging.ConsoleHandler, java.util.logging.FileHandler
      .level= INFO
      java.util.logging.ConsoleHandler.level = INFO
      java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
      java.util.logging.FileHandler.level = INFO
      java.util.logging.FileHandler.pattern = logs/app.log
      java.util.logging.FileHandler.limit = 50000
      java.util.logging.FileHandler.count = 1
      java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter
      
    • 启动时指定:-Djava.util.logging.config.file=classpath:logging.properties

三 Linux系统层面的日志轮转与输出管理

  • 使用 logrotate 做按天/按大小滚动、压缩与保留
    • 新建配置:/etc/logrotate.d/myapp
      /opt/myapp/logs/*.log {
          
        daily
        rotate 7
        compress
        missingok
        notifempty
        create 640 appuser appgroup
        sharedscripts
        postrotate
          systemctl reload myapp.service >
          /dev/null 2>
          &
      1 || true
        endscript
      }
          
      
    • 测试与生效:logrotate -vf /etc/logrotate.d/myapp
  • systemd 服务运行并重定向标准输出
    • /etc/systemd/system/myapp.service
      [Unit]
      Description=My Java App
      After=network.target
      
      [Service]
      ExecStart=/usr/bin/java -jar /opt/myapp/app.jar
      StandardOutput=append:/opt/myapp/logs/stdout.log
      StandardError=append:/opt/myapp/logs/stderr.log
      User=appuser
      Group=appgroup
      Restart=on-failure
      
      [Install]
      WantedBy=multi-user.target
      
    • 使配置生效:systemctl daemon-reload & & systemctl enable --now myapp
  • 传统方式(不使用 systemd)
    • 前台输出到文件:nohup java -jar app.jar > run.out 2> & 1 &
    • 仅输出错误:nohup java -jar app.jar > /dev/null 2> & 1 &

四 运行与维护命令

  • 实时查看日志
    • 应用日志:tail -f logs/app.log
    • 控制台输出:tail -f logs/stdout.log
  • 按时间查看:grep "2026-01-04" logs/app.log
  • 按级别筛选:grep " ERROR " logs/app.log
  • 查看进程与日志占用:ps -ef | grep javalsof | grep logs

五 最佳实践与排错要点

  • 使用SLF4J门面解耦代码与实现;在开发与生产可采用不同实现而无需改代码。
  • 统一日志格式(时间、级别、线程、类名/行号等),便于检索与分析。
  • 合理设置日志级别:开发环境用DEBUG,生产建议INFO/WARN,避免过量日志影响性能。
  • 启用异步日志(Log4j 2、Logback均支持)以提升高并发场景吞吐。
  • 配置滚动与保留策略(按天/按大小、压缩、保留天数),防止磁盘被占满。
  • 避免依赖System.out/err;使用日志框架输出结构化信息(如MDC/请求ID)。
  • 注意权限与目录:确保运行用户对日志目录有写权限;建议使用绝对路径
  • 依赖冲突排查:避免同时存在多套日志实现(如 log4j-to-slf4j 与 log4j-slf4j-impl 冲突),保持桥接链条单一。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: Linux下Java日志如何配置
本文地址: https://pptw.com/jishu/787077.html
Java服务在Linux如何优化启动 Linux环境下Java内存如何管理

游客 回复需填写必要信息