Skip to content

Commit

Permalink
init project
Browse files Browse the repository at this point in the history
  • Loading branch information
supervate committed Apr 28, 2024
1 parent 988da6c commit 2642201
Show file tree
Hide file tree
Showing 31 changed files with 2,066 additions and 19 deletions.
34 changes: 34 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
# This workflow will build a Java project with Maven, and cache/restore any dependencies to improve the workflow execution time
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-java-with-maven

# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.

name: Run Tests

on:
push:
branches: [ "*" ]
pull_request:
branches: [ "*" ]

jobs:
test:
strategy:
matrix:
os: [ macos-latest, ubuntu-latest, windows-latest ]
runs-on: ${{ matrix.os }}
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Java
uses: actions/setup-java@v4
with:
distribution: 'adopt'
java-version: '21'
cache: maven
- name: Run Tests
run: make test

49 changes: 30 additions & 19 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,24 +1,35 @@
# Compiled class file
*.class
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/

# Log file
*.log
### IntelliJ IDEA ###
.idea/
*.iws
*.iml
*.ipr

# BlueJ files
*.ctxt
### Eclipse ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache

# Mobile Tools for Java (J2ME)
.mtj.tmp/
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/

# Package Files #
*.jar
*.war
*.nar
*.ear
*.zip
*.tar.gz
*.rar
### VS Code ###
.vscode/

# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*
replay_pid*
### Mac OS ###
.DS_Store
7 changes: 7 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
.PHONY: test build

test:
@mvn test

build: test
@mvn package
53 changes: 53 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>vt.github</groupId>
<artifactId>V-Log</artifactId>
<version>1.0-SNAPSHOT</version>

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<junit.version>5.8.1</junit.version>
<maven-compiler.version>3.12.0</maven-compiler.version>
<compiler-release.version>8</compiler-release.version>
</properties>

<dependencies>
<!-- testing support -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>2.0.32</version>
<scope>test</scope>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven-compiler.version}</version>
<configuration>
<release>${compiler-release.version}</release>
<encoding>${file.encoding}</encoding>
</configuration>
</plugin>
</plugins>
</build>
</project>
62 changes: 62 additions & 0 deletions src/main/java/vt/suopo/vlog/DefaultLayout.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
package vt.suopo.vlog;

import vt.suopo.vlog.common.ThrowableUtils;
import vt.suopo.vlog.event.LogEvent;

import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Optional;

import static vt.suopo.vlog.common.LogConstants.*;


/**
* 默认日志格式化器
*
* @author suopovate
* @since 2024/04/27
* <p>
* All rights Reserved.
*/
public class DefaultLayout implements Layout<LogEvent> {

public static final String UN_DEFINE = "unDefine";

@Override
public String format(LogEvent event) {
if (event != null && event.getMessage() != null) {
Logger logger = event.getLogger();
StringBuilder sb = new StringBuilder();
appendItem(
Optional
.ofNullable(event.getEventTime())
.map(eventTime -> LocalDateTime.ofInstant(Instant.ofEpochMilli(event.getEventTime()), ZoneId.systemDefault()))
.map(LocalDateTime::toString)
.orElse(UN_DEFINE),
sb
);
appendItem(Optional.ofNullable(event.getThreadName()).orElse(UN_DEFINE), sb);
appendItem(Optional.ofNullable(event.getLevel()).map(Enum::name).orElse(UN_DEFINE), sb);
appendItem(Optional.ofNullable(logger).map(Logger::getName).orElse(UN_DEFINE), sb);
sb.append("-");
sb.append(SPACE);
sb.append(String.format(event.getMessage(), event.getArguments()));
if (event.getThrowable() != null) {
sb.append(System.lineSeparator());
sb.append(ThrowableUtils.throwableToStr(event.getThrowable()));
}
sb.append(System.lineSeparator());
return sb.toString();
}
return "";
}

private static void appendItem(String item, StringBuilder sb) {
sb.append(LEFT_MIDDLE_BRACKET);
sb.append(item);
sb.append(RIGHT_MIDDLE_BRACKET);
sb.append(SPACE);
}

}
13 changes: 13 additions & 0 deletions src/main/java/vt/suopo/vlog/Layout.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package vt.suopo.vlog;

/**
* 日志格式化器
*
* @author suopovate
* @since 2024/04/27
* <p>
* All rights Reserved.
*/
public interface Layout<E> {
String format(E event);
}
15 changes: 15 additions & 0 deletions src/main/java/vt/suopo/vlog/Lifecycle.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package vt.suopo.vlog;

/**
* 生命周期
*
* @author suopovate
* @since 2024/04/27
* <p>
* All rights Reserved.
*/
public interface Lifecycle {
boolean started();
boolean start();
boolean stop();
}
87 changes: 87 additions & 0 deletions src/main/java/vt/suopo/vlog/Logger.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
package vt.suopo.vlog;

import vt.suopo.vlog.appender.Appender;
import vt.suopo.vlog.event.DefaultLogEvent;
import vt.suopo.vlog.event.Level;
import vt.suopo.vlog.event.LogEvent;

/**
* 日志对象
*
* @author suopovate
* @since 2024/04/27
* <p>
* All rights Reserved.
*/
public class Logger {

private final String name;
private final Appender<LogEvent> appender;
private Level level;

Logger(String name, Appender<LogEvent> appender, Level level) {
this.name = name;
this.appender = appender;
this.level = level;
}

public String getName() {
return name;
}

private DefaultLogEvent buildLogEvent(Level level, String message, Object[] args) {
Throwable throwable = null;
Object[] resolvedArgs = args;
if (args != null && args.length > 0 && args[args.length - 1] instanceof Throwable) {
throwable = ((Throwable) args[args.length - 1]);
if (args.length > 1) {
resolvedArgs = new Object[args.length - 1];
System.arraycopy(args, 0, resolvedArgs, 0, args.length - 1);
}
}
return new DefaultLogEvent(
level,
Thread.currentThread().getName(),
System.currentTimeMillis(),
this,
message,
resolvedArgs,
throwable
);
}

public void trace(String message, Object... args) {
append(buildLogEvent(Level.TRACE, message, args));
}

public void debug(String message, Object... args) {
append(buildLogEvent(Level.DEBUG, message, args));
}

public void info(String message, Object... args) {
append(buildLogEvent(Level.INFO, message, args));
}

public void warn(String message, Object... args) {
append(buildLogEvent(Level.WARN, message, args));
}

public void error(String message, Object... args) {
append(buildLogEvent(Level.ERROR, message, args));
}

public void append(DefaultLogEvent event) {
if (event.getLevel().compareTo(level) >= 0) {
appender.append(event);
}
}

public Level getLevel() {
return level;
}

public void setLevel(Level level) {
this.level = level;
}

}
Loading

0 comments on commit 2642201

Please sign in to comment.