首页主机资讯Ubuntu Java日志管理如何实现

Ubuntu Java日志管理如何实现

时间2025-10-16 10:10:03发布访客分类主机资讯浏览486
导读:Ubuntu Java日志管理实现方法 一、使用系统自带工具(rsyslog + logrotate) 1. 安装与配置rsyslog rsyslog是Ubuntu默认的日志收集工具,可将Java应用日志发送到系统日志文件或自定义路径。...

Ubuntu Java日志管理实现方法

一、使用系统自带工具(rsyslog + logrotate)

1. 安装与配置rsyslog
rsyslog是Ubuntu默认的日志收集工具,可将Java应用日志发送到系统日志文件或自定义路径。

  • 安装rsyslog:sudo apt-get install rsyslog
  • 配置日志收集:编辑/etc/rsyslog.conf或在/etc/rsyslog.d/下创建新文件(如java_app.conf),添加过滤规则(将包含"myapp"的日志写入指定文件):
    :msg, contains, "myapp" -/var/log/myapp.log & stop
  • 重启服务生效:sudo systemctl restart rsyslog
    2. 配置logrotate日志轮转
    避免日志文件过大,使用logrotate定期压缩、删除旧日志。
  • 安装logrotate:sudo apt-get install logrotate
  • 创建自定义配置(如/etc/logrotate.d/myapp):
    /var/log/myapp.log {
    
      daily           # 每日轮转
      rotate 7        # 保留7天日志
      compress        # 压缩旧日志
      missingok       # 文件不存在时不报错
      notifempty      # 日志为空时不轮转
      create 0644 root root  # 创建新日志文件的权限
    }
        
    
  • 手动测试:sudo logrotate -f /etc/logrotate.d/myapp

二、使用Java原生日志框架(java.util.logging)

1. 基本代码示例
通过java.util.logging.Logger记录日志,支持控制台、文件输出。

import java.util.logging.Logger;
    
import java.util.logging.Level;


public class MyApp {
    
    private static final Logger logger = Logger.getLogger(MyApp.class.getName());

    public static void main(String[] args) {
    
        logger.info("Application started.");
 // 记录info日志
        try {

            // 业务代码
        }
 catch (Exception e) {
    
            logger.log(Level.SEVERE, "Error occurred", e);
 // 记录错误日志(带堆栈)
        }

    }

}
    

2. 配置文件(logging.properties)
通过配置文件调整日志级别、输出目标和格式:

handlers=java.util.logging.FileHandler, java.util.logging.ConsoleHandler
java.util.logging.FileHandler.pattern=%h/myapp.log  # 日志文件路径(%h为用户主目录)
java.util.logging.FileHandler.limit=50000           # 单个文件最大大小(字节)
java.util.logging.FileHandler.count=1               # 保留的文件数量
java.util.logging.FileHandler.formatter=java.util.logging.SimpleFormatter
java.util.logging.ConsoleHandler.level=ALL          # 控制台输出级别
java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter
.level=ALL                                          # 全局日志级别

3. 启动时加载配置
通过JVM参数指定配置文件路径:
java -Djava.util.logging.config.file=logging.properties -jar myapp.jar

三、使用第三方日志框架(Log4j/Logback)

1. Log4j 2.x配置示例
Log4j 2是当前流行的日志框架,支持异步日志、动态配置等功能。

  • 添加依赖(Maven):
    <
        dependency>
        
      <
        groupId>
        org.apache.logging.log4j<
        /groupId>
        
      <
        artifactId>
        log4j-core<
        /artifactId>
        
      <
        version>
        2.14.1<
        /version>
        
    <
        /dependency>
        
    <
        dependency>
        
      <
        groupId>
        org.apache.logging.log4j<
        /groupId>
        
      <
        artifactId>
        log4j-api<
        /artifactId>
        
      <
        version>
        2.14.1<
        /version>
        
    <
        /dependency>
        
    
  • 创建log4j2.xml配置文件(类路径下,如src/main/resources):
    <
        ?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 - %m%n"/>
        
        <
        /Console>
        
        <
        File name="File" fileName="logs/app.log">
        
          <
    PatternLayout pattern="%d{
    yyyy-MM-dd HH:mm:ss}
     %-5p %c{
    1}
        :%L - %m%n"/>
        
        <
        /File>
        
      <
        /Appenders>
        
      <
        Loggers>
        
        <
        Root level="info">
        
          <
        AppenderRef ref="Console"/>
        
          <
        AppenderRef ref="File"/>
        
        <
        /Root>
        
      <
        /Loggers>
        
    <
        /Configuration>
        
    
  • 代码中使用:
    import org.apache.logging.log4j.LogManager;
        
    import org.apache.logging.log4j.Logger;
    
    public class MyApp {
        
      private static final Logger logger = LogManager.getLogger(MyApp.class);
    
      public static void main(String[] args) {
        
        logger.info("Application started.");
    
      }
    
    }
        
    

