日志和监控

日志和监控

1:如何使用日志?

1. 使用 java.util.logging

java.util.logging 是 Java 标准库提供的日志框架,使用简单,无需额外依赖。

import java.util.logging.Logger;

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

    public static void main(String[] args) {
        logger.info("This is an info message");
        logger.warning("This is a warning message");
        logger.severe("This is a severe message");
    }
}

2. 使用 Log4j

Log4j 是一个广泛使用的日志框架,提供了灵活的配置和丰富的特性。

1:导入依赖

<!-- 添加 Log4j 依赖 -->
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>2.14.1</version>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.14.1</version>
</dependency>

2:代码演示:

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

public class Log4jExample {
    private static final Logger logger = LogManager.getLogger(Log4jExample.class);

    public static void main(String[] args) {
        logger.info("This is an info message");
        logger.warn("This is a warning message");
        logger.error("This is an error message");
    }
}

3. 使用 Logback

Logback 是由 Log4j 的创始人开发的日志框架,具有性能优势和功能丰富。

1:导入依赖

<!-- 添加 Logback 依赖 -->
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.2.3</version>
</dependency>

2:代码演示:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class LogbackExample {
    private static final Logger logger = LoggerFactory.getLogger(LogbackExample.class);

    public static void main(String[] args) {
        logger.info("This is an info message");
        logger.warn("This is a warning message");
        logger.error("This is an error message");
    }
}

4. 使用 SLF4J

SLF4J 是一个日志门面框架,可以与不同的日志实现框架结合使用,提供了统一的日志接口。

1:导入依赖

<!-- 添加 SLF4J 和 Logback 依赖 -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.30</version>
</dependency>
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.2.3</version>
</dependency>

2:代码演示

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class Slf4jExample {
    private static final Logger logger = LoggerFactory.getLogger(Slf4jExample.class);

    public static void main(String[] args) {
        logger.info("This is an info message");
        logger.warn("This is a warning message");
        logger.error("This is an error message");
    }
}

2:如何使用监控?

1:JMX(Java Management Extensions)监控:

JMX是Java平台的管理和监控扩展,可以提供对Java应用程序的管理和监控能力。通过MBean(管理Bean)来定义被监控的资源,可以使用JMX API来获取和修改这些MBean的属性。

import javax.management.MBeanServer;
import javax.management.ObjectName;
import java.lang.management.ManagementFactory;

public class JMXMonitor {
    public static void main(String[] args) throws Exception {
        // 创建MBeanServer
        MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();

        // 创建ObjectName,用于标识被监控资源
        ObjectName name = new ObjectName("com.example:type=MyResource");

        // 注册MBean到MBeanServer
        MyResource myResource = new MyResource();
        mbs.registerMBean(myResource, name);

        // 进入监控状态,保持程序运行
        System.in.read();
    }
}

// 被监控的资源
public class MyResource {
    private int counter = 0;

    public int getCounter() {
        return counter;
    }

    public void incrementCounter() {
        counter++;
    }
}

2:JMX注解(Java 6+):

从Java 6开始,JMX提供了使用注解来简化MBean的定义过程。使用@ManagedResource@ManagedAttribute@ManagedOperation等注解来标记被监控资源及其属性和操作。

import javax.management.*;
import java.lang.management.ManagementFactory;

public class JMXAnnotationMonitor {
    public static void main(String[] args) throws Exception {
        // 创建MBeanServer
        MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();

        // 注册MBean到MBeanServer
        MyResourceAnnotation myResource = new MyResourceAnnotation();
        ObjectName name = new ObjectName("com.example:type=MyResourceAnnotation");
        mbs.registerMBean(myResource, name);

        // 进入监控状态,保持程序运行
        System.in.read();
    }
}

@ManagedResource
public class MyResourceAnnotation {
    private int counter = 0;

    @ManagedAttribute
    public int getCounter() {
        return counter;
    }

    @ManagedOperation
    public void incrementCounter() {
        counter++;
    }
}

3:监控系统资源

可以使用Java提供的ManagementFactory类来获取系统资源的信息,例如内存使用情况、线程信息、GC信息等。以下是一个获取系统内存使用情况的示例:

import java.lang.management.ManagementFactory;
import java.lang.management.MemoryMXBean;
import java.lang.management.MemoryUsage;
import java.util.concurrent.TimeUnit;

public class SystemResourceMonitor {
    public static void main(String[] args) throws Exception {
        MemoryMXBean memoryBean = ManagementFactory.getMemoryMXBean();

        while (true) {
            MemoryUsage heapUsage = memoryBean.getHeapMemoryUsage();
            System.out.println("Heap Memory Usage: " + heapUsage);

            MemoryUsage nonHeapUsage = memoryBean.getNonHeapMemoryUsage();
            System.out.println("Non-Heap Memory Usage: " + nonHeapUsage);

            TimeUnit.SECONDS.sleep(1);
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值