博客
关于我
log4j1/log4j2中category的配置以及log的输出位置(windows和linux通用的log输出位置)...
阅读量:800 次
发布时间:2023-02-06

本文共 3304 字,大约阅读时间需要 11 分钟。

一、场景和需求

我们有三个独立的项目模块,分别负责不同的功能:基础服务、存储服务和搜索服务。为了方便管理和追踪,我们需要统一记录所有日志到一个全局日志文件中,同时还需要为搜索模块单独设置日志文件。

1.1 日志文件结构

  • full.log:记录所有模块的日志信息
  • solr.log:专门记录搜索模块下的日志信息
  • 存储服务相关日志:位于com.chuanliu.platform.activity.persist目录下
  • 基础服务相关日志:位于com.chuanliu.platform.activity目录下
  • 搜索服务相关日志:位于com.chuanliu.platform.activity.solr目录下

1.2 环境适配

为了适配不同操作系统的目录结构,我们需要根据环境设置不同的日志存储位置。例如:

  • 开发环境C:/logs
  • 测试环境/usr/local/var/logs
  • 生产环境/usr/local/var/logs

二、日志配置方案

我们可以使用log4j来实现日志记录功能,以下是推荐的配置方式:

log4j.rootLogger = infolog4j.debug = falselog4j.category.com.chuanliu.platform.activity = info, full, stdoutlog4j.additivity.com.chuanliu.platform.activity.platform.activity = falselog4j.category.com.chuanliu.platform.activity.solr = info, solrlog4j.additivity.com.chuanliu.platform.activity.platform.activity.solr = false

2.1 日志输出设置

log4j.appender.full = org.apache.log4j.DailyRollingFileAppenderlog4j.appender.full.File = ${LogFile.Location}/full.loglog4j.appender.full.DatePattern = '.'yyyy-MM-ddlog4j.appender.full.layout = org.apache.log4j.PatternLayoutlog4j.appender.full.layout.conversionPattern = %d [%t] %-5p %c{1} - %m%nlog4j.appender.full.ImmediateFlush = truelog4j.appender.full.append = truelog4j.appender.solr = org.apache.log4j.DailyRollingFileAppenderlog4j.appender.solr.File = ${LogFile.Location}/solr.loglog4j.appender.solr.DatePattern = '.'yyyy-MM-ddlog4j.appender.solr.layout = org.apache.log4j.PatternLayoutlog4j.appender.solr.layout.conversionPattern = %d [%t] %-5p %c{1} - %m%nlog4j.appender.solr.ImmediateFlush = truelog4j.appender.solr.append = truelog4j.appender.stdout = org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.layout = org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern = [%d][%p]%t: %m%n# MyBatis日志等级设置log4j.logger.mybatis = TRACElog4j.logger.springframework.web = DEBUG

2.2 日志分类

通过上述配置,我们可以确保:

  • 所有com.chuanliu.platform.activity包下的日志都记录到full.log
  • com.chuanliu.platform.activity.solr包下的日志单独记录到solr.log
  • 其他模块的日志也会被正确收集和记录

2.3 环境自定义

为了适配不同操作系统,我们可以通过配置文件来设置日志存储路径。例如:

  • 在开发环境中,定义LogFile.Location=C:/logs
  • 在测试环境中,定义LogFile.Location=/usr/local/var/logs
  • 在生产环境中,定义LogFile.Location=/usr/local/var/logs

2.4 跨平台适配

在实际应用中,我们需要确保日志路径在不同操作系统下都能正确解析:

  • Linux:直接使用/usr/local/var/logs路径
  • Windows:建议使用C:/logsC:/var/logs路径
    • 注意:在Windows中,C:/C:\是不同的路径
    • 如果使用C:/格式,确保文件系统支持这种写法

2.5 部署实践

  • Eclipse环境:在项目根目录下创建logs目录,配置LogFile.Location=C:/logs
  • Tomcat环境:在conf目录下添加logging.properties文件,配置LogFile.Location=/usr/local/var/logs
    log4j.rootLogger = INFOlog4j.appender.full=DailyRollingFileAppenderlog4j.appender.full.File=${LogFile.Location}/full.log...

2.6 日志重载检测

在实际应用中,如果需要动态重载日志配置文件,可以使用log4j-properties.dtd格式:

LogFile.Location
${env:LogFile.Location}
${LogFile.Location}/full.log
...
${LogFile.Location}/solr.log
...

2.7 日志查看

  • Linux:使用tail -f /usr/local/var/logs/full.log查看实时日志
  • Windows:使用type C:\logs\full.log查看实时日志
  • IDE环境:在Eclipse中设置日志文件的绝对路径,直接打开日志文件查看

2.8 常见问题

  • 日志文件夹不存在

    • 在部署前,确保日志存储路径存在
    • 使用mkdir -p /usr/local/var/logs创建必要的目录
  • 日志重复输出

    • 检查additivity属性,确保com.chuanliu.platform.activitycom.chuanliu.platform.activity.solradditivity属性都设置为false
  • 环境变量配置

    • 如果使用环境变量,确保在相关配置文件中正确引用
    • 比如在logging.properties中设置LogFile.Location=${env:LogFile.Location}
  • 通过以上配置和实践,我们可以轻松实现多模块日志统一管理和跨平台适配,确保日志记录的准确性和可追溯性。

    转载地址:http://udufk.baihongyu.com/

    你可能感兴趣的文章
    mysql 敲错命令 想取消怎么办?
    查看>>
    Mysql 整形列的字节与存储范围
    查看>>
    mysql 断电数据损坏,无法启动
    查看>>
    MySQL 日期时间类型的选择
    查看>>
    Mysql 时间操作(当天,昨天,7天,30天,半年,全年,季度)
    查看>>
    MySQL 是如何加锁的?
    查看>>
    MySQL 是怎样运行的 - InnoDB数据页结构
    查看>>
    mysql 更新子表_mysql 在update中实现子查询的方式
    查看>>
    MySQL 有什么优点?
    查看>>
    mysql 权限整理记录
    查看>>
    mysql 权限登录问题:ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: YES)
    查看>>
    MYSQL 查看最大连接数和修改最大连接数
    查看>>
    MySQL 查看有哪些表
    查看>>
    mysql 查看锁_阿里/美团/字节面试官必问的Mysql锁机制,你真的明白吗
    查看>>
    MySql 查询以逗号分隔的字符串的方法(正则)
    查看>>
    MySQL 查询优化:提速查询效率的13大秘籍(避免使用SELECT 、分页查询的优化、合理使用连接、子查询的优化)(上)
    查看>>
    mysql 查询数据库所有表的字段信息
    查看>>
    【Java基础】什么是面向对象?
    查看>>
    mysql 查询,正数降序排序,负数升序排序
    查看>>
    MySQL 树形结构 根据指定节点 获取其下属的所有子节点(包含路径上的枝干节点和叶子节点)...
    查看>>