`
zhangb310
  • 浏览: 64053 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

log4j输出多个自定义日志文件、log4j 多进程不同日志文件

    博客分类:
  • java
阅读更多
最近在用多个线程走多个任务,但是日志用一个文件总有的线程输出不了。
其他博客找的解决方法:
log4j的强大功能无可置疑,但实际应用中免不了遇到某个功能需要输出独立的日志文件的情况,怎样才能把所需的内容从原有日志中分离,形成单独的日志文件呢?其实只要在现有的log4j基础上稍加配置即可轻松实现这一功能。
1)先看一个常见的log4j.properties文件,它是在控制台和daily.log文件中记录日志:
log4j.rootLogger=error,dailyLog,stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
log4j.appender.dailyLog=org.apache.log4j.DailyRollingFileAppender
log4j.appender.dailyLog.File=../logs/daily.log
log4j.appender.dailyLog.Append=true
log4j.appender.dailyLog.Threshold=ERROR
log4j.appender.dailyLog.DatePattern='.'yyyy-MM-dd
log4j.appender.dailyLog.layout=org.apache.log4j.PatternLayout
log4j.appender.dailyLog.layout.ConversionPattern=%5p:%d - %m%n

2)如果想对不同的功能模块输出不同的文件,怎么操作?
如:
用户基础信息模块路径为:com.isoft.visa.baseinf
它下面有个类:com.isoft.visa.baseinf.service.impl.UserInfo
private Log log = LogFactory.getLog(UserInfo.class);
然后在log4j.properties中加入:
log4j.logger.com.isoft.visa.baseinf=info,userLog,stdout
log4j.appender.userLog=org.apache.log4j.FileAppender
log4j.appender.userLog.File=../logs/userinfo.log
log4j.appender.userLog.Append=true
log4j.appender.userLog.Threshold=info
log4j.appender.userLog.layout=org.apache.log4j.PatternLayout
log4j.appender.userLog.layout.ConversionPattern==%d %p [%c] - %m%n
注:也就是让com.isoft.visa.baseinf模块下所有的logger使用log4j.appender.userLog所做的配置。

3)自定义“别名”的使用,相当于2的变种。
同上模块:
private Log log = LogFactory.getLog("userInfoLog");
然后在log4j.properties中加入:
log4j.logger.userInfoLog=info,userLog,stdout
log4j.appender.userLog=org.apache.log4j.FileAppender
log4j.appender.userLog.File=../logs/userinfo.log
log4j.appender.userLog.Append=true
log4j.appender.userLog.Threshold=info
log4j.appender.userLog.layout=org.apache.log4j.PatternLayout
log4j.appender.userLog.layout.ConversionPattern==%d %p [%c] - %m%n
注:也就是在用logger时给它一个自定义的名字(如这里的"userInfoLog"),然后在log4j.properties中做出相应配置即可。,在这种模式下,即使在同一个类中也能定义多个不同输出的log.
在类中调用代码如下:
private Log loggerError = LogFactory.getLog("userInfoLogError");
private Log loggerInfo = LogFactory.getLog("userInfoLogInfo");

4)自定义的日志默认是同时输出到log4j.rootLogger所配置的日志中的,如何能只让它们输出到自己指定的日志中呢?别急,这里有个开关:
  log4j.additivity.userInfoLog = false
 它用来设置是否同时输出到log4j.rootLogger所配置的日志中,设为false就不会输出到其它地方啦!注意这里的"userInfoLog"是你在程序中给logger起的那个自定义的名字!
  如果你说,我只是不想同时输出这个日志到log4j.rootLogger所配置的logfile中,stdout里我还想同时输出呢!那也好办,如:
  log4j.logger.userInfoLog=DEBUG, userLog, stdout

分享到:
评论

相关推荐

    LOG4CPP多个日志文件

    在“LOG4CPP 多个日志文件”的场景下,我们主要关注如何配置LOG4CPP以将日志输出到不同的文件,如DEBUG、NOTICE、WARNING、ERROR和CRITICAL级别分别对应不同的文件。 首先,理解LOG4CPP的基本架构至关重要。LOG4CPP...

    log4j日志使用说明

    通过使用Log4j,开发者可以非常灵活地控制日志信息的输出目的地(如控制台、文件、GUI组件、网络套接字服务器、NT事件记录器、UNIX Syslog守护进程等)、每条日志信息的格式以及日志级别(例如DEBUG、INFO、WARN、...

    SHELL日志功能(log4sh)

    `log4sh`不仅支持打印到标准输出(控制台),还能够写入文件,甚至通过网络发送到远程服务器,实现了日志的多渠道输出,方便集中管理和分析。 4. **日志滚动与备份** 针对日志文件可能过大的情况,`log4sh`提供了...

    log4j从入门到详解

    比如在log4j.properties文件中,可以设置日志级别的阈值、指定输出目的地的Appender以及自定义输出格式。利用Log4j提供的类和接口,开发者可以轻松地实现日志记录和管理,使得程序运行的监控和问题追踪变得更加方便...

    zlog---比log4c更牛的c语言日志库

    多线程和多进程写同一个日志的情况下,安全转档(转档就是把太大的日志重命名) 可以精确到微秒 如果一个程序默认只用一个分类输出,zlog提供了简单的调用包装dzlog MDC,一个log4j风格的键-值对的表,可以扩展用户...

    Linux C 实现日志打印功能

    总结来说,Linux环境下用C语言实现日志打印功能需要考虑日志级别、时间戳、文件操作、线程安全、格式化输出和输出位置等多个方面。通过精心设计和实现,我们可以构建出高效且易用的日志系统,为软件的稳定性和维护...

    log4j在ssh架构下的配置使用.docx

    Log4j 是 Apache 软件基金会开发的一个开源日志框架,它允许程序员控制日志信息的输出目标,包括控制台、文件、GUI组件、套接字服务器、NT事件记录器和UNIX Syslog守护进程等。Log4j 提供了丰富的日志级别,如 DEBUG...

    使用log4cplus实现的分目录存放日志服务器完整工程

    - `logs`目录:实际的日志文件将被输出到这里,可能包含多个子目录。 **4. 配置与使用** 在`log4cplus.properties`配置文件中,可以设置日志的输出格式、级别、过滤器以及最重要的,分目录策略。例如,可以通过以下...

    Android-可保持线程日志统一输出多线程不混乱

    3. **自定义日志库**:如压缩包中的`yyb-log-master`可能就是一个自定义的日志库,它可能提供了更高级的功能,如线程安全的输出、日志分类、过滤等功能,使得在多线程环境下能够更好地管理和查看日志。 4. **使用...

    c++记录日志到文件里面

    9. **日志格式化**:允许用户自定义日志的输出格式,比如是否包含线程ID、进程ID等信息。 10. **调试模式**:在调试模式下,可以输出更详细的日志,如堆栈跟踪信息,以便更好地定位问题。 在实现上述功能时,注意...

    跨平台c++日志类log

    - **多进程支持**:在多进程环境中,每个进程可以有自己的日志文件,防止混淆。 - **网络日志**:支持通过网络发送日志到集中式日志服务器,便于大规模部署的监控。 7. **使用示例** - 基本用法:`Log::...

    log4j的应用配置[文].pdf

    每个Logger可以附加多个Appender,这意味着日志消息可以同时被发送到不同的目的地。例如,将一个Console Appender添加到根Logger可以确保所有日志都被打印到控制台,而将一个File Appender附加到特定的Logger C,...

    apache apr & log4

    Log4j具有模块化的设计,可以适应各种日志需求,包括不同级别的日志(如DEBUG、INFO、WARN、ERROR、FATAL),以及通过配置文件来定制输出格式和目的地。此外,Log4j还支持自定义布局和过滤器,以满足特定的应用场景...

    log打印代码,直接打印log到文件中。非常灵活好用

    也可以自定义日志格式,以适应特定的需求,如添加线程ID、进程ID等信息。 在实际项目中,可以封装这个日志配置为一个函数或者类,以便在各个模块中方便地使用。例如,可以创建一个`init_logging`函数,接受日志...

    log4erl-0.9.0

    2. **可定制的输出格式**:log4erl支持自定义日志输出格式,可以设置日期时间、模块名、函数名、线程ID等信息的显示方式,以满足不同场景的需求。 3. **日志目标的多样性**:除了常见的控制台输出,log4erl还支持将...

    C# 打开并附加到日志文件

    使用第三方库可以简化这些复杂性,提供更高级的功能,如自定义日志格式、配置文件、日志目标(如数据库、电子邮件、云存储)等。例如,log4net提供了灵活的日志配置和强大的日志管理功能。 总的来说,C#中打开并...

    日志文件类

    - **格式化输出**:允许用户自定义日志输出的格式,如添加时间戳、线程ID、进程ID等信息。 - **日志级别控制**:提供设置和过滤日志级别的功能,便于在不同场景下调整日志的详细程度。 - **日志归档**:将旧日志压缩...

    Go-log一个基于Golang的日志模块

    标准库log通常将日志输出到控制台,而Go-log可能支持将日志输出到多个目的地,比如文件、网络、甚至日志服务(如Logstash)。此外,可能还可以配置输出过滤,例如只将`Error`及以上级别的日志写入文件,而将所有...

Global site tag (gtag.js) - Google Analytics