`

记录到内存的Logger,可用于web动态显示内容的来源

阅读更多
import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;

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

/**
* 一个日志工具-只记录到内存
*
* @author jeffay.jiang
*
*/
public class MemoryLogger {
public static Logger log = LoggerFactory.getLogger(MemoryLogger.class);
public static final String THIS_CLASS_NAME=MemoryLogger.class.getName();//  "MemoryLogger";
public static final String TO_MSG=" >> ";

private DateFormat df = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss.SSS");
private PrintStream bp;
private ByteArrayOutputStream bs;
private ArrayList<String> memLog;
private int mlogSize = 500;

public MemoryLogger() {
this(500);
}

public ArrayList<String> getLogMsg() {
return memLog;
}

public MemoryLogger(int size) {
memLog = new ArrayList<String>();
mlogSize = size;
}

public void log(String msg) {
String caller = "";
StackTraceElement stack[] = Thread.currentThread().getStackTrace();
for ( int i=0; i<stack.length; i++ ) {
if ((stack[i].getClassName().indexOf(THIS_CLASS_NAME))>=0 ) {
if(i+1<stack.length){
caller=stack[i+1].getClassName() + "." + stack[i+1].getMethodName();
}
}
}

String d = df.format(new Date());

log.info(caller+TO_MSG+msg);
memLog.add(0, d+" "+caller+TO_MSG+msg);

if (memLog.size() > mlogSize) {
memLog.remove(mlogSize);
}
}

public void log(Exception e) {
String caller = "";
StackTraceElement stack[] = Thread.currentThread().getStackTrace();
for ( int i=0; i<stack.length; i++ ) {
if ((stack[i].getClassName().indexOf(THIS_CLASS_NAME))>0 ) {
if(i+1<stack.length){
caller=stack[i+1].getClassName() + "." + stack[i+1].getMethodName();
}
}
}

String d = df.format(new Date());
try {
String msg=toString(e);
log.info(caller+TO_MSG+msg);
memLog.add(0, d+" "+caller+TO_MSG+msg);

if (memLog.size() > mlogSize) {
memLog.remove(mlogSize);
}
} catch (Exception e1) {
e1.printStackTrace();
}
}

public synchronized String toString(Exception ex) throws Exception {
if (bs == null) {
bs = new ByteArrayOutputStream();
bp = new PrintStream(bs, true, "utf-8");
}
if (ex == null) {
return "NULL";
}
bs.reset();
ex.printStackTrace(bp);
bp.flush();
byte[] b = bs.toByteArray();
String msg = new String(b, "utf-8");
return msg;
}
}
0
4
分享到:
评论

相关推荐

    JSLogger日志记录组件

    2. **方法定义**:如`info`、`warn`、`error`等方法,用于记录不同级别的日志。 3. **日志存储**:可能使用浏览器的localStorage或sessionStorage进行本地存储。 4. **日志上报**:可能使用XMLHttpRequest或fetch ...

    C# Logger C# 的日志工具

    例如,`Logger.Debug("调试信息")`、`Logger.Info("信息")`、`Logger.Warn("警告")` 和 `Logger.Error("错误")` 分别用于记录不同级别的日志信息。对于更复杂的用例,还可以使用`Logger.Log()`方法,通过传入自定义...

    labview操作logger,日志记录

    在LabVIEW中,"logger"通常指的是日志记录功能,用于捕获和存储程序运行时的各种信息,如变量值、错误信息、事件触发等,这对于调试、优化和分析程序行为至关重要。 日志记录在LabVIEW中的实现可以通过自定义VI...

    多线程时间记录logger类

    Logger类通常是一个设计用于记录日志的类,它提供了一种标准的方式来记录程序运行过程中的信息,如错误、警告、调试信息等。使用logger类,开发者可以方便地控制日志级别,筛选输出,并且可以将日志输出到文件、...

    键盘记录器Keyboard Logger C++ 源码

    每当键盘事件发生时,这个结构体会被更新并存储到文件或内存中。Windows提供了`GetTickCount`或`QueryPerformanceCounter`等函数来获取精确的时间戳。 **知识点四:后台运行** 为了实现后台运行,键盘记录器可能...

    Active Key Logger(记录从开机到关机所有的键盘按键) 4.2.1

    Active Key Logger是一款强大的监控软件,主要用于记录计算机用户从开机到关机的全部键盘输入信息。这款工具以其4.2.1版本,提供了一种隐形且高效的方式来追踪用户的键盘活动,无论是为了家长控制、企业监控还是其他...

    laravel-query-logger:一种用于记录laravel应用程序所有查询的开发工具

    Laravel查询记录器 :memo: 一个开发工具,用于记录Laravel应用程序的所有查询。正在安装$ composer require overtrue/laravel-query-logger -vvv 当LOG_QUERY为true时,将启用Laravel查询记录器。用法$ tail -f ./...

    logger记录日志

    DEBUG级别用于记录最详细的信息,适合开发阶段调试;INFO级别记录程序的正常流程;WARNING表示有潜在问题但程序仍可继续运行;ERROR表示程序出错但仍可能部分功能可用;CRITICAL则意味着系统无法正常工作,需要立即...

    Logger日志文件查看

    在IT行业中,日志文件(.log文件)是系统、应用程序和服务器运行过程中记录事件、错误、警告和其他信息的重要方式。这些文件对于诊断问题、跟踪系统行为和优化性能至关重要。"Logger日志文件查看"这一主题主要涉及...

    简单的logger类

    在编程领域,日志记录(logging)是必不可少的工具,它用于跟踪程序的运行状态、错误和调试信息。本文将详细介绍一个名为“简单的logger类”的实现,它支持自动创建文件来存储日志信息。 首先,我们需要理解日志...

    fluent-logger-golang, 用于Fluentd的结构化记录器( Golang ).zip

    fluent-logger-golang, 用于Fluentd的结构化记录器( Golang ) fluent-logger-golang Fluentd ( Golang ) 结构化事件记录器如何安装go get github.com/fluent/fluent-logger-golang/fluent

    logger2js-1.0.6

    logger2js是用原生态javascript语言编写的web页面js日志&amp;调试工具箱 主要用于客户端脚本的分析和查错 工具提供了$alert函数来代替js固有的alert函数 除了能够指定字体颜色在控制台连续输出字符串信息以外 还...

    Burpsuite插件之logger++使用方法1

    相比于Burpsuite的基础日志,Logger++能够记录更多的请求和响应细节,这些额外的字段可以帮助用户深入分析数据包,特别是对于进行Web应用安全测试和漏洞发现时非常有用。 ### Logger++安装 安装Logger++非常简单,...

    Java Logger Logging 封装

    在Java编程中,日志记录是一项至关重要的任务,它用于追踪程序运行时的状态,记录错误信息,便于后期分析和调试。`Logger`是Java标准库`java.util.logging`包提供的日志工具,它提供了多种级别的日志记录,如`SEVERE...

    logger.zip

    "logger_-&gt;error"用于记录错误日志,当程序遇到不可恢复的错误时,会调用这个接口,它通常包含了错误的详细信息,帮助开发者定位问题。"logger_-&gt;warn"则用于记录警告日志,表明程序遇到了非致命问题,但可能影响...

    文件Logger Email Logger

    文件Logger和Email Logger是软件开发中的重要工具,用于日志管理和异常处理。在这个特定的案例中,"文件Logger Email Logger" 提供了两种关键功能:一是记录程序运行时的异常日志,二是通过电子邮件(Email)发送...

    Go-logger-Go简约的日志库

    对于更复杂的日志需求,如日志切割、归档或发送到远程服务器,`logger`库可能需要与其他组件结合使用,比如集成`rotate`库进行日志文件的滚动,或者配合`syslog`包将日志发送到系统日志服务器。 总之,`Go-logger-...

    鼠标动作记录器Mouse Logger

    程序说明: 本程序可记录你鼠标操作的每一个动作; 包括移动、左右键单击、中键单击、双击等动作(不记录滚轮操作); 同时可以生成文本记录文件(*.txt); 如果你能读懂生成的代码也可以自己用代码...

    Logger

    "Logger"这个标题可能指的是一个日志库或者工具,它提供了用于记录应用程序事件的接口和功能。 在描述中提到的“Logger”,虽然简洁,但我们可以推断其核心作用是关于程序的日志管理和输出。在实际项目中,良好的...

    fastify框架的logger日志工具

    Fastify框架是Node.js开发高性能Web应用的利器,其核心设计目标是提供高效的性能和最小的体积。在Fastify中,日志管理是系统监控、调试和错误追踪的关键部分,而`fastify-logger`正是Fastify官方推荐的日志插件。这...

Global site tag (gtag.js) - Google Analytics