博客
关于我
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/

    你可能感兴趣的文章
    Regular Expression Notes
    查看>>
    PHP $FILES error码对应错误信息
    查看>>
    PHP $_FILES函数详解
    查看>>
    php & 和 & (主要是url 问题)
    查看>>
    php -- 魔术方法 之 判断属性是否存在或为空:__isset()
    查看>>
    php -- 魔术方法 之 获取属性:__get()
    查看>>
    php -树-二叉树的实现
    查看>>
    PHP -算法-二路归并
    查看>>
    php 2条不一样 的json数据 怎么放在一个json里面_如果你是PHP开发者,请务必了解一下Composer...
    查看>>
    php 360 不记住密码,JavaScript_多种方法实现360浏览器下禁止自动填写用户名密码,目前开发一个项目遇到一个很 - phpStudy...
    查看>>
    regExp的match、exec、test区别
    查看>>
    php 404 自定义,APACHE 自定义404错误页面设置方法
    查看>>
    PHP 5.3.0以上推荐使用mysqlnd驱动
    查看>>
    php aes sha1解密,PHP AES加密/解密
    查看>>
    php CI框架单个file表单多文件上传例子
    查看>>
    reflow和repaint引发的性能问题
    查看>>
    php csv 导出
    查看>>
    php curl 实例+详解
    查看>>
    php curl_init函数用法(http://blog.sina.com.cn/s/blog_640738130100tsig.html)
    查看>>
    php curl_multi批量发送http请求
    查看>>