java 造轮子之手写logback简单版

代码如下:

package com.example.spring;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;

import java.text.SimpleDateFormat;
import java.util.Date;

public class MyLog {

    public static volatile boolean logJson = true;
    public static volatile boolean logInfo = true;
    public static volatile boolean logDebug = true;
    public static volatile boolean logError = true;

    private static String time1 = "yyyy-MM-dd‘T‘HH:mm:ss.SSSXXX";
    static SimpleDateFormat format = new SimpleDateFormat(time1);

    public static String longToString(long time) {
        Date date = new Date(time);
        String dates = format.format(date);
        return dates;
    }

    static ObjectMapper mapper = new ObjectMapper();

    static {
        mapper.enable(SerializationFeature.INDENT_OUTPUT);
    }

    public MyLog() {
    }
    public static String getJson(Object obj) {
        try {
            return mapper.writeValueAsString(obj);
        } catch (JsonProcessingException e) {
            error("failed to parse json");
            e.printStackTrace();
            return null;
        }
    }
    public static void printJson(Object object) {
        if (logInfo) {
            try {
                System.out.println(JSON + getLogPrefix("INFO", 4)+ "\t" + mapper.writeValueAsString(object) + END);
            } catch (JsonProcessingException e) {
                error("fialed to parse json");
            }
        }
    }

    public static void info(Object object) {
        if (logInfo) {
            System.out.println(INFO + getLogPrefix("INFO", 4) + object + END);
        }
    }

    public static void debug(Object object) {
        if (logDebug) {
            System.out.println(DEBUG + getLogPrefix("DEBUG", 4) + object + END);
        }
    }

    public static void error(Object object) {
        if (logError) {
            System.out.println(ERROR + getLogPrefix("ERROR", 4) + " " + object + END);
        }
    }

    public static String getLogPrefix(String level, int depth) {
        return longToString(new Date().getTime()) + " " + level + " [" + Thread.currentThread().getName() + "]" + " [" + getMethodInfo(depth) + "] -";
    }
    public void logStart() {
        StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();
        System.out.println("------method_name:" + stackTrace[2]);
        //Tools.setMdc(Tools.getUuid());
    }

    public static String getMethodInfo(int depth) {
        StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();
        StackTraceElement elements = stackTrace[depth];
        return elements.getFileName() + "@" + elements.getMethodName() + ":" + elements.getLineNumber();
    }

    public static void enableJson(boolean open) {
        logJson = open;
    }

    public static void logAll() {
        logInfo = true;
        logDebug = true;
    }

    public static void logInfo() {
        logInfo = true;
        logDebug = false;
    }

    public static void logDebug() {
        logInfo = false;
        logDebug = true;
    }

    public static void logNone() {
        logInfo = false;
        logDebug = false;
    }
    public static void sleep(int timeInMs) {
        try {
            Thread.sleep(timeInMs);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    /*private static final String DEBUG = "\033[32m";
    private static final String INFO = "\033[36m";
    private static final String ERROR = "\033[31m";
    private static final String JSON = "\033[36m";
    private static final String END = "\033[0m";
    private static final String EXCEPTION = "";*/
    private static final String DEBUG = "";
    private static final String INFO = "";
    private static final String ERROR = "";
    private static final String JSON = "";
    private static final String END = "";
    private static final String EXCEPTION = "";
    public static void main(String[] args) {
        getMethodInfo(2);
        debug("debug test");
        info("info test");
        error("error test");
        System.out.println(JSON + "json test" + END);
        printJson(new Object());

    }
}

使用方法:

MyLog.info("hello world");

备注:

本博客内其它多篇文章都是使用的这个日志打印类。

原文地址:https://www.cnblogs.com/gc65/p/11183823.html

时间: 2024-10-04 15:52:27

java 造轮子之手写logback简单版的相关文章

利用SpringBoot+Logback手写一个简单的链路追踪

目录 一.实现原理 二.代码实战 三.测试 最近线上排查问题时候,发现请求太多导致日志错综复杂,没办法把用户在一次或多次请求的日志关联在一起,所以就利用SpringBoot+Logback手写了一个简单的链路追踪,下面详细介绍下. 一.实现原理 Spring Boot默认使用LogBack日志系统,并且已经引入了相关的jar包,所以我们无需任何配置便可以使用LogBack打印日志. MDC(Mapped Diagnostic Context,映射调试上下文)是log4j和logback提供的一种

分享一个近期写的简单版的网页采集器

分享一个近期写的简单版的网页采集器 功能特点: 1.可通过配置,保存采集规则. 2.可通过采集规则,进行数据采集. 3.可分页,分关键字,进行采集. 4.可保存数据至数据库,文本中. ........... 功能还比较简单,喜欢深入的可以继续深入下去,暂时还没有登录的功能,因为登录功能涉及到的范围比较广,待日后慢慢研究后再开发. 我先上个图让大家一睹为快吧: 首先看看页面,我们要采集这个网站的文章 接下来,首先是查找分页,获得分页里面的文章链接,接着查找内容页需要采集的字段,生成规则,进行采集.

Java面试必备:手写单例模式

面试官:请手写下几种常见的单例模式 我:好的(面带微笑),心里暗喜(送分题). 没成想提笔便写出了如此豪放的代码,不堪回首,请原谅我的不羁! 此篇整理了几种常见的单例模式代码示例,再有面试官让手撕单例模式,便能心中有码,下笔有神. 为什么要有单例模式 实际编程应用场景中,有一些对象其实我们只需要一个,比如线程池对象.缓存.系统全局配置对象等.这样可以就保证一个在全局使用的类不被频繁地创建与销毁,节省系统资源. 实现单例模式的几个要点 首先要确保全局只有一个类的实例. 要保证这一点,至少类的构造器

识别手写数字增强版 - pytorch从入门到入道(一)

1.快速开始 1.1 定义神经网络类,继承torch.nn.Module,文件名为digit_recog.py 1 import torch.nn as nn 2 3 4 class Net(nn.Module): 5 def __init__(self): 6 super(Net, self).__init__() 7 self.conv1 = nn.Sequential(nn.Conv2d(1, 6, 5, 1, 2) 8 , nn.ReLU() 9 , nn.MaxPool2d(2, 2)

【Java学习笔记】如何写一个简单的Web Service

本Guide利用Eclipse以及Ant建立一个简单的Web Service,以演示Web Service的基本开发过程: 1.系统条件: Eclipse Java EE IDE for Web Developers Java SE 6 Windows XP 2.基本环境搭建: 1)Java SE6 JDK的安装:下载Java SE6 JDK,双击,安装默认选项进行安装即可. 2)Eclipse的安装与配置: 安装时直接解压.     配置处有两点,Window>Preferences>Jav

采用jsp页面与java代码分离的方式写一个简单的二维表

前提:在我们做程序时追求的是高内聚,低耦合,但是如果我们把jsp页面的的代码和java的代码都放在了jsp的代码编写中,使java和jsp高耦合这样的话不仅使jsp代码页面显得很复杂,而且也特别让不利于以后的维护,所以我们有了一个不成文的规范就是分层架构,把javad代码与jsp的代码分离开来,使jsp代码页中更加干净整洁. 下面我将于用jsp和java代码分离的方法做出这样的一个二维表(做一个jsp页面动态显示信息表) 第一步:首先我们需要一个实体类用于存放一个人的一整条信息(根据表格信息有编

手写一个简单的Http服务器

什么是Http协议? Http协议: 对浏览器客户端 和 服务器端 之间数据传输的格式规范 Http是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展.目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的规范化工作正在进行之中,而且HTTP-NG(Next Generation of HTTP)的建议已经提出.HTTP协议的主要特点可概括如下:1.支持客户/服务器模式.2.简单快速:客

python web编程(一): web流程,手写一个简单的web框架

# -*- coding: utf-8 -*-__author__ = 'xzq' '''1. HTTP: 特点: 1>. 请求/响应模式 2>. 无状态协议, Client每一次访问都会被Server当作是第一次访问 (Cookie, Session) Request: POST /index.html HTTP/1.1 # 请求方法 url 协议版本 Header: Host: www.bilibili.com # 请求域名 --> DNS Connection: keep-aliv

手写个简单的遍历器

Array.prototype.values = function(){ let i = 0; let self = this return { next(){ const done = i>= self.length const value = done? undefined : self[i++] return { value, done } } } } const color = ['red','green','white']; //控制台 color.values() color.nex