之前在帮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. MFC调用halcon生成的cpp内容

    打开VS,文件——新建——项目——Visual C++——MFC——MFC应用程序,注意下图,其他默认.窗体1个Button.1个Picture Control [VS配置Halcon] 1.若hal ...

  2. Storm中重要对象的生命周期

    Spout方法调用顺势 declareOutputFields()(调用一次) open() (调用一次) activate() (调用一次) nextTuple() (循环调用 ) deactiva ...

  3. python操作execl学习笔记(一)

    本节只记录关于execl的读操作: execl 内容及格式 python3 #!/usr/bin/env python #-*- coding:utf-8 -*- import xlrd import ...

  4. 启动oracle的步骤

    启动oracle的步骤 Linux下启动oracle分为以下两步: 1.1.启动lsnrctl监听. 1.2.启动数据库实例. 启动oracle监听 首先登陆服务器,切换到oracle用户. [adm ...

  5. Systemd 添加自定义服务(开机自启动)

    Systemd 简介:https://fedoraproject.org/wiki/Systemd/zh-cn 一.service unit 常用命令,以 mysql 服务为例 # 开机启动 syst ...

  6. vscode 编辑markdown文件

    关于换行问题 在vscode中编写Markdown文件时,会遇到明明按回车换行了但是预览的时候却没有换行的情况,这时在需要换行的地方多按两次空格键,就会换行 预览markdown文件 编辑器右上角有个 ...

  7. Mysql:索引实战

    MySQL主要提供2种方式的索引:B-Tree索引,Hash索引 B树索引具有范围查找和前缀查找的能力,对于有N节点的B树,检索一条记录的复杂度为O(LogN).相当于二分查找. 哈希索引只能做等于查 ...

  8. mysql 批处理命令执行多个sql脚本

    方法1 若有SQL脚本a.sql, b.sql, 其目录在f盘根目录下, 则可再写一个SQL脚本c.sql(假设其目录也在f盘根目录下, 也可以在其他路径下)如下: source f:/a.sql; ...

  9. 使用sort函数进行排序

    介绍 C++的一个重要组成部分STL(Standard Template Library),即标准模板库,是一些高级数据结构和算法的集合:高级数据结构(容器)主要包括list.set.vector.m ...

  10. Javaweb学习笔记——(十五)—————— sql复习

    sql复习 数据库管理系统(DBMS)的概述 1.什么是DBMS:数据的仓库 *方便查询 *可存储的数据量大 *保证数据的完整.一致 *安全可靠 2.DBMS的发展:今天主流数据库为关系型数据库管理系 ...