之前在帮TCL运维项目时,因某些原因,决定单就经销商相关业务中摒弃经典的log4j日志,改为每日自定义生成并写入相关日志,我遂写了一个util,代码如下:p.s.实现的思路很简单,仅为每次需要记录时,调取util中方法,若当日的日志文件不存在,则创建,存在,则追加log内容。

package com.aebiz.b2b2c.baseframework.utils;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.RandomAccessFile; import com.aebiz.b2b2c.dealer.login.vo.BCustomerInfoModel;
import com.aebiz.b2b2c.dealer.login.vo.ChannelUserModel;
import com.atomikos.util.DateHelper;
import com.mysql.fabric.xmlrpc.base.Data;
//write by HDF WHEN 2016.06.28 14:20
public class DealerlogUtils { public static void appendMethodA(File f, String content) {
try {
// 打开一个随机访问文件流,按读写方式
RandomAccessFile randomFile = new RandomAccessFile(f, "rw");
// 文件长度,字节数
long fileLength = randomFile.length();
//将写文件指针移到文件尾。
randomFile.seek(fileLength);
randomFile.writeBytes(content);
randomFile.close();
} catch (IOException e) {
e.printStackTrace();
}
} public static void appendMethodB(File f, String content) {
try {
//打开一个写文件器,构造函数中的第二个参数true表示以追加形式写文件
FileWriter writer = new FileWriter(f, true);
writer.write(content+"\n");
// fw.flush();
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
} /**
* 记录经销商操作日志
* @param dealerlUser
* @param customreInfo
* @param menuUrl
* @param menuName
* @param terminalType
*/
public static void dealerLogRecord( ChannelUserModel dealerlUser, BCustomerInfoModel customreInfo,String menuUrl, String menuName, String terminalType) {
if(dealerlUser != null && customreInfo != null){
StringBuffer content = new StringBuffer();
content.append("opeTime:").append(DateFormatHelper.getNowTimeStr()).append(",loginName:")
.append(dealerlUser.getLoginName()).append(",bcustomerNo:").append(dealerlUser.getBcustomerNo())
.append(",bcustomerName:").append(customreInfo.getCustomerName()).append(",companyName:")
.append(customreInfo.getBranchCompanyName()).append(",orgName:").append(customreInfo.getOrgName())
.append(",opeName:").append(customreInfo.getSalesmanName()).append(",url:").append(menuUrl)
.append(",menuName:").append(menuName).append(",terminalType:").append(terminalType);
dealerLogRecord(content.toString());
}
} public static void dealerLogRecord( String content) { try {
// 根据系统的实际情况选择目录分隔符(windows下是,linux下是/) //此为相对路径,为:在tomcat下面创建日志文件,例如:dealerlog/dealerCZ_logger.log.2016-06-28.log
//String separator = File.separator;
//String directory = "dealerlog" + separator; //绝对路径,根目录下的/opt/logs/dealer
String directory = "/opt/logs/dealer"; // 以下这句的效果等同于上面两句,windows下正斜杠/和反斜杠都是可以的
// linux下只认正斜杠,为了保证跨平台性,不建议使用反斜杠(在java程序中是转义字符,用\来表示反斜杠)
// String directory = "myDir1/myDir2"; // 获取当前时间
String currentDate = DateFormatHelper.getNowTimeStr();
System.out.println(currentDate);
String nowdate = currentDate.substring(0, 10);
System.out.println(nowdate); String fileName = "dealerCZ_logger.log." + nowdate + ".log";
// 在内存中创建一个文件对象,注意:此时还没有在硬盘对应目录下创建实实在在的文件
File f = new File(directory, fileName);
if (f.exists()) {
// 文件已经存在,输出文件的相关信息
System.out.println(f.getAbsolutePath());
System.out.println(f.getName());
System.out.println(f.length()); } else {
// 先创建文件所在的目录
f.getParentFile().mkdirs();
f.createNewFile(); } String contentNew=currentDate+" - "+content;
appendMethodB(f,contentNew); } catch (Exception e) {
System.out.println("创建新文件时出现了错误。。。");
e.printStackTrace();
}
} public static void main(String[] args) { try { // 根据系统的实际情况选择目录分隔符(windows下是,linux下是/) //此为相对路径,为:在tomcat下面创建日志文件,例如:dealerlog/dealerCZ_logger.log.2016-06-28.log
//String separator = File.separator;
//String directory = "dealerlog" + separator; //绝对路径,根目录下的/opt/logs/dealer
String directory = "/opt/logs/dealer"; // 以下这句的效果等同于上面两句,windows下正斜杠/和反斜杠都是可以的
// linux下只认正斜杠,为了保证跨平台性,不建议使用反斜杠(在java程序中是转义字符,用\来表示反斜杠)
// String directory = "myDir1/myDir2"; // 获取当前时间
String currentDate = DateFormatHelper.getNowTimeStr();
System.out.println(currentDate);
String nowdate = currentDate.substring(0, 10);
System.out.println(nowdate); String fileName = "dealerCZ_logger.log." + nowdate + ".log";
// 在内存中创建一个文件对象,注意:此时还没有在硬盘对应目录下创建实实在在的文件
File f = new File(directory, fileName);
if (f.exists()) {
// 文件已经存在,输出文件的相关信息
System.out.println(f.getAbsolutePath());
System.out.println(f.getName());
System.out.println(f.length()); } else {
// 先创建文件所在的目录
f.getParentFile().mkdirs();
f.createNewFile(); } String str = "Test by HDF!";
String contentq=currentDate+" - "+str;
appendMethodB(f,contentq);
//appendMethodA(f,str); } catch (Exception e) {
System.out.println("创建新文件时出现了错误。。。");
e.printStackTrace();
}
} }

小玩意--自定义log记录的更多相关文章

