使用tinylog 1.1改进您在Java EE应用程序中的登录

tinylog是Java的轻量级日志记录框架。 与Apache Log4j和Logback相反,tinylog由仅80KB的单个JAR文件组成,没有任何依赖性,并且具有静态logger类。 这意味着您无需使用任何样板代码为每个类创建记录器实例。

public static void main(String[] args) {Logger.info("Hello World!"); // Logging methods are static
}

记录上下文

tinylog 1.1的新功能之一是对日志记录上下文的支持。 该功能在其他日志记录框架中被称为映射日志记录上下文(MDC),并允许使用附加数据对日志条目进行基于线程的扩展。 例如,您可以为一个线程设置一次用户IP,tinylog将在所有日志条目中包括该IP。

public class HelloWorld extends HttpServlet {private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {LoggingContext.put("ip", request.getRemoteAddr()); // Set IP for this and all client threadsLogger.info("Handle request");response.getWriter().append("<h1>Hello World</h1><p>");Logger.info("Done request");}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {doGet(request, response);}}

如果使用负载平衡器或代理,则可以通过调用request.getHeader("X-FORWARDED-FOR").获得真实的用户IP request.getHeader("X-FORWARDED-FOR"). 日志记录上下文必须包含在日志记录格式模式中。 可以通过属性文件,系统属性或Fluent API 配置 tinylog。 您可以使用首选方式将日志记录格式模式设置为例如“ {date} [{context:ip}] {level}:{message}”,以获取以下输出:

2016-05-15 11:40:31 [89.12.191.39] INFO: Handle request
2016-05-15 11:40:31 [89.12.191.39] INFO: Done request

这样的日志记录上下文有助于重建:哪个日志条目属于哪个请求。 如果您具有登录系统,则用户名是另一个用于记录上下文的合适候选者。 也可以设置多个值。 如果使用线程池,则不要忘记在将线程返回线程池时清除日志上下文。

作家

tinylog支持多个编写器来输出日志条目。 对于Java EE应用程序,RollingFileWriter和JdbcWriter是最受欢迎的编写器​​。

RollingFileWriter可以将日志条目写入文件。 与基本FileWriter相反,可以在定义事件后启动新的日志文件。 此类事件可以是应用程序的开始,最大文件大小或日期。 可以将定义数量的旧日志文件保留为备份。

通过属性文件配置RollingFileWriter的示例:

tinylog.writer = rollingfile
tinylog.writer.filename = log.txt
tinylog.writer.backups = 10
tinylog.writer.label = count
tinylog.writer.policies = startup, daily

在此示例中,RollingFileWriter在应用程序启动时以及每天运行时之后启动一个新的日志文件。 最新的十个日志文件将作为备份保存并连续编号。
JdbcWriter可以将日志条目写入SQL数据库。 如果您有多台服务器,这是集中日志的一种方法。
通过属性文件配置JdbcWriter的示例:

tinylog.writer = jdbc
tinylog.writer.url = jdbc:mysql://localhost/demo
tinylog.writer.table = logs
tinylog.writer.columns = date, ip, level, message
tinylog.writer.values = DATE, CONTEXT, LEVEL, MESSAGE
tinylog.writer.username = demo
tinylog.writer.password = demo

在现代标准Java环境和大多数Web应用程序服务器中,JVM可以通过服务找到数据库驱动程序。 不幸的是,独立的Apache Tomcat需要手动加载数据库驱动程序。 这可以通过ServletContextListener完成。

@WebListener
public class LifeCycleListener implements ServletContextListener {@Overridepublic void contextInitialized(ServletContextEvent event) {try {new com.mysql.jdbc.Driver(); // Your database driver} catch (SQLException e) {Logger.error(e);}}@Overridepublic void contextDestroyed(ServletContextEvent event) {}}

tinylog 1.2将支持Java EE数据源。 您只需为应用程序定义一次数据库连接,然后就可以在tinylog配置中引用数据源。 另一个新功能是一旦数据库再次启动,在连接断开的情况下重新建立数据库连接。

编写线程

开箱即用,tinylog同步写入所有日志条目。 tinylog的写入线程可用于在单独的线程中执行写入器,以避免因IO操作缓慢而阻塞。 如果激活,则必须与您的应用程序一起关闭写入线程。 这可以通过观察主线程或调用shutdown方法来完成。 由于Java EE应用程序中没有可靠的长寿命线程,因此建议的方法是使用ServletContextListener关闭写入线程。

@WebListener
public class LifeCycleListener implements ServletContextListener {@Overridepublic void contextInitialized(ServletContextEvent event) {}@Overridepublic void contextDestroyed(ServletContextEvent event) {Configurator.shutdownWritingThread(false);}}

源代码

GitHub上提供了Java EE示例应用程序的整个源代码。 可以在tinylog网站上找到有关tinylog的更多信息,包括完整的手册。

翻译自: https://www.javacodegeeks.com/2016/06/improve-your-logging-in-your-java-ee-application-with-tinylog-1.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/353285.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一般区域二重、三重积分MATLAB计算方法

这里讨论的计算方法指的是利用现有的MATLAB函数来求解&#xff0c;而不是根据具体的数值计算方法来编写相应程序。目前最新版的2009a有关于一般区域二重积分的计算函数quad2d&#xff0c;但没有一般区域三重积分的计算函数&#xff0c;而NIT工具箱似乎也没有一般区域三重积分的…

搜索时,怎样排除不需要的关键字

初阶搜索最基本的搜索&#xff0c;即查询包含单个关键字的信息。现在&#xff0c;进一步探讨多个关键字以及关键字间不同逻辑关系的查询。搜索结果要求包含两个及两个以上关键字一般搜索引擎需要在多个关键字之间加上“”。示例&#xff1a;搜索所有包含关键词“易筋经”和“吸…

Java集合类框架的基本接口有哪些?

总共有两大接口&#xff1a;Collection 和Map &#xff0c;一个元素集合&#xff0c;一个是键值对集合&#xff1b; 其中List和Set接口继承了Collection接口&#xff0c;一个是有序元素集合&#xff0c;一个是无序元素集合&#xff1b; 而ArrayList和 LinkedList 实现了List接口…

Matlab求对数

Matlab中只是提供了log、log10和log2&#xff0c;其他的都需要换底公式得到。logaBlogB/loga;

C# NTP时间同步类

添加类 NTPClient /// <summary>/// SNTPClient is a C# class designed to connect to time servers on the Internet and/// fetch the current date and time. Optionally, it may update the time of the local system./// The implementation of the protocol is ba…

字典树 ZOJ1109 HDU1251 PKU1204 HDU1075

又称单词查找树&#xff0c;Trie树&#xff0c;是一种树形结构&#xff0c;是一种哈希树的变种。典型应用是用于统计&#xff0c;排序和保存大量的字符串&#xff08;但不仅限于字符串&#xff09;&#xff0c;所以经常被搜索引擎系统用于文本词频统计。它的优点是&#xff1a;…

jaxb需要jar包吗_JAXB –不需要注释

jaxb需要jar包吗似乎有一个误解&#xff0c;认为在模型上需要注释才能使用JAXB&#xff08;JSR-222&#xff09;实现。 事实是&#xff0c;JAXB是例外配置&#xff0c;因此仅当您要覆盖默认行为时才需要注释。 在此示例中&#xff0c;我将演示如何在不提供任何元数据的情况下使…

MATLAB均值和标准差

mean(); %均值std(); %标准差

Codeforces Round #498 (Div. 3) F. Xor-Paths

题目链接&#xff1a;F. Xor-Paths 题解&#xff1a;从起点和终点双向搜索在中间相遇时更新答案 1 #include<bits/stdc.h>2 #include<set>3 #include<cstdio>4 #include<iomanip>5 #include<iostream>6 #include<string>7 #include<cst…

创建健壮的微服务架构所涉及的组件

在本文中&#xff0c;我们将简要学习构建强大的微服务应用程序所需的各种软件组件。 在简要了解每个架构组件之前&#xff0c;我们将陈述设计微服务架构时出现的一般查询。 1.微服务架构组件 每当我们创建微服务应用程序时&#xff0c;我们都会想到以下问题 我们将如何注册微…

MATLAB画图命令zz

一、散点图 1&#xff0e;1&#xff0e;命令 plot 功能 线性二维图。在线条多于一条时&#xff0c;若用户没有指定使用颜色&#xff0c;则plot循环使用由当前坐标轴颜色顺序属性&#xff08;current axes ColorOrder property&#xff09;定义的颜色&#xff0c;以区别不同的…

MATLAB判断奇偶数

if mod(n,2)%偶数else%奇数

从percona server 5.7换到mariadb 10.2

过去两年半一直推荐使用percona server&#xff0c;今天开始&#xff0c;因为一些mysql迟迟不不愿意支持的特性&#xff0c;打算换回mariadb 10.2了&#xff0c;具体哪些不说了&#xff0c;总之非常关键&#xff0c;mariadb都支持一两年了&#xff0c;oracle公司因为oracle的原…

jax-rs jax-ws_JAX-WS入门

jax-rs jax-wsJAX-WS代表XML Web Services的Java API。 它是一种Java编程语言API&#xff0c;用于创建Web服务和使用XML进行通信的客户端。 这篇文章是JAX-WS的快速入门。 先决条件 GlassFish与Eclipse集成在一起 。 创建JAX-WS Web服务 1.在Eclipse中创建一个名为“ com.e…

MATLAB求解非线性方程组

function F fun(x)x1 x(1); x2 x(2);F [2*x13*x2-3;3*x12*x2-5];>>fsolve(fun,[0,0])如果有变系数如下&#xff1a; function F fun(x,a,b)x1 x(1); x2 x(2);F [a(1)*x1b(1)*x2-3;a(2)*x1b(2)*x2-5];>>fsolve(fun,[0,0],[],a,b);%中间加一个[],后面传参数即…

lingo解题报告内容解释

1.2菜单介绍 1.2.1 File 1 New 新建一个窗口,当你执行这个命令时,会出现如下对话框: 你可以在对话框中选择你想要建立的类型.类型如下: 1)扩展名为(*.lg4) LG4格式是LINGO4.0的版本,是在Windows下最主要的储存文件格式,这种格式支持字体格式,自定义格式以及动态连接, LG4以二进…

OpenShift上的无痛集装箱化JBoss通用贷款处理

我们从头到尾讨论了各个层次&#xff0c;但尚未为您提供除Red Hat之外的任何应用程序开发工具。我们一直在讨论为什么应用程序开发人员在App Dev Cloud Stack系列中不能再忽略其堆栈了。 容器开发套件&#xff08;CDK&#xff09; 。 到目前为止&#xff0c;您所拥有的只是一个…

多任务编程—多进程

什么是多任务编程&#xff1f; 多任务编程其实和计算机系统内核有关&#xff0c;通过程利用多个计算机内核同时执行程序&#xff0c;以此来提升程序执行的效率。 多任务编程其中包括&#xff0c;多进程、多线程和多协程&#xff0c;这三种多任务编程各有各的优点和缺点&#xf…

MATLAB数值取整

fix(x);%截尾取整&#xff0c;下取整floor(x);%高斯取整&#xff0c;不超过x的最大整数ceil(x);%大于x的最小整数&#xff0c;上取整round(x);%四舍五入取整

Tomcat权威指南-读书摘要系列6

6. Tomcat 安全防护 使用SecurityManager 在Tomcat中&#xff0c;决定安全策略的配置文件是$CATALINA_HOME/conf/catalina.policy&#xff0c;在用-security选项调用Tomcat的时候&#xff0c;JVM读取这一文件。以安全模式启动Tomcat.\catalina.bat start -security 安全漏洞 Cr…