`
zhangb310
  • 浏览: 63878 次
  • 性别: 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

分享到:
评论

相关推荐

    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`及以上级别的日志写入文件,而将所有...

    日志文件解析MySQL版

    通常,我们会使用如`log4j`、`logback`这样的日志框架来生成日志,而解析这些日志文件则需要自定义的解析器。解析器通常会通过正则表达式或者自定义的逻辑来识别日志文件中的关键信息,如时间戳、级别、类名、方法名...

Global site tag (gtag.js) - Google Analytics