2. Logback配置示例
Logback是SLF4J的原生实现,性能优于Log4j 1.x。

  • 添加依赖(Maven):
    <
        dependency>
        
      <
        groupId>
        ch.qos.logback<
        /groupId>
        
      <
        artifactId>
        logback-classic<
        /artifactId>
        
      <
        version>
        1.4.11<
        /version>
        
    <
        /dependency>
        
    
  • 创建logback.xml配置文件:
    <
        ?xml version="1.0" encoding="UTF-8"?>
        
    <
        configuration>
        
      <
        appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        
        <
        encoder>
        
          <
        pattern>
    %d{
    yyyy-MM-dd HH:mm:ss.SSS}
     [%thread] %-5level %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}
        .%i.log<
        /fileNamePattern>
        
          <
        maxHistory>
        30<
        /maxHistory>
         <
        !-- 保留30天日志 -->
        
        <
        /rollingPolicy>
        
        <
        encoder>
        
          <
        pattern>
    %d{
    yyyy-MM-dd HH:mm:ss.SSS}
     [%thread] %-5level %logger{
    36}
         - %msg%n<
        /pattern>
        
        <
        /encoder>
        
      <
        /appender>
        
      <
        root level="info">
        
        <
        appender-ref ref="STDOUT"/>
        
        <
        appender-ref ref="FILE"/>
        
      <
        /root>
        
    <
        /configuration>
        
    
  • 代码中使用(与Log4j类似):
    import org.slf4j.Logger;
        
    import org.slf4j.LoggerFactory;
    
    public class MyApp {
        
      private static final Logger logger = LoggerFactory.getLogger(MyApp.class);
    
      public static void main(String[] args) {
        
        logger.info("Application started.");
    
      }
    
    }
        
    

四、集中式日志管理(ELK Stack)

1. 安装ELK组件
ELK(Elasticsearch + Logstash + Kibana)适合大规模日志收集与分析。

  • 安装Elasticsearch:
    wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
    echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list
    sudo apt-get update &
        &
     sudo apt-get install elasticsearch
    
  • 安装Logstash:sudo apt-get install logstash
  • 安装Kibana:sudo apt-get install kibana

2. 配置Logstash收集Java日志
创建logstash.conf(如/etc/logstash/conf.d/java_app.conf),定义输入、过滤、输出:

input {

  file {
    
    path =>
     "/var/log/myapp.log"  # Java应用日志路径
    start_position =>
 "beginning"
  }

}

filter {

  grok {
     match =>
 {
     "message" =>
 "%{
TIMESTAMP_ISO8601}
 %{
LOGLEVEL:level}
 %{
GREEDYDATA:msg}
" }
 }

  date {
     match =>
 ["timestamp", "ISO8601"] }

}

output {

  elasticsearch {
     hosts =>
 ["localhost:9200"] }
  # 发送到Elasticsearch
  stdout {
     codec =>
 rubydebug }
                 # 控制台输出(调试用)
}
    

3. 启动ELK服务

sudo systemctl start elasticsearch
sudo systemctl start logstash
sudo systemctl start kibana

访问http://localhost:5601(Kibana)即可可视化分析日志。

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


若转载请注明出处: Ubuntu Java日志管理如何实现
本文地址: https://pptw.com/jishu/727747.html
Linux Crontab时间表达式怎么写 Ubuntu Java代码调试技巧有哪些

游客 回复需填写必要信息