如何实现按需要,使某个功能的日志单独输出到指定的日志文件呢?
其实只要在现有的log4j基础上稍加配置即可实现这一功能。
1、常用配置如下:
#Level
log4j.rootLogger = debug,CON,F,E
###ConsoleAppender###
log4j.appender.CON = org.apache.log4j.ConsoleAppender
log4j.appender.CON.layout = org.apache.log4j.PatternLayout
log4j.appender.CON.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss} %5p %c{5}:%L - %m%n
###DailyRollingFileAppender###
log4j.appender.F = org.apache.log4j.DailyRollingFileAppender
log4j.appender.F.File = /export/Logs/all.log
log4j.appender.F.DatePattern = '.'yyyy-MM-dd
log4j.appender.F.Append = true
log4j.appender.F.layout = org.apache.log4j.PatternLayout
log4j.appender.F.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss} %5p %c{5}:%L - %m%n
###DailyRollingFileAppender###
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File = /export/Logs/error.log
log4j.appender.E.DatePattern = '.'yyyy-MM-dd
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss} %5p %c{5}:%L - %m%n
2、如果需要把job的日志输出到指定的文件中,只要追加如下内容即可,
log4j.logger.job=INFO,job
log4j.additivity.job = false #该配置就是让job的日志只输出到自己指定的日志文件中
log4j.appender.job = org.apache.log4j.DailyRollingFileAppender
log4j.appender.job.File = /export/Logs/job.log
log4j.appender.job.DatePattern = '.'yyyy-MM-dd
log4j.appender.job.Append = true
log4j.appender.job.layout = org.apache.log4j.PatternLayout
log4j.appender.job.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss} %5p %c{5}:%L - %m%n
还有一个问题,就是自定义的日志默认是同时输出到log4j.rootLogger所配置的日志中的,所以job不要出现在
log4j.rootLogger = debug,CON,F,E中,否则其他的日志内容也会输出到该job的日志中
3、java代码如下:
public class ClearRubbishFileRunJob {
[color=darkred]private Logger logger = LoggerFactory.getLogger("job");[/color]
@Autowired
private SqlSessionTemplate session;
public void work() throws Exception {
logger.warn("--ClearRubbishFileRunJob开始执行--");
// 1、删除3天前的临时文件
try {
SimpleDateFormat sp =new SimpleDateFormat("yyyyMMdd");
Calendar s = Calendar.getInstance();
s.add(Calendar.DATE, -3);
Date d2 = s.getTime();
String bef2Date = sp.format(d2);
// 临时文件目录
String filePath = FilePathConstant.ROOT_PATH;
File fileDir = new File(filePath);
if (fileDir.exists() && fileDir.isDirectory()) {
for (File fd : fileDir.listFiles()) {
String dirName = fd.getName();
if (bef2Date.compareTo(dirName) >= 0) {
FileUtil.deleteFileAndChildren(fd);
}
}
}
} catch (Exception e) {
logger.error("删除临时文件出现异常,信息如下:" + e.getMessage());
e.printStackTrace();
}
logger.warn("--ClearRubbishFileRunJob执行结束--");
}
}
工具类:
/**
* 文件操作工具类
*
* @date 20150205
* */
public class FileUtil implements Serializable {
private static final long serialVersionUID = 1L;
private FileUtil() {
}
/**
* 删除文件,单个文件。如果是文件夹并且包含子文件的情况下删除失败。需调用deleteFileAndChildren(File file)
*
* @date 20150205
* */
public static void deleteFile(File file) {
if (file == null) {
return;
}
if (file.exists()) {
file.delete();
}
}
/**
* 删除文件及其所有子文件
*
* @date 20150205
* */
public static void deleteFileAndChildren(File file) {
if (file == null) {
return;
}
// 判断文件是否存在
if (file.exists()) {
// 判断是不是文件夹
if (file.isDirectory()) {
File[] children = file.listFiles();
if (children != null) {
for (File child : children) {
deleteFileAndChildren(child);
}
}
file.delete();
} else {
// 非文件夹删除
file.delete();
}
}
}
/**
* 文件拷贝
* */
public static void copy(File srcFile, File dstFile) throws Exception {
if (srcFile == null || dstFile == null) {
return;
}
if (!srcFile.exists()) {
return;
}
dstFile.getParentFile().mkdirs();
InputStream in = new FileInputStream(srcFile);
OutputStream out = new FileOutputStream(dstFile);
byte[] buf = new byte[1024];
int len;
while ((len = in.read(buf)) > 0) {
out.write(buf, 0, len);
}
in.close();
out.close();
}
}
分享到:
相关推荐
文件中内容包括模块中某个类单独输出到一个日志文件中、模块中某个package单独输出到一个日志文件中、同一模块不同package输出到一个日志文件中三种情况下log4j.properties配置项配置事例、Java类中代码如何一致编写...
在“log4j按功能保存日志”的场景中,我们通常会利用Log4j的配置灵活性,将不同功能的日志分别写入不同的文件,以便于后期分析、排查问题和监控系统状态。 1. **Log4j基本概念** - **Logger**: 日志记录器,是Log4...
在Log4j中,控制日志级别主要通过配置文件`log4j.properties`或`log4j.xml`来实现。在提供的压缩包`log4j-demo`中,我们可以找到这样的配置文件。例如,如果我们想要控制特定类`com.example.MyClass`的日志级别为...
本文将深入探讨如何利用`log4j`实现按照日期每天写入不同日志文件的功能,以及涉及到的相关知识点。 首先,我们要理解`log4j.properties`配置文件的作用。它是`log4j`的配置中心,通过这个文件我们可以定制日志输出...
这篇博客"Log4j 把不同包的日志打印到不同位置"可能详细解释了如何利用Log4j配置来实现特定包的日志定向输出,以便于管理和分析来自不同模块的日志信息。 在Java应用中,我们常常会遇到多个模块或者不同包的类同时...
在“LOG4CPP 多个日志文件”的场景下,我们主要关注如何配置LOG4CPP以将日志输出到不同的文件,如DEBUG、NOTICE、WARNING、ERROR和CRITICAL级别分别对应不同的文件。 首先,理解LOG4CPP的基本架构至关重要。LOG4CPP...
Log4j提供了多种Appender实现,如ConsoleAppender(控制台输出)、FileAppender(文件输出)和SMTPAppender(发送邮件)等。 3. **Layout(布局)**:用于格式化日志信息,如PatternLayout(自定义模式)、...
**Log4j日志框架详解** Log4j是Apache组织开发的一个开源的日志记录框架,广泛应用于Java应用程序中。作为一款强大的日志处理工具,它提供了灵活的日志配置,允许开发者根据需求调整日志级别、格式和输出位置,极大...
Log4j是Apache组织提供的一款广泛使用的Java日志框架,因其高效、灵活和强大的功能而备受青睐。 **Log4j简介** Log4j是一个开源的日志记录库,主要设计用于Java应用程序。它允许程序员以可配置的方式控制日志信息...
- 通过`log4j.category`或`log4j.logger`为特定类或包设置单独的日志级别。 通过以上步骤,你可以在Tomcat 8.0.30中成功配置Log4j,实现日志按天分割和保存,从而更好地管理和分析服务器运行时的日志数据。这个...
可以设置全局或特定日志器的级别,控制不同级别的日志输出。 #### 格式化 `spdlog`允许自定义日志格式。例如,你可以设置日志包含时间戳、线程ID、日志级别等信息: ```cpp auto logger = spdlog::daily_file_...
3. **日志文件**:通常,日志会被写入到特定的日志文件中,使用`fopen()`打开文件,`fprintf()`将日志信息写入,然后`fclose()`关闭文件。为了防止日志文件过大,可以设置定期归档或滚动策略。 4. **同步与异步**:...
### 使用Log4j详解 #### 一、Log4j简介 ...Log4j不仅提供了强大的日志管理功能,还具有高度可定制化的特性,使得开发者可以根据实际需求灵活调整日志行为。这对于提升软件的维护性和调试效率具有重要意义。
- **`log4j.appender.log_file.layout.ConversionPattern`**:定义了文件输出的格式。 #### (三)不同包或类的日志级别设置 对于不同的包或类,可以设置不同的日志级别,以便更精细地控制日志的输出。 **配置...
总结而言,无论是通过定制Appender还是利用多文件Appender策略,都能有效地实现Log4j按级别单独打印日志的功能。这两种方法各有优势,前者更侧重于对现有Appender行为的精确控制,后者则提供了更为灵活的日志管理和...
4. 运行程序,你会看到控制台输出和指定文件中保存的日志信息。 二、Log4j基本使用方法 Log4j主要由以下三个组件构成: 1. **日志优先级**:Log4j支持ERROR, WARN, INFO, DEBUG和TRACE等不同优先级的日志级别,你...
本文将详细讲解如何利用Log4j将不同包的日志输出到不同的文件,以实现日志的分类管理,提高日志的可读性和实用性。 首先,我们需要理解Log4j配置的核心部分——`log4j.properties`文件。这个文件决定了日志的级别、...
log4j-1.2.11.jar就是一个包含所有log4j库组件的JAR文件,便于开发者在项目中直接引用,而无需管理各个单独的类文件。 Log4j的核心概念包括以下几个部分: 1. **Logger**: 这是日志记录的起点,开发者通过创建...
通过上述配置,我们可以非常方便地实现Log4j对于不同类别的日志进行分文件输出的功能。这对于日志管理和分析来说是非常有用的,特别是在大型项目中,能够有效地帮助开发者快速定位问题并进行调试。希望本文能够帮助...
- **Logger**:日志记录器,是Log4j的核心,负责接收日志消息并将其发送到指定的Appender。 - **Appender**:输出目的地,定义了日志信息如何被记录和输出,如控制台、文件、数据库等。 - **Layout**:布局模式,...