  1. Laravel Exception结合自定义Log服务的使用

    Laravel Exception结合自定义Log服务的使用 第一部分:laravel关于错误和异常的部分源码 第二部分:自定义异常的使用(结合serviceprovider monolog elas ...

  2. Swift开发小技巧--自定义Log

    Swift中的自定义Log OC中有宏的定义,可以定义自己的Log,但是Swif中没有宏的定义,想要实现类似OC中的自定义Log,必须实现以下操作 1.在AppDelegate.swift文件中定义一 ...

  3. 第四十二篇、自定义Log打印

    1.在Xcode 8出来之后,需要我们去关闭多余的日志信息打印 2.在开发的过程中,打印调试日志是一项比不可少的工程,但是在iOS 10中NSLog打印日志被屏蔽了,就不得不使用自定义Log 3.去掉 ...

  4. Swift中自定义Log打印方法

    系统如何调用super方法 系统默认只会在构造函数中,自动调用super.init()方法,而且是在所写方法的尾部进行调用. 在其他函数中,如何需要调用父类的默认实现,都需要手动去实现. 如果在构造函 ...

  5. goaccess iis w3c 自定义log 格式参考

    goaccess 支持强大的自定义log 格式,比如我们需要分析iis w3c 格式日志 参考iis w3c 字段 date time s-ip cs-method cs-uri-stem cs-ur ...

  6. C# 程序A发送Log记录给程序B,程序B处理和分析Log记录

    C# 程序A发送Log记录给程序B,程序B处理和分析Log记录 关键字:C# ;Log记录 ;在线Log记录;Socket:httplistener 一.常用场景 1. APP开发,在真机或者虚拟机上 ...

  7. 自定义Log实现条件编译

    在项目pch中添加以下代码,其中DEBUG为Xcode项目自带的宏,存在时表示当前为调试状态,否则为发布状态.故当在发布状态时,通过自定义TestLog所使用的NSLog调试信息,都会被预编译替换为空 ...

  8. IIS 高并发导致log记录不完全

    项目测试性能过程中,对于高并发测试过程中发现log记录缺失一部分,经过调查,找到了原因是因为IIS连接数的限制,经过修改连接数,成功完成.设置如下: “点击网站”->“右击切换到功能视图”-&g ...

  9. xcode中自定义log打印

    打印内容包括 在哪个文件中 ? 在哪个方法中? 将要执行什么操作?   // 此打印实现前提: // 1.在.pch文件中实现自定义log打印方法,log名换为LCLog // 2.定义一个宏obje ...

随机推荐

  1. 10款Mac上程序员装机必备的开发工具推荐和下载

    10款Mac上程序员装机必备的开发工具推荐和下载 使用Mac的用户主要有两大类:设计师和程序员,为各位程序员童鞋推荐10个Mac上非常棒的开发工具和辅助工具,分享软件专题[10款Mac上程序员装机必备 ...

  2. request.getSession()几种获取情况之间的差异

    一.三种情况如下 HttpSession session = request.getSession(); HttpSession session = request.getSession(true); ...

  3. Tensorflow object detection API 搭建物体识别模型(四)

    四.模型测试 1)下载文件 在已经阅读并且实践过前3篇文章的情况下,读者会有一些文件夹.因为每个读者的实际操作不同,则文件夹中的内容不同.为了保持本篇文章的独立性,制作了可以独立运行的文件夹目标检测. ...

  4. JS_一些小方法总结

    1.js中onclick事件同时调用两个方法 用分号隔开即可,比如 <input type="button" onclick="a();b();" val ...

  5. js截取url地址后面的文件名

    let url = response.data.stuXscg[0].fj let num = url.lastIndexOf('/')+1 let name = url.substring(num) ...

  6. JAVA-String,StringBuilder,StringBuffer例子(基础必备)

    package com.net.xinfang.reflect; import java.io.UnsupportedEncodingException; /** * String不属于8种基本数据类 ...

  7. 使用List和Map遇到得空指针异常

    如题,经常遇到同类得问题,因为集合在使用之前必须先new一个对象. private List<Orderdatil> orderdatilList=new ArrayList<Ord ...

  8. STL优先队列

    #include<cstdio> #include<iostream> #include<algorithm> #include<queue> usin ...

  9. windows安装mysql示例

    1. 下载mysql安装包,如: mysql-5.6.34-winx64.zip2. 解压安装包到指定目录,如:D盘,即:D:\mysql-5.6.34-winx643. 配置 cd D:\mysql ...

  10. Hadoop生态组件的WebUI地址

    ================================Impala 相关================================ Impala的常用端口: jdbc/ODBC 端口: ...