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

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

  1. java ee的小程序_在Java EE应用程序中实现自动重试

    java ee的小程序 最初,我想将此博客称为" 具有拦截器驱动的重试策略的灵活超时 ",但后来我认为它太"繁重". 该声明以及修改后的标题应该(希望)使您了解 ...

  2. 在Java EE应用程序中实现自动重试

    最初,我想将此博客称为" 具有拦截器驱动的重试策略的灵活超时 ",但后来我认为它太"繁重". 该声明以及修改后的标题应该(希望)使您了解此帖子可能谈论的内容;- ...

  3. swarm部署集群_WildFly Swarm –将Java EE应用程序部署为独立的Jar

    swarm部署集群 WildFly Swarm提供了一个简单的解决方案,用于将Java EE应用程序部署为独立的Jar文件. 这使得部署应用程序非常容易,尤其是REST或Web服务. Swarm在这方 ...

  4. java ee的小程序_扩展Java EE应用程序的基础

    java ee的小程序 老实说,"可扩展性"是一个详尽的主题,并且通常没有被很好地理解. 通常,它被认为与高可用性相同. 我已经看到新手程序员和"经验丰富"的建 ...

  5. java拦截器项目应用_使用拦截器分析Java EE应用程序的性能下降/提高

    java拦截器项目应用 在开发具有某些性能要求的Java EE应用程序时,必须在每个发行版之前验证是否满足这些要求. 您可能会想到,哈德森的一项工作每天晚上在某些特定的硬件平台上执行一系列测试测量. ...

  6. web csrf java_在Java Web应用程序中阻止CSRF

    web csrf java 跨站点请求伪造攻击(CSRF)在Web应用程序中非常常见,如果允许,可能会造成重大危害. 如果您从未听说过CSRF,建议您查看有关它的OWASP页面 . 幸运的是,阻止CS ...

  7. WildFly Swarm –将Java EE应用程序部署为独立的Jar

    WildFly Swarm为将Java EE应用程序部署为独立的Jar文件提供了一种简单的解决方案. 这使得部署应用程序特别是REST或Web服务非常容易. Swarm在这方面与Spring Boot ...

  8. openshift 部署_OpenShift Express:部署Java EE应用程序(支持AS7)

    openshift 部署 在过去的几年中,我越来越多地听说过"云"服务. 最初,我并不是很想尝试一下. 但是几个月后(一年?),我决定看看这是怎么回事. 我从事Java EE开发已 ...

  9. 扩展Java EE应用程序的基础

    老实说,"可扩展性"是一个详尽的主题,并且通常没有被很好地理解. 通常,它被假定与高可用性相同. 我已经看到新手程序员和"经验丰富"的建筑师都建议将" ...

最新文章

  1. 一文详解缺陷检测相关算法!
  2. 韩磊老师与C#编程风格
  3. 微信公众号开发Django-网页授权
  4. Java黑皮书课后题第11章:11.1(Triangle类)设计一个名为Triangle的类来继承GeometricObject类。该类包括:
  5. oracle如何创建视图
  6. 给定随机数列求第k大的数字
  7. 【DFS + 记忆化递归 + DP】LeetCode 91. Decode Ways
  8. Mac便笺基本操作|便笺使用太鸡肋?那是你不知道这几个快捷键!
  9. python字典统计字母出现次数_第三篇 python运用字典统计字符串中字母出现的次数...
  10. Jmeter压力测试实战
  11. 面试题---jmeter
  12. 基于无线传感器网络LEACH算法的改进
  13. rabbitmq新增用户
  14. LibreOJ #6198.谢特 后缀数组+并查集+trie启发式合并
  15. 2020年拼多多数据分析一面
  16. C++计算单利与复利
  17. 公众号显示IP归属地,有多少人会现出原形?
  18. win11无法打开.bat文件、打开.bat文件闪退解决方案,星露谷smapi mod安装时,.bat安装文件一闪而过
  19. 新手入坑:strapi官网教程的简单示例学习
  20. 2020-08-21

热门文章

  1. JVM-对象的存活与死亡
  2. SpringBoot整合Shiro实现登录认证和授权CHCache
  3. java 取随机正整数_Java获取随机数
  4. vue父子组件生命周期顺序_vue父子组件生命周期执行顺序
  5. html5中 save方法,如何HTML5画布另存为窗口8 Metro应用中的图像文件?(How to save html5 c...
  6. java socket实现简单即时通讯
  7. 回归模型和分类模型的区别
  8. 常见 Java 字节码 指令 助记符
  9. 微信小程序的setData
  10. java oca_OCA第6部分中的Java